Changeset 3876

Show
Ignore:
Timestamp:
09/17/09 15:44:58 (2 years ago)
Author:
tg
Message:

It has been confirmed that GNU bash 4 fails to configure a brcm-2.4
kernel, due to the Linux people making use of GNU bash 2/3 features
no longer supported in GNU bash 4… but, apparently, in mksh. See my
eMail signature on the thread in freewrt-developers@ for more fun…

This commit possibly (untested) fixes this by forcing the user (for
1.0-stable) to install mksh (himself) unless GNU bash 2/3 are used;
in trunk we always build mksh already anyway. Then, the kernel make
is passed CONFIG_SHELL as an override to ${MBSH}, which already was
used a lot in trunk (points to mksh if it exists, GNU bash otherwi-
se) and is now new in 1.0-stable – assuming this is the fix.

Proper fix ought to be to change the Linux scripts to not depend on
non-POSIX features for shells called as /bin/sh (which probably has
been done in later 2.6.x revisions), but this is very intrusive.

I know Han Boetes had pointed this out *long* ago (similar bug was,
probably still is, found in glibc’s ldd; eglibc might have at least
fixed this one). Now the GNU folks bite back themselves…

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/freewrt_1_0/Makefile

    r3098 r3876  
    150150        @echo 'LC_ALL:=C' >>lbin/prereq.mk 
    151151        @echo 'MAKE:=$${GMAKE}' >>lbin/prereq.mk 
     152        @if lbin/which mksh >/dev/null 2>&1; then \ 
     153                echo "MBSH:=$$(lbin/which mksh)" >>lbin/prereq.mk; \ 
     154        else \ 
     155                echo "MBSH:=$$(lbin/which bash)" >>lbin/prereq.mk; \ 
     156        fi 
    152157        @echo "OStype:=$$(env NOFAKE=yes uname)" >>lbin/prereq.mk 
    153158        @echo "_PATH:=$$PATH" >>lbin/prereq.mk 
  • branches/freewrt_1_0/scripts/scan-tools.sh

    r1402 r3876  
    22# $FreeWRT: src/share/misc/licence.template,v 1.8 2006/06/16 23:03:39 tg Rel $ 
    33#- 
    4 # Copyright (c) 2006 
     4# Copyright (c) 2006, 2009 
    55#       Thorsten Glaser <tg@mirbsd.de> 
    66# 
     
    223223fi 
    224224 
     225[[ ${BASH_VERSION%%.*} -lt 2 || ${BASH_VERSION%%.*} -gt 3 ]] && \ 
     226    if ! which mksh >/dev/null 2>&1; then 
     227        echo 'Your GNU bash is either too old or too new; version' 
     228        echo '2 or 3 are required. Install mksh to continue. You' 
     229        echo 'can get it from http://mirbsd.de/mksh if it is not' 
     230        echo 'already included with your distribution.' 
     231        out=1 
     232fi 
     233 
    225234 
    226235cd $topdir 
  • branches/freewrt_1_0/target/linux/brcm-2.4/Makefile

    r3821 r3876  
    182182          $(LINUX_DIR)/Makefile  \ 
    183183          $(LINUX_DIR)/arch/*/Makefile 
    184         $(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h $(MAKE_TRACE) 
    185         $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) dep $(MAKE_TRACE) 
     184        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) oldconfig include/linux/compile.h include/linux/version.h $(MAKE_TRACE) 
     185        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) dep $(MAKE_TRACE) 
    186186        touch $@ 
    187187else 
    188188$(LINUX_DIR)/.configured: $(LINUX_DIR)/.patched 
    189189        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-configure 
    190         $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts $(MAKE_TRACE) 
     190        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) oldconfig prepare scripts $(MAKE_TRACE) 
    191191        touch $@ 
    192192endif 
     
    194194$(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.configured 
    195195        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-compile 
    196         $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH=$(TARGET_PATH) $(MAKE_TRACE) 
     196        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH=$(TARGET_PATH) $(MAKE_TRACE) 
    197197 
    198198$(LINUX_KERNEL): $(LINUX_DIR)/vmlinux 
     
    203203$(LINUX_DIR)/.modules-compile: 
    204204        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-compile 
    205         $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH="$(TARGET_PATH)" modules $(MAKE_TRACE) 
     205        $(MAKE) CONFIG_SHELL='${MBSH}' -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) PATH="$(TARGET_PATH)" modules $(MAKE_TRACE) 
    206206        touch $@ 
    207207 
     
    209209        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install 
    210210        rm -rf $(LINUX_BUILD_DIR)/modules 
    211         $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" DEPMOD=true INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules modules_install $(MAKE_TRACE) 
     211        $(MAKE) CONFIG_SHELL='${MBSH}' -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" DEPMOD=true INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules modules_install $(MAKE_TRACE) 
    212212        touch $@ 
    213213 
    214214$(LINUX_DIR)/.linux-compile: $(LINUX_KERNEL) $(LINUX_DIR)/.modules-install 
    215215        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-create-packages 
    216         @$(MAKE) $(KERNEL_IPKG) $(TARGETS) $(MAKE_TRACE) 
     216        @$(MAKE) CONFIG_SHELL='${MBSH}' $(KERNEL_IPKG) $(TARGETS) $(MAKE_TRACE) 
    217217        touch $@ 
    218218 
     
    231231 
    232232install: compile 
    233         $(MAKE) $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
     233        $(MAKE) CONFIG_SHELL='${MBSH}' $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
    234234        @$(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install 
    235235        @rm -rf $(LINUX_BUILD_DIR)/root* 
     
    244244        rm -rf $(LINUX_BUILD_DIR)/linux-$(LINUX_VERSION) 
    245245        rm -f $(TARGETS) 
    246         $(MAKE) compile $(MAKE_TRACE) 
     246        $(MAKE) CONFIG_SHELL='${MBSH}' compile $(MAKE_TRACE) 
    247247 
    248248clean: 
  • branches/freewrt_1_0/toolchain/kernel-headers/Makefile

    r3821 r3876  
    4343$(LINUX_HEADERS_DIR)/.configured: $(LINUX_HEADERS_DIR)/.unpacked 
    4444        -$(CP) ./files/config.$(LINUX_HEADERS_ARCH) $(LINUX_HEADERS_DIR)/.config 
    45         $(MAKE) -C $(LINUX_HEADERS_DIR) ARCH=$(LINUX_HEADERS_ARCH) oldconfig include/linux/version.h 
     45        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_HEADERS_DIR) ARCH=$(LINUX_HEADERS_ARCH) oldconfig include/linux/version.h 
    4646        touch $(LINUX_HEADERS_DIR)/.configured 
    4747 
  • trunk/freewrt/mk/kernel-build.mk

    r3856 r3876  
    6060          $(LINUX_DIR)/Makefile  \ 
    6161          $(LINUX_DIR)/arch/*/Makefile 
    62         env GCC_HONOUR_COPTS=s $(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" oldconfig include/linux/compile.h include/linux/version.h $(MAKE_TRACE) 
    63         env GCC_HONOUR_COPTS=s $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" dep $(MAKE_TRACE) 
     62        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" oldconfig include/linux/compile.h include/linux/version.h $(MAKE_TRACE) 
     63        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" dep $(MAKE_TRACE) 
    6464else 
    65         echo N | env GCC_HONOUR_COPTS=s $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) 
    66         env GCC_HONOUR_COPTS=s $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" prepare scripts $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
     65        echo N | env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) 
     66        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" prepare scripts $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
    6767endif 
    6868        touch -c $(LINUX_DIR)/.config 
     
    7070$(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.config 
    7171        $(TRACE) target/linux/$(BOARD)-$(KERNEL)-kernel-compile 
    72         env GCC_HONOUR_COPTS=s $(MAKE) -C $(LINUX_DIR) V=1 ${MAKEJOBS} CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
     72        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_DIR) V=1 ${MAKEJOBS} CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
    7373        $(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-compile 
    74         env GCC_HONOUR_COPTS=s $(MAKE) -C "$(LINUX_DIR)" V=1 ${MAKEJOBS} CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" modules $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
     74        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C "$(LINUX_DIR)" V=1 ${MAKEJOBS} CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) CC="$(TARGET_CC)" modules $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
    7575        $(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install 
    7676        rm -rf $(LINUX_BUILD_DIR)/modules 
    77         env GCC_HONOUR_COPTS=s $(MAKE) -C "$(LINUX_DIR)" V=1 CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules modules_install $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
     77        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' -C "$(LINUX_DIR)" V=1 CROSS_COMPILE="$(KERNEL_CROSS)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules modules_install $(MAKE_TRACE) HOSTCFLAGS='-O2 -idirafter ${TOPDIR}/scripts' 
    7878        $(TRACE) target/linux/$(BOARD)-$(KERNEL)-create-packages 
    7979        -mkdir $(BUILD_DIR)/kmod-control 
    80         env GCC_HONOUR_COPTS=s $(MAKE) $(KERNEL_IPKG) $(TARGETS) $(MAKE_TRACE) 
     80        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' $(KERNEL_IPKG) $(TARGETS) $(MAKE_TRACE) 
    8181        touch -c $(LINUX_DIR)/vmlinux 
    8282 
     
    117117 
    118118install: compile 
    119         env GCC_HONOUR_COPTS=s $(MAKE) $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
     119        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
    120120        $(TRACE) target/linux/$(BOARD)-$(KERNEL)-modules-install 
    121121        rm -rf ${LINUX_BUILD_DIR}/root* 
     
    129129 
    130130noinstall: compile 
    131         env GCC_HONOUR_COPTS=s $(MAKE) $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
     131        env GCC_HONOUR_COPTS=s $(MAKE) CONFIG_SHELL='${MBSH}' $(KPKG_MAKEOPTS) $(LINUX_KERNEL) $(MAKE_TRACE) 
    132132        rm -rf ${LINUX_BUILD_DIR}/root* 
    133133        cd ${BUILD_DIR} && mirpax -rw -pe root ${LINUX_BUILD_DIR}/ 
  • trunk/freewrt/toolchain/kernel-headers/Makefile

    r2777 r3876  
    4545$(LINUX_HEADERS_DIR)/.configured: $(LINUX_HEADERS_DIR)/.unpacked 
    4646        -$(CP) ./files/config.$(LINUX_HEADERS_ARCH) $(LINUX_HEADERS_DIR)/.config 
    47         $(MAKE) -C $(LINUX_HEADERS_DIR) ARCH=$(LINUX_HEADERS_ARCH) oldconfig include/linux/version.h 
     47        $(MAKE) CONFIG_SHELL='${MBSH}' -C $(LINUX_HEADERS_DIR) ARCH=$(LINUX_HEADERS_ARCH) oldconfig include/linux/version.h 
    4848        touch $(LINUX_HEADERS_DIR)/.configured 
    4949