From: Sam Ravnborg When utilising the make O=... option the include options for gcc were mangled even when absolute paths was used. Also remove duplication of CPPFLAGS. They were assigned twice. [It is still possible for architectures to modify CPPFLAGS]. This patch allows xconfig to be build with make O=... xconfig.It will also help development of external modules with absolute paths for their -I options. Note: As a side effect a full recompile of the kernel takes place due to changes in number of gcc options. --- 25-akpm/scripts/Makefile.lib | 25 ++++++++++++++----------- 1 files changed, 14 insertions(+), 11 deletions(-) diff -puN scripts/Makefile.lib~kbuild-unmangle-include-options scripts/Makefile.lib --- 25/scripts/Makefile.lib~kbuild-unmangle-include-options Mon Jan 26 14:18:17 2004 +++ 25-akpm/scripts/Makefile.lib Mon Jan 26 14:18:17 2004 @@ -144,8 +144,7 @@ _hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_ # If building the kernel in a separate objtree expand all occurrences -# of -Idir to -Idir -I$(srctree)/dir. -# hereby allowing gcc to locate files in both trees. Local tree first. +# of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). ifeq ($(KBUILD_SRC),) __c_flags = $(_c_flags) @@ -153,16 +152,20 @@ __a_flags = $(_a_flags) __hostc_flags = $(_hostc_flags) __hostcxx_flags = $(_hostcxx_flags) else -flags = $(foreach o,$($(1)),\ - $(if $(filter -I%,$(o)),$(patsubst -I%,-I$(srctree)/%,$(o)),$(o))) -# -I$(obj) locate generated .h files -# -I$(srctree)/$(src) locate .h files in srctree, from generated .c files -# FIXME: Replace both with specific EXTRA_CFLAGS statements -__c_flags = -I$(obj) -I$(srctree)/$(src) $(call flags,_c_flags) -__a_flags = $(call flags,_a_flags) -__hostc_flags = -I$(obj) $(call flags,_hostc_flags) -__hostcxx_flags = $(call flags,_hostcxx_flags) +# Prefix -I with $(srctree) if it is not an absolute path +addtree = $(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1) +# Find all -I options and call addtree +flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o))) + +# -I$(obj) locates generated .h files +# $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files +# and locates generated .h files +# FIXME: Replace both with specific CFLAGS* statements in the makefiles +__c_flags = $(call addtree,-I$(obj)) $(call flags,_c_flags) +__a_flags = $(call flags,_a_flags) +__hostc_flags = -I$(obj) $(call flags,_hostc_flags) +__hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags) endif c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \ _