diff mbox series

bash: fix static build

Message ID e61b7469d3048416c7e3c681a75f773843fe48a6.1505759427.git.baruch@tkos.co.il
State Accepted
Headers show
Series bash: fix static build | expand

Commit Message

Baruch Siach Sept. 18, 2017, 6:30 p.m. UTC
When building bash statically, configure does not initialize the
SHOBJ_STATUS variable. The SHOBJ_STATUS make variable in
examples/loadables/Makefile.in must resolve to either 'supported' or
'unsupported'. Otherwise, the install-$(SHOBJ_STATUS) target does not
exist.

This leads to the following build failure:

make[2]: Entering directory '.../output/build/bash-4.4/examples/loadables'
make[2]: *** No rule to make target 'install-', needed by 'install'.  Stop.
make[2]: Leaving directory '.../output/build/bash-4.4/examples/loadables'
Makefile:793: recipe for target 'install' failed

with the following defconfig:

BR2_arm=y
BR2_STATIC_LIBS=y
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_BASH=y

Set SHOBJ_STATUS in the configure environment as a workaround.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
For some reason the autobuilders never caught this issue since the 4.4
version bump last November (commit cde22e1fd340).
---
 package/bash/bash.mk | 1 +
 1 file changed, 1 insertion(+)

Comments

Peter Korsgaard Sept. 19, 2017, 12:37 p.m. UTC | #1
>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:

 > When building bash statically, configure does not initialize the
 > SHOBJ_STATUS variable. The SHOBJ_STATUS make variable in
 > examples/loadables/Makefile.in must resolve to either 'supported' or
 > 'unsupported'. Otherwise, the install-$(SHOBJ_STATUS) target does not
 > exist.

 > This leads to the following build failure:

 > make[2]: Entering directory '.../output/build/bash-4.4/examples/loadables'
 > make[2]: *** No rule to make target 'install-', needed by 'install'.  Stop.
 > make[2]: Leaving directory '.../output/build/bash-4.4/examples/loadables'
 > Makefile:793: recipe for target 'install' failed

Hmm, while this is correct it doesn't really error out here:

( cd /home/peko/source/buildroot/output-bash/build/bash-4.4/examples/loadables && /usr/bin/make -j --jobserver-fds=3,4 --no-print-directory DESTDIR=/home/peko/source/buildroot/output-bash/target install )
make[3]: *** No rule to make target 'install-', needed by 'install'.  Stop.
Makefile:793: recipe for target 'install' failed
make[2]: [install] Error 2 (ignored)
rm -f /home/peko/source/buildroot/output-bash/target/bin/bashbug

So that probably explains why it doesn't fail in the autobuilders.

Does it really fail the build for you?

Have you looked into why SHOBJ_STATUS doesn't get expanded correctly,
and if this can fixed more nicely upstream / is already fixed?
Baruch Siach Sept. 19, 2017, 6:19 p.m. UTC | #2
Hi Peter,

On Tue, Sep 19, 2017 at 02:37:30PM +0200, Peter Korsgaard wrote:
> >>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:
> 
>  > When building bash statically, configure does not initialize the
>  > SHOBJ_STATUS variable. The SHOBJ_STATUS make variable in
>  > examples/loadables/Makefile.in must resolve to either 'supported' or
>  > 'unsupported'. Otherwise, the install-$(SHOBJ_STATUS) target does not
>  > exist.
> 
>  > This leads to the following build failure:
> 
>  > make[2]: Entering directory '.../output/build/bash-4.4/examples/loadables'
>  > make[2]: *** No rule to make target 'install-', needed by 'install'.  Stop.
>  > make[2]: Leaving directory '.../output/build/bash-4.4/examples/loadables'
>  > Makefile:793: recipe for target 'install' failed
> 
> Hmm, while this is correct it doesn't really error out here:
> 
> ( cd /home/peko/source/buildroot/output-bash/build/bash-4.4/examples/loadables && /usr/bin/make -j --jobserver-fds=3,4 --no-print-directory DESTDIR=/home/peko/source/buildroot/output-bash/target install )
> make[3]: *** No rule to make target 'install-', needed by 'install'.  Stop.
> Makefile:793: recipe for target 'install' failed
> make[2]: [install] Error 2 (ignored)
> rm -f /home/peko/source/buildroot/output-bash/target/bin/bashbug
> 
> So that probably explains why it doesn't fail in the autobuilders.
> 
> Does it really fail the build for you?

It doesn't. I should have checked that. This patch is not really needed then.

> Have you looked into why SHOBJ_STATUS doesn't get expanded correctly,
> and if this can fixed more nicely upstream / is already fixed?

SHOBJ_STATUS is not set when the "$ac_cv_func_dlopen" = "yes" condition 
evaluates to false. This is the case when building statically. Current bash 
code is not fixes, as far as I can see.

Something like this should fix the issue:

diff -Nuar bash-4.4-orig/configure.ac bash-4.4/configure.ac
--- bash-4.4-orig/configure.ac	2016-09-07 23:56:28.000000000 +0300
+++ bash-4.4/configure.ac	2017-09-19 21:15:00.376316006 +0300
@@ -1151,6 +1151,9 @@
 	AC_SUBST(SHOBJ_LIBS)
 	AC_SUBST(SHOBJ_STATUS)
 	AC_MSG_RESULT($SHOBJ_STATUS)
+else
+	SHOBJ_STATUS=unsupported
+	AC_SUBST(SHOBJ_STATUS)
 fi
 
 # try to create a directory tree if the source is elsewhere

But bash does not autoreconf nicely, so I didn't test that approach.

baruch
Peter Korsgaard Sept. 19, 2017, 7:45 p.m. UTC | #3
>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:

Hi,

 >> So that probably explains why it doesn't fail in the autobuilders.
 >> 
 >> Does it really fail the build for you?

 > It doesn't. I should have checked that. This patch is not really needed then.

Ok, good.

 >> Have you looked into why SHOBJ_STATUS doesn't get expanded correctly,
 >> and if this can fixed more nicely upstream / is already fixed?

 > SHOBJ_STATUS is not set when the "$ac_cv_func_dlopen" = "yes" condition 
 > evaluates to false. This is the case when building statically. Current bash 
 > code is not fixes, as far as I can see.

 > Something like this should fix the issue:

 > diff -Nuar bash-4.4-orig/configure.ac bash-4.4/configure.ac
 > --- bash-4.4-orig/configure.ac	2016-09-07 23:56:28.000000000 +0300
 > +++ bash-4.4/configure.ac	2017-09-19 21:15:00.376316006 +0300
 > @@ -1151,6 +1151,9 @@
 >  	AC_SUBST(SHOBJ_LIBS)
 >  	AC_SUBST(SHOBJ_STATUS)
 >  	AC_MSG_RESULT($SHOBJ_STATUS)
 > +else
 > +	SHOBJ_STATUS=unsupported
 > +	AC_SUBST(SHOBJ_STATUS)
 >  fi
 
 >  # try to create a directory tree if the source is elsewhere

 > But bash does not autoreconf nicely, so I didn't test that approach.

Ok, thanks.
Arnout Vandecappelle Sept. 24, 2017, 1:34 p.m. UTC | #4
On 18-09-17 20:30, Baruch Siach wrote:
> When building bash statically, configure does not initialize the
> SHOBJ_STATUS variable. The SHOBJ_STATUS make variable in
> examples/loadables/Makefile.in must resolve to either 'supported' or
> 'unsupported'. Otherwise, the install-$(SHOBJ_STATUS) target does not
> exist.
> 
> This leads to the following build failure:
> 
> make[2]: Entering directory '.../output/build/bash-4.4/examples/loadables'
> make[2]: *** No rule to make target 'install-', needed by 'install'.  Stop.
> make[2]: Leaving directory '.../output/build/bash-4.4/examples/loadables'
> Makefile:793: recipe for target 'install' failed
> 
> with the following defconfig:
> 
> BR2_arm=y
> BR2_STATIC_LIBS=y
> BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
> BR2_PACKAGE_BASH=y
> 
> Set SHOBJ_STATUS in the configure environment as a workaround.
> 
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>

 Even though this doesn't fail the build (because the error is ignored), it's
pretty fragile. And SHOBJ_STATUS=unsupported is certainly correct for static
builds. So I applied after all.

 Regards,
 Arnout
diff mbox series

Patch

diff --git a/package/bash/bash.mk b/package/bash/bash.mk
index 32c87a659e16..dd7c26fc1258 100644
--- a/package/bash/bash.mk
+++ b/package/bash/bash.mk
@@ -25,6 +25,7 @@  BASH_CONF_ENV += \
 # The static build needs some trickery
 ifeq ($(BR2_STATIC_LIBS),y)
 BASH_CONF_OPTS += --enable-static-link
+BASH_CONF_ENV += SHOBJ_STATUS=unsupported
 # bash wants to redefine the getenv() function. To check whether this is
 # possible, AC_TRY_RUN is used which is not possible in
 # cross-compilation.