kbuild: only one call for include/ in make headers_*
Sam Ravnborg [Mon, 9 Jun 2008 19:24:28 +0000 (21:24 +0200)]
Move it to the top-level file to decide if we install/check
the generic headers or the arch specific headers.

This revealed a long standing bug where "make headers_check_all"
relied on the files in asm/ for the current architecture.
So make headers_check_all is now broken by this commit.

In addition:

o add a simpler way to detect if an arch support
  exporting header files.

o add 'set -e;' so we error out early if
  make headers_check_all fails.

o add sparc64 and cris to arch we do not process
  in make headers_*_all because:

    sparc64 - use sparc to export headers
    cris    - is know seriously broken

Includes suggestions from: David Woodhouse
<dwmw2@infradead.org>.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: David Woodhouse <dwmw2@infradead.org>

Makefile
include/Kbuild
scripts/Makefile.headersinst

index 33e735c..2f01364 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1014,7 +1014,7 @@ firmware_install: FORCE
 #Default location for installed headers
 export INSTALL_HDR_PATH = $(objtree)/usr
 
-hdr-filter := generic um ppc
+hdr-filter := generic um ppc sparc64 cris
 hdr-archs  := $(filter-out $(hdr-filter),                           \
                   $(patsubst $(srctree)/include/asm-%/Kbuild,%,     \
                       $(wildcard $(srctree)/include/asm-*/Kbuild)))
@@ -1026,29 +1026,31 @@ __headers: include/linux/version.h scripts_basic FORCE
 
 PHONY += headers_install_all
 headers_install_all: __headers
+       $(Q)$(MAKE) $(hdr-inst)=include
        $(Q)set -e; for arch in $(hdr-archs); do \
-        $(MAKE) ARCH=$$arch SRCARCH=$$arch $(hdr-inst)=include \
-                BIASMDIR=-bi-$$arch ;\
+        $(MAKE) $(hdr-inst)=include/asm-$$arch   \
+                SRCARCH=$$arch dst=include/asm-$$arch;  \
         done
 
 PHONY += headers_install
 headers_install: __headers
-       $(Q)if [ ! -r $(srctree)/include/asm-$(SRCARCH)/Kbuild ]; then \
-         echo '*** Error: Headers not exportable for this architecture ($(SRCARCH))'; \
-         exit 1 ; \
-       fi
-       $(Q)$(MAKE) $(hdr-inst)=include ARCH=$(SRCARCH)
+       $(if $(wildcard $(srctree)/include/asm-$(SRCARCH)/Kbuild),, \
+       $(error Headers not exportable for this architecture ($(SRCARCH))))
+       $(Q)$(MAKE) $(hdr-inst)=include
+       $(Q)$(MAKE) $(hdr-inst)=include/asm-$(SRCARCH) dst=include/asm
 
 PHONY += headers_check_all
 headers_check_all: headers_install_all
+       $(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
        $(Q)set -e; for arch in $(hdr-archs); do \
-        $(MAKE) ARCH=$$arch SRCARCH=$$arch $(hdr-inst)=include \
-                BIASMDIR=-bi-$$arch HDRCHECK=1 ;\
+        $(MAKE) SRCARCH=$$arch $(hdr-inst)=include/asm-$$arch HDRCHECK=1 ;\
         done
 
 PHONY += headers_check
 headers_check: headers_install
-       $(Q)$(MAKE) $(hdr-inst)=include ARCH=$(SRCARCH) HDRCHECK=1
+       $(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
+       $(Q)$(MAKE) $(hdr-inst)=include/asm-$(SRCARCH) \
+                   dst=include/asm HDRCHECK=1
 
 # ---------------------------------------------------------------------------
 # Modules
index bdca155..d8c3e3c 100644 (file)
@@ -1,3 +1,6 @@
+# Top-level Makefile calls into asm-$(ARCH)
+# List only non-arch directories below
+
 header-y += asm-generic/
 header-y += linux/
 header-y += sound/
@@ -5,5 +8,3 @@ header-y += mtd/
 header-y += rdma/
 header-y += video/
 header-y += drm/
-
-header-y += asm-$(ARCH)/
index 599adc6..599503f 100644 (file)
@@ -28,15 +28,6 @@ include $(kbuild-file)
 
 include scripts/Kbuild.include
 
-# If this is include/asm-$(ARCH) then override $(_dst) so that
-# we install to include/asm directly.
-# Unless $(BIASMDIR) is set, in which case we're probably doing
-# a 'headers_install_all' build and we should keep the -$(ARCH)
-# in the directory name.
-ifeq ($(obj),include/asm-$(ARCH)$(BIASMDIR))
-     _dst := include/asm
-endif
-
 install := $(INSTALL_HDR_PATH)/$(_dst)
 
 header-y       := $(sort $(header-y) $(unifdef-y))