--gc-sections linker flag with static linking. If this happens, then
the "stdout" variable (used by printf() and such) will only work if stdout
is _not_ redirected. I.E "./busybox" prints stuff, but "./busybox | cat"
does not produce any output. (But even when redirected, "write(1,"blah",4);"
continues to work just fine.)
This is clearly a glibc bug, but to avoid triggering it I've moved the
--gc-sections flag so it only gets added when we're not statically linking.
If somebody would like to go poke Ulrich Drepper, you can trivially reproduce
this with a "hello world" program, ala:
gcc -static -Wl,--gc-sections hello.c && (./a.out | cat)
2) The check_cc macros should probably all have the same number of arguments.
3) Move the -Werror into the gcc 4.0 on i386 test, because gcc 4.1 is broken
and produces warnings for things that provably aren't incorrect.
In other news it would be nice if our check_ld macro actually did something,
and why does or makefile do all the check_cc calls, then call itself as if
it's building out of tree, then do all the check_cc calls again?
Adds "Enable getopt long" under "General options", default y.
Send patches to fix getopt_ulflags and run_parts.c if you turn this off..
See http://busybox.net/lists/busybox/2006-May/021828.html for a start to run-parts
- rename check_gcc to check_cc and pass the CC to use as arg#1; peruse check_cc for HOSTCFLAGS
- add and use check_strip
- add checks for {,no-}whole-archive and {start,end}-group LD flags
(with O=directory), and reverting them fixes building out of tree. I'd be
happy to fix them up instead of reverting them if I had the foggiest idea
what they were trying to do, but I don't, and this at least gets building
out of tree working again...
the lib (due to bug in gcc; see comment.)
I would have run the testsuite to check if everything is still behaving, but
unfortunately i cannot run the testsuite anymore: it just sits there and does
nothing even with a pristine checkout and an old gcc.
srcdir=/tmp/busybox/testsuite /tmp/busybox/testsuite/runtest
PASS: Applet order
FAIL: Common typos
PASS: Obsolete function usage
PASS: Obsolete function usage
<spins, ^C>
make[1]: *** [check] Interrupt
make: *** [check] Interrupt
I've just corrected that wrong double-printing.
Anyway. with gcc-4.1-HEAD from earlier today, we now have for
defconfig+ COMPILE_AT_ONCE:
880 -rwxr-xr-x 1 433 433 893476 Apr 28 21:41 busybox.oorig-4.0
860 -rwxr-xr-x 1 433 433 874560 Apr 28 21:36 busybox.oorig
844 -rwxr-xr-x 1 433 433 858752 Apr 28 21:49 busybox
text data bss dec hex filename
879920 11568 1039148 1930636 1d758c busybox.oorig-4.0
862802 10192 1038796 1911790 1d2bee busybox.oorig
848066 9100 1037536 1894702 1ce92e busybox
values for 4.0.2 just added for reference..
$(srcdir) can't bind early since it's set to a different value in each subdir.
If it binds early, it's blank, hence an empty -I which eats the next option
as a directory to look for #include files in.
So CFLAGS has to bind late, but the check_gcc stuff should only get run once.
I added a "make V=2" mode to show when check_gcc gets run, and turned WARNINGS
into a CFLAGS line since it was always getting added anyway.
e.g. archival/uncompress.c wrongly includes libbb.h instead of busybox.h
decompress_bunzip2.c,open_transformer.c don't include the proper "unarchive.h"
etc, etc.
- don't overwrite objects in the archive. Affected applets with name-clash
mostly vs. libbb:
iplink_main
iproute_main
iptunnel_main
login_main
run_parts_main