 c05190371d
			
		
	
	
	c05190371d
	
	
	
		
			
			The sed expression used at the moment in scripts/Makefile.headersinst
relies on the (handy) GNU extension where you can escape ERE's in an
otherwise BRE without using the GNU -r option.  The following patch
replaces this "\+" usage with a functionally equivalent POSIX BRE compliant
"\{1,\}".  Tested with `make headers_install` against blackfin/x86_64/i386
targets.
Stupid whiny OS X users and their crappy sed ;)
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
		
	
			
		
			
				
	
	
		
			194 lines
		
	
	
	
		
			6.9 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
	
		
			6.9 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| # ==========================================================================
 | |
| # Installing headers
 | |
| #
 | |
| # header-y files will be installed verbatim
 | |
| # unifdef-y are the files where unifdef will be run before installing files
 | |
| # objhdr-y are generated files that will be installed verbatim
 | |
| #
 | |
| # ==========================================================================
 | |
| 
 | |
| UNIFDEF := scripts/unifdef -U__KERNEL__
 | |
| 
 | |
| # Eliminate the contents of (and inclusions of) compiler.h
 | |
| HDRSED  := sed 	-e "s/ inline / __inline__ /g" \
 | |
| 		-e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \
 | |
| 		-e "s/(__user[[:space:]]\{1,\}/ (/g" \
 | |
| 		-e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \
 | |
| 		-e "s/(__force[[:space:]]\{1,\}/ (/g" \
 | |
| 		-e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \
 | |
| 		-e "s/(__iomem[[:space:]]\{1,\}/ (/g" \
 | |
| 		-e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \
 | |
| 		-e "s/[[:space:]]__attribute_const__$$//" \
 | |
| 		-e "/^\#include <linux\/compiler.h>/d"
 | |
| 
 | |
| _dst := $(if $(dst),$(dst),$(obj))
 | |
| 
 | |
| ifeq (,$(patsubst include/asm/%,,$(obj)/))
 | |
| # For producing the generated stuff in include/asm for biarch builds, include
 | |
| # both sets of Kbuild files; we'll generate anything which is mentioned in
 | |
| # _either_ arch, and recurse into subdirectories which are mentioned in either
 | |
| # arch. Since some directories may exist in one but not the other, we must
 | |
| # use $(wildcard...). 
 | |
| GENASM := 1
 | |
| archasm	   := $(subst include/asm,asm-$(ARCH),$(obj))
 | |
| altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj))
 | |
| KBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild)
 | |
| else
 | |
| KBUILDFILES := $(srctree)/$(obj)/Kbuild
 | |
| endif
 | |
| 
 | |
| include $(KBUILDFILES)
 | |
| 
 | |
| include scripts/Kbuild.include 
 | |
| 
 | |
| # If this is include/asm-$(ARCH) and there's no $(ALTARCH), 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)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR))
 | |
|      _dst := include/asm
 | |
| endif
 | |
| 
 | |
| header-y	:= $(sort $(header-y))
 | |
| unifdef-y	:= $(sort $(unifdef-y))
 | |
| subdir-y	:= $(patsubst %/,%,$(filter %/, $(header-y)))
 | |
| header-y	:= $(filter-out %/, $(header-y))
 | |
| header-y	:= $(filter-out $(unifdef-y),$(header-y))
 | |
| 
 | |
| # stamp files for header checks
 | |
| check-y		:= $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y))
 | |
| 
 | |
| # Work out what needs to be removed
 | |
| oldheaders	:= $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h))
 | |
| unwanted	:= $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders))
 | |
| 
 | |
| oldcheckstamps	:= $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h))
 | |
| unwanted	+= $(filter-out $(check-y),$(oldcheckstamps))
 | |
| 
 | |
| # Prefix them all with full paths to $(INSTALL_HDR_PATH)
 | |
| header-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y))
 | |
| unifdef-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(unifdef-y))
 | |
| objhdr-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y))
 | |
| check-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y))
 | |
| 
 | |
| 
 | |
| ifdef ALTARCH
 | |
| ifeq ($(obj),include/asm-$(ARCH))
 | |
| altarch-y	:= altarch-dir
 | |
| endif
 | |
| endif
 | |
| 
 | |
| # Make the definitions visible for recursive make invocations
 | |
| export ALTARCH
 | |
| export ARCHDEF
 | |
| export ALTARCHDEF
 | |
| 
 | |
| quiet_cmd_o_hdr_install   = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
 | |
|       cmd_o_hdr_install   = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \
 | |
| 			    $(INSTALL_HDR_PATH)/$(_dst)
 | |
| 
 | |
| quiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
 | |
|       cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@)	\
 | |
| 			    > $@
 | |
| 
 | |
| quiet_cmd_unifdef	  = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
 | |
|       cmd_unifdef	  = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \
 | |
| 				   | $(HDRSED) > $@ || :
 | |
| 
 | |
| quiet_cmd_check		  = CHECK   $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@)
 | |
|       cmd_check		  = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \
 | |
|                               $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@
 | |
| 
 | |
| quiet_cmd_remove	  = REMOVE  $(_dst)/$@
 | |
|       cmd_remove	  = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@
 | |
| 
 | |
| quiet_cmd_mkdir		  = MKDIR   $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
 | |
|       cmd_mkdir		  = mkdir -p $@
 | |
| 
 | |
| quiet_cmd_gen		  = GEN     $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
 | |
|       cmd_gen		  = \
 | |
| FNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@);			\
 | |
| STUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z.- A-Z__`;			\
 | |
| (echo "/* File autogenerated by 'make headers_install' */" ;		\
 | |
| echo "\#ifndef $$STUBDEF" ;						\
 | |
| echo "\#define $$STUBDEF" ;						\
 | |
| echo "\# if $(ARCHDEF)" ;						\
 | |
| if [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then		\
 | |
| 	echo "\#  include <$(archasm)/$$FNAME>" ;			\
 | |
| else									\
 | |
| 	echo "\#  error $(archasm)/$$FNAME does not exist in"		\
 | |
| 			"the $(ARCH) architecture" ;			\
 | |
| fi ;									\
 | |
| echo "\# elif $(ALTARCHDEF)" ;						\
 | |
| if [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then		\
 | |
| 	echo "\#  include <$(altarchasm)/$$FNAME>" ;			\
 | |
| else									\
 | |
| 	echo "\#  error $(altarchasm)/$$FNAME does not exist in"	\
 | |
| 			"the $(ALTARCH) architecture" ;			\
 | |
| fi ;									\
 | |
| echo "\# else" ;							\
 | |
| echo "\#  warning This machine appears to be"				\
 | |
| 		 "neither $(ARCH) nor $(ALTARCH)." ;			\
 | |
| echo "\# endif" ;							\
 | |
| echo "\#endif /* $$STUBDEF */" ;					\
 | |
| ) > $@
 | |
| 
 | |
| .PHONY: __headersinst __headerscheck
 | |
| 
 | |
| ifdef HDRCHECK
 | |
| __headerscheck: $(subdir-y) $(check-y)
 | |
| 	@true
 | |
| 
 | |
| $(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h 
 | |
| 	$(call cmd,check)
 | |
| 
 | |
| # Other dependencies for $(check-y)
 | |
| include /dev/null $(wildcard $(check-y))
 | |
| 
 | |
| # ... but leave $(check-y) as .PHONY for now until those deps are actually correct.
 | |
| .PHONY: $(check-y)
 | |
| 
 | |
| else
 | |
| # Rules for installing headers
 | |
| __headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y)
 | |
| 	@true
 | |
| 
 | |
| $(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted)
 | |
| 
 | |
| $(INSTALL_HDR_PATH)/$(_dst):
 | |
| 	$(call cmd,mkdir)
 | |
| 
 | |
| .PHONY: $(unwanted)
 | |
| $(unwanted):
 | |
| 	$(call cmd,remove)
 | |
| 
 | |
| ifdef GENASM
 | |
| $(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES)
 | |
| 	$(call cmd,gen)
 | |
| 
 | |
| else
 | |
| $(objhdr-y) :		$(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(KBUILDFILES)
 | |
| 	$(call cmd,o_hdr_install)
 | |
| 
 | |
| $(header-y) :		$(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES)
 | |
| 	$(call cmd,headers_install)
 | |
| 
 | |
| $(unifdef-y) :		$(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES)
 | |
| 	$(call cmd,unifdef)
 | |
| endif
 | |
| endif
 | |
| 
 | |
| hdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
 | |
| 
 | |
| .PHONY: altarch-dir
 | |
| # All the files in the normal arch dir must be created first, since we test
 | |
| # for their existence.
 | |
| altarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y)
 | |
| 	$(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH)
 | |
| 	$(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR)
 | |
| 
 | |
| # Recursion
 | |
| .PHONY: $(subdir-y)
 | |
| $(subdir-y):
 | |
| 	$(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel)
 |