18d730cfbSDavid Woodhouse# ==========================================================================
28d730cfbSDavid Woodhouse# Installing headers
38d730cfbSDavid Woodhouse#
48d730cfbSDavid Woodhouse# header-y files will be installed verbatim
58d730cfbSDavid Woodhouse# unifdef-y are the files where unifdef will be run before installing files
68d730cfbSDavid Woodhouse# objhdr-y are generated files that will be installed verbatim
78d730cfbSDavid Woodhouse#
88d730cfbSDavid Woodhouse# ==========================================================================
98d730cfbSDavid Woodhouse
1007aea3a7SSam RavnborgUNIFDEF := scripts/unifdef -U__KERNEL__
118d730cfbSDavid Woodhouse
128d730cfbSDavid Woodhouse# Eliminate the contents of (and inclusions of) compiler.h
138d730cfbSDavid WoodhouseHDRSED  := sed	-e "s/ inline / __inline__ /g" \
14c0519037SMike Frysinger		-e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \
15c0519037SMike Frysinger		-e "s/(__user[[:space:]]\{1,\}/ (/g" \
16c0519037SMike Frysinger		-e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \
17c0519037SMike Frysinger		-e "s/(__force[[:space:]]\{1,\}/ (/g" \
18c0519037SMike Frysinger		-e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \
19c0519037SMike Frysinger		-e "s/(__iomem[[:space:]]\{1,\}/ (/g" \
20c0519037SMike Frysinger		-e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \
218d730cfbSDavid Woodhouse		-e "s/[[:space:]]__attribute_const__$$//" \
228d730cfbSDavid Woodhouse		-e "/^\#include <linux\/compiler.h>/d"
238d730cfbSDavid Woodhouse
248d730cfbSDavid Woodhouse_dst := $(if $(dst),$(dst),$(obj))
258d730cfbSDavid Woodhouse
26283039fbSSam Ravnborgkbuild-file := $(srctree)/$(obj)/Kbuild
27283039fbSSam Ravnborginclude $(kbuild-file)
28de789125SDavid Woodhouse
298d730cfbSDavid Woodhouseinclude scripts/Kbuild.include
308d730cfbSDavid Woodhouse
31283039fbSSam Ravnborg# If this is include/asm-$(ARCH) then override $(_dst) so that
32283039fbSSam Ravnborg# we install to include/asm directly.
33de789125SDavid Woodhouse# Unless $(BIASMDIR) is set, in which case we're probably doing
34de789125SDavid Woodhouse# a 'headers_install_all' build and we should keep the -$(ARCH)
35de789125SDavid Woodhouse# in the directory name.
36283039fbSSam Ravnborgifeq ($(obj),include/asm-$(ARCH)$(BIASMDIR))
378d730cfbSDavid Woodhouse     _dst := include/asm
388d730cfbSDavid Woodhouseendif
398d730cfbSDavid Woodhouse
40*62284a37SSam Ravnborginstall := $(INSTALL_HDR_PATH)/$(_dst)
41*62284a37SSam Ravnborg
424e420aa9SSam Ravnborgheader-y	:= $(sort $(header-y) $(unifdef-y))
438d730cfbSDavid Woodhousesubdir-y	:= $(patsubst %/,%,$(filter %/, $(header-y)))
448d730cfbSDavid Woodhouseheader-y	:= $(filter-out %/, $(header-y))
458d730cfbSDavid Woodhouse
46de789125SDavid Woodhouse# stamp files for header checks
474e420aa9SSam Ravnborgcheck-y		:= $(patsubst %,.check.%,$(header-y) $(objhdr-y))
48de789125SDavid Woodhouse
49de789125SDavid Woodhouse# Work out what needs to be removed
50*62284a37SSam Ravnborgoldheaders      := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h))
514e420aa9SSam Ravnborgunwanted        := $(filter-out $(header-y) $(objhdr-y),$(oldheaders))
52de789125SDavid Woodhouse
53*62284a37SSam Ravnborgoldcheckstamps  := $(patsubst $(install)/%,%,$(wildcard $(install)/.check.*.h))
54de789125SDavid Woodhouseunwanted        += $(filter-out $(check-y),$(oldcheckstamps))
55de789125SDavid Woodhouse
56de789125SDavid Woodhouse# Prefix them all with full paths to $(INSTALL_HDR_PATH)
57*62284a37SSam Ravnborgheader-y        := $(patsubst %,$(install)/%,$(header-y))
58*62284a37SSam Ravnborgobjhdr-y        := $(patsubst %,$(install)/%,$(objhdr-y))
59*62284a37SSam Ravnborgcheck-y         := $(patsubst %,$(install)/%,$(check-y))
60de789125SDavid Woodhouse
61de789125SDavid Woodhousequiet_cmd_o_hdr_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
62*62284a37SSam Ravnborg      cmd_o_hdr_install = cp $(patsubst $(install)/%,$(objtree)/$(obj)/%,$@) \
63*62284a37SSam Ravnborg                             $(install)
648d730cfbSDavid Woodhouse
65de789125SDavid Woodhousequiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
66*62284a37SSam Ravnborg      cmd_unifdef = $(UNIFDEF) $(patsubst $(install)/%,$(srctree)/$(obj)/%,$@)\
67de789125SDavid Woodhouse                               | $(HDRSED) > $@ || :
688d730cfbSDavid Woodhouse
69*62284a37SSam Ravnborgquiet_cmd_check = CHECK   $(patsubst $(install)/.check.%,$(_dst)/%,$@)
704e776b1dSAndrew Morton      cmd_check = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \
71de789125SDavid Woodhouse                  $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@
7268475359SDavid Woodhouse
73de789125SDavid Woodhousequiet_cmd_remove = REMOVE  $(_dst)/$@
74*62284a37SSam Ravnborg      cmd_remove = rm -f $(install)/$@
758d730cfbSDavid Woodhouse
76de789125SDavid Woodhousequiet_cmd_mkdir  = MKDIR   $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
77de789125SDavid Woodhouse      cmd_mkdir  = mkdir -p $@
78de789125SDavid Woodhouse
79de789125SDavid Woodhouse.PHONY: __headersinst __headerscheck
808d730cfbSDavid Woodhouse
8168475359SDavid Woodhouseifdef HDRCHECK
82de789125SDavid Woodhouse__headerscheck: $(subdir-y) $(check-y)
83de789125SDavid Woodhouse	@true
84de789125SDavid Woodhouse
85*62284a37SSam Ravnborg$(check-y) : $(install)/.check.%.h : $(install)/%.h
8668475359SDavid Woodhouse	$(call cmd,check)
87de789125SDavid Woodhouse
88de789125SDavid Woodhouse# Other dependencies for $(check-y)
89df5f6311SDavid Woodhouseinclude /dev/null $(wildcard $(check-y))
90de789125SDavid Woodhouse
91*62284a37SSam Ravnborg# but leave $(check-y) as .PHONY for now until those
92*62284a37SSam Ravnborg# deps are actually correct.
93de789125SDavid Woodhouse.PHONY: $(check-y)
94de789125SDavid Woodhouse
9568475359SDavid Woodhouseelse
968d730cfbSDavid Woodhouse# Rules for installing headers
97283039fbSSam Ravnborg__headersinst: $(subdir-y) $(header-y) $(objhdr-y)
98de789125SDavid Woodhouse	@true
998d730cfbSDavid Woodhouse
100*62284a37SSam Ravnborg$(objhdr-y) $(subdir-y) $(header-y): | $(install) $(unwanted)
1018d730cfbSDavid Woodhouse
102*62284a37SSam Ravnborg$(install):
1038d730cfbSDavid Woodhouse	$(call cmd,mkdir)
1048d730cfbSDavid Woodhouse
105*62284a37SSam Ravnborg# Rules for removing unwanted header files
106de789125SDavid Woodhouse.PHONY: $(unwanted)
107de789125SDavid Woodhouse$(unwanted):
108de789125SDavid Woodhouse	$(call cmd,remove)
109de789125SDavid Woodhouse
110*62284a37SSam Ravnborg# Install generated files
111*62284a37SSam Ravnborg$(objhdr-y): $(install)/%.h: $(objtree)/$(obj)/%.h $(kbuild-file)
1128d730cfbSDavid Woodhouse	$(call cmd,o_hdr_install)
1138d730cfbSDavid Woodhouse
114*62284a37SSam Ravnborg# Unifdef header files and install them
115*62284a37SSam Ravnborg$(header-y): $(install)/%.h: $(srctree)/$(obj)/%.h $(kbuild-file)
1168d730cfbSDavid Woodhouse	$(call cmd,unifdef)
1174e420aa9SSam Ravnborg
1188d730cfbSDavid Woodhouseendif
1198d730cfbSDavid Woodhouse
120*62284a37SSam Ravnborghdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
1218d730cfbSDavid Woodhouse
1228d730cfbSDavid Woodhouse# Recursion
123de789125SDavid Woodhouse.PHONY: $(subdir-y)
1248d730cfbSDavid Woodhouse$(subdir-y):
125*62284a37SSam Ravnborg	$(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@
126