svn 14824 broke -funsigned-char and possibly building out of tree, because $(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.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -72,11 +72,14 @@ CFLAGS_EXTRA=$(subst ",, $(strip $(EXTRA_CFLAGS_OPTIONS))) | |
| #CROSS_CFLAGS+=-nostdinc -I$(LIBCDIR)/include -I$(GCCINCDIR) -funsigned-char | |
| #GCCINCDIR:=$(shell gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp") | |
| - | WARNINGS=-Wall -Wstrict-prototypes -Wshadow |
| - | CFLAGS:=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) |
| - | |
| + | # This must bind late because srcdir is reset for every source subdirectory. |
| + | CFLAGS=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) |
| + | CFLAGS+=$(CHECKED_CFLAGS) |
| ARFLAGS=cru | |
| + | # Warnings |
| + | |
| + | CFLAGS+=-Wall -Wstrict-prototypes -Wshadow |
| # gcc centric. Perhaps fiddle with findstring gcc,$(CC) for the rest | |
| # get the CC MAJOR/MINOR version | |
| @@ -100,8 +103,13 @@ TARGET_ARCH:=$(shell $(CC) -dumpmachine | sed -e s'/-.*//' \ | |
| ) | |
| endif | |
| - | # A nifty macro to make testing gcc features easier |
| + | # A nifty macro to make testing gcc features easier, but note that everything |
| + | # that uses this _must_ use := or it will be re-evaluated for every file. |
| + | ifeq ($(strip $(V)),2) |
| + | VERBOSE_CHECK_GCC=echo check_gcc $(1) >> /dev/stderr; |
| + | endif |
| check_gcc=$(shell \ | |
| + | $(VERBOSE_CHECK_GCC)\ |
| if [ "$(1)" != "" ]; then \ | |
| if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ | |
| then echo "$(1)"; else echo "$(2)"; fi \ | |
| @@ -113,9 +121,13 @@ check_ld=$(shell \ | |
| $(LD) --help | grep -q "\$(1)" && echo "-Wl,$(1)" ; \ | |
| fi) | |
| - | CFLAGS+=$(call check_gcc,-funsigned-char,) |
| + | # Pin CHECKED_CFLAGS with := so it's only evaluated once. |
| + | CHECKED_CFLAGS:=$(call check_gcc,-funsigned-char,) |
| + | CHECKED_CFLAGS+=$(call check_gcc,-mmax-stack-frame=256,) |
| + | |
| + | # Preemptively pin this too. |
| + | PROG_CFLAGS:= |
| - | CFLAGS+=$(call check_gcc,-mmax-stack-frame=256,) |
| #-------------------------------------------------------- | |
| # Arch specific compiler optimization stuff should go here. | |
| @@ -189,24 +201,24 @@ else | |
| endif | |
| endif | |
| ifeq ($(strip $(CONFIG_DEBUG)),y) | |
| - | CFLAGS +=$(WARNINGS) -g -D_GNU_SOURCE |
| + | CFLAGS +=-g -D_GNU_SOURCE |
| LDFLAGS += $(call check_ld,--warn-common,) | |
| else | |
| - | CFLAGS+=$(WARNINGS) $(OPTIMIZATIONS) -D_GNU_SOURCE -DNDEBUG |
| + | CFLAGS+=$(OPTIMIZATIONS) -D_GNU_SOURCE -DNDEBUG |
| LDFLAGS += $(call check_ld,--warn-common,) | |
| LDFLAGS += $(call check_ld,--sort-common,) | |
| endif | |
| # warn a bit more verbosely for non-release versions | |
| ifneq ($(EXTRAVERSION),) | |
| - | CFLAGS+=$(call check_gcc,-Wstrict-prototypes,) |
| - | CFLAGS+=$(call check_gcc,-Wmissing-prototypes,) |
| - | CFLAGS+=$(call check_gcc,-Wmissing-declarations,) |
| + | CHECKED_CFLAGS+=$(call check_gcc,-Wstrict-prototypes,) |
| + | CHECKED_CFLAGS+=$(call check_gcc,-Wmissing-prototypes,) |
| + | CHECKED_CFLAGS+=$(call check_gcc,-Wmissing-declarations,) |
| endif | |
| STRIPCMD:=$(STRIP) -s --remove-section=.note --remove-section=.comment | |
| ifeq ($(strip $(CONFIG_STATIC)),y) | |
| PROG_CFLAGS += $(call check_gcc,-static,) | |
| endif | |
| - | CFLAGS_SHARED += $(call check_gcc,-shared,) |
| + | CFLAGS_SHARED := $(call check_gcc,-shared,) |
| LIB_CFLAGS+=$(CFLAGS_SHARED) | |
| ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y) | |
| @@ -231,7 +243,7 @@ endif | |
| OBJECTS:=$(APPLET_SOURCES:.c=.o) busybox.o usage.o applets.o | |
| - | CFLAGS += $(CROSS_CFLAGS) |
| + | CFLAGS += $(CHECKED_CFLAGS) $(CROSS_CFLAGS) |
| ifdef BB_INIT_SCRIPT | |
| CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"' | |
| endif | |