BusyBox Bug and Patch Tracking
BusyBox
  

Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0005214 [buildroot] Other major always 10-02-08 22:11 10-05-08 21:38
Reporter mjd View Status public  
Assigned To buildroot
Priority normal Resolution open  
Status assigned   Product Version
Summary 0005214: make uclibc-config fails, as sed does not exist.
Description I am getting the following failure from a fresh checkout of buildroot:

<yada yada>
/home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/bin/sed -i -e 's,^CROSS_COMPILER_PREFIX=.*,CROSS_COMPILER_PREFIX="/home/mjd/wrk/buildroot-sym-1/build_arm/staging_dir/usr/bin/arm-linux-uclibc-",g' \
                -e 's,# TARGET_arm is not set,TARGET_arm=y,g' \
                -e 's,^TARGET_ARCH=".*",TARGET_ARCH=\"arm\",g' \
                -e 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"/home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/linux\",g' \
                -e 's,^KERNEL_HEADERS=.*,KERNEL_HEADERS=\"/home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/linux/include\",g' \
                -e 's,^RUNTIME_PREFIX=.*,RUNTIME_PREFIX=\"/\",g' \
                -e 's,^DEVEL_PREFIX=.*,DEVEL_PREFIX=\"/usr/\",g' \
                -e 's,^SHARED_LIB_LOADER_PREFIX=.*,SHARED_LIB_LOADER_PREFIX=\"/lib\",g' \
                /home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/uClibc-0.9.29/.oldconfig
make: /home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/bin/sed: Command not found

How to reproduce:

tar -xjf ../dl/buildroot-svn-snapshot.tar.bz2
cd buildroot
cp target/device/Atmel/at91sam9260dfc/at91sam9260dfc_defconfig .config
make menuconfig
# Immediately exit and save without changing any values
make uclibc-config
Additional Information On my machine, uclibc-config depends on /home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/uClibc-0.9.29/.oldconfig

The rule for /home/mjd/wrk/buildroot-sym-1/toolchain_build_arm/uClibc-0.9.29/.oldconfig in toolchain/uClibc/uclibc.mk uses sed from $(SED):

$(UCLIBC_DIR)/.oldconfig: $(UCLIBC_DIR)/.patched $(UCLIBC_CONFIG_FILE)
    cp -f $(UCLIBC_CONFIG_FILE) $(UCLIBC_DIR)/.oldconfig
    $(SED) 's,^CROSS_COMPILER_PREFIX=.*,CROSS_COMPILER_PREFIX="$(TARGET_CROSS)",g' \
        -e 's,# TARGET_$(UCLIBC_TARGET_ARCH) is not set,TARGET_$(UCLIBC_TARGET_ARCH)=y,g' \
        -e 's,^TARGET_ARCH=".*",TARGET_ARCH=\"$(UCLIBC_TARGET_ARCH)\",g' \
        -e 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE=\"$(LINUX_HEADERS_DIR)\",g' \
        -e 's,^KERNEL_HEADERS=.*,KERNEL_HEADERS=\"$(LINUX_HEADERS_DIR)/include\",g' \
        -e 's,^RUNTIME_PREFIX=.*,RUNTIME_PREFIX=\"/\",g' \
        -e 's,^DEVEL_PREFIX=.*,DEVEL_PREFIX=\"/usr/\",g' \
        -e 's,^SHARED_LIB_LOADER_PREFIX=.*,SHARED_LIB_LOADER_PREFIX=\"/lib\",g' \
        $(UCLIBC_DIR)/.oldconfig

The problem is that there is nothing to force the generation of $(SED) before this rule is run.

I tried adding $(SED) to the list of prerequisites for $(UCLIBC_DIR)/.oldconfig, but it doesn't work, because SED is set in packages/sed/sed.mk, but that file is not read in until *after* uclibc.mk, so $(SED) is empty at the time that the prerequisite list is parsed.
Attached Files  uclibc-sed-1.diff [^] (737 bytes) 10-02-08 22:59

- Relationships

- Notes
(0012594)
mjd
10-02-08 23:00

The above patch to buildroot fixes the problem for me.
 
(0012624)
egtvedt
10-03-08 00:29

Is this patch allways correct? The rule seems a bit weird for me, I would assume something like sed-host-installed or something similar.

Does Buildroot build sed if the host is missing it?
 
(0012634)
bernhardf
10-03-08 01:11

this is not correct, no. Works in my tree..
 
(0012674)
mjd
10-03-08 08:18

egtvedt said:
> The rule seems a bit weird for me

True. I had a look around. uclibc-menuconfig has this rule:

uclibc-menuconfig: host-sed $(UCLIBC_DIR)/.config
        $(MAKE1) -C $(UCLIBC_DIR) \
                PREFIX=$(TOOL_BUILD_DIR)/uClibc_dev/ \
                DEVEL_PREFIX=/usr/ \
                RUNTIME_PREFIX=$(TOOL_BUILD_DIR)/uClibc_dev/ \
                HOSTCC="$(HOSTCC)" \
                menuconfig && \
        touch -c $(UCLIBC_DIR)/.config

Maybe it's "host-sed", not what I suggested. I just tried host-sed, and it works for me.

Regarding what happens if there's no platform sed, I don't know.

bernhardf said:
> this is not correct, no. Works in my tree..

Sorry, I don't understand what you mean.

Do you mean your tree works with this change, or without?

If without, please use a fresh tree from today, and follow the steps I gave.
 
(0012734)
mjd
10-03-08 17:01

There is a problem with my fix - it makes sure sed exists, but for some reason, it forces recompilation of uclibc. So please don't apply this fix yet. I am looking at the problem now.
 
(0012744)
mjd
10-03-08 18:43

I think the solution is that host-sed should come first, ie,

 $(UCLIBC_DIR)/.oldconfig: host-sed $(UCLIBC_DIR)/.patched $(UCLIBC_CONFIG_FILE)

This matches the other targets in uclibc.mk.
 
(0012794)
mjd
10-05-08 21:38

Putting host-sed first in the prerequisite list is still not the answer, as host-sed doesn't exist, therefore the rule to create .oldconfig from $(UCLIBC_CONFIG_FILE) always runs.

Part of the problem is that uclibc.mk gets read before sed.mk. Is there any way to do the host sed tests *before* uclibc.mk gets read? Either as a separate makefile, or by including it twice?
 

- Issue History
Date Modified Username Field Change
10-02-08 22:11 mjd New Issue
10-02-08 22:11 mjd Status new => assigned
10-02-08 22:11 mjd Assigned To  => buildroot
10-02-08 22:12 mjd Issue Monitored: mjd
10-02-08 22:59 mjd File Added: uclibc-sed-1.diff
10-02-08 23:00 mjd Note Added: 0012594
10-03-08 00:29 egtvedt Note Added: 0012624
10-03-08 01:11 bernhardf Note Added: 0012634
10-03-08 08:18 mjd Note Added: 0012674
10-03-08 17:01 mjd Note Added: 0012734
10-03-08 18:43 mjd Note Added: 0012744
10-05-08 21:38 mjd Note Added: 0012794


Copyright © 2000 - 2006 Mantis Group
Powered by Mantis Bugtracker