Message ID | 1494911703-16619-1-git-send-email-yamada.masahiro@socionext.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Le 16/05/2017 à 07:15, Masahiro Yamada a écrit : > Since commit 61562f981e92 ("uapi: export all arch specifics > directories"), "make INSTALL_HDR_PATH=$root/usr headers_install" > deletes standard glibc headers and others in $root/usr/include. > > The cause of the issue is that headers_install now starts descending > from arch/$(hdr-arch)/include/uapi with $root/usr/include for its > destination when installing asm headers. So, headers already there > are assumed to be unwanted. > > When headers_install starts descending from include/uapi with > $root/usr/include for its destination, it works around the problem > by creating an dummy destination $root/usr/include/uapi, but this > is tricky. > > To fix the problem in a clean way is to skip headers install/check > in include/uapi or arch/$(hdr-arch)/include/uapi because we know > there are only sub-directories in uapi directories. A good side > effect is the empty destination $root/usr/include/uapi will go > away. > > I am also removing the trailing slash in the headers_check target to > skip checking in arch/$(hdr-arch)/include/uapi. > > Fixes: 61562f981e92 ("uapi: export all arch specifics directories") > Reported-by: Dan Williams <dan.j.williams@intel.com> > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Thank you for the patch. Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2017-05-16 16:40 GMT+09:00 Nicolas Dichtel <nicolas.dichtel@6wind.com>: > Le 16/05/2017 à 07:15, Masahiro Yamada a écrit : >> Since commit 61562f981e92 ("uapi: export all arch specifics >> directories"), "make INSTALL_HDR_PATH=$root/usr headers_install" >> deletes standard glibc headers and others in $root/usr/include. >> >> The cause of the issue is that headers_install now starts descending >> from arch/$(hdr-arch)/include/uapi with $root/usr/include for its >> destination when installing asm headers. So, headers already there >> are assumed to be unwanted. >> >> When headers_install starts descending from include/uapi with >> $root/usr/include for its destination, it works around the problem >> by creating an dummy destination $root/usr/include/uapi, but this >> is tricky. >> >> To fix the problem in a clean way is to skip headers install/check >> in include/uapi or arch/$(hdr-arch)/include/uapi because we know >> there are only sub-directories in uapi directories. A good side >> effect is the empty destination $root/usr/include/uapi will go >> away. >> >> I am also removing the trailing slash in the headers_check target to >> skip checking in arch/$(hdr-arch)/include/uapi. >> >> Fixes: 61562f981e92 ("uapi: export all arch specifics directories") >> Reported-by: Dan Williams <dan.j.williams@intel.com> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > Thank you for the patch. > > Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Applied to linux-kbuild/fixes.
diff --git a/Makefile b/Makefile index b400c06..b1ee4a4 100644 --- a/Makefile +++ b/Makefile @@ -1172,7 +1172,7 @@ headers_check_all: headers_install_all PHONY += headers_check headers_check: headers_install $(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1 - $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/ $(hdr-dst) HDRCHECK=1 + $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi $(hdr-dst) HDRCHECK=1 # --------------------------------------------------------------------------- # Kernel selftest diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index 6ba97a1..ce753a4 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst @@ -8,6 +8,29 @@ # # ========================================================================== +PHONY := __headers +__headers: + +include scripts/Kbuild.include + +srcdir := $(srctree)/$(obj) +subdirs := $(patsubst $(srcdir)/%/.,%,$(wildcard $(srcdir)/*/.)) +# caller may set destination dir (when installing to asm/) +_dst := $(if $(dst),$(dst),$(obj)) + +# Recursion +__headers: $(subdirs) + +.PHONY: $(subdirs) +$(subdirs): + $(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@ + +# Skip header install/check for include/uapi and arch/$(hdr-arch)/include/uapi. +# We have only sub-directories there. +skip-inst := $(if $(filter %/uapi,$(obj)),1) + +ifeq ($(skip-inst),) + # generated header directory gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) @@ -15,21 +38,14 @@ gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) kbuild-file := $(srctree)/$(obj)/Kbuild -include $(kbuild-file) -# called may set destination dir (when installing to asm/) -_dst := $(if $(dst),$(dst),$(obj)) - old-kbuild-file := $(srctree)/$(subst uapi/,,$(obj))/Kbuild ifneq ($(wildcard $(old-kbuild-file)),) include $(old-kbuild-file) endif -include scripts/Kbuild.include - installdir := $(INSTALL_HDR_PATH)/$(subst uapi/,,$(_dst)) -srcdir := $(srctree)/$(obj) gendir := $(objtree)/$(gen) -subdirs := $(patsubst $(srcdir)/%/.,%,$(wildcard $(srcdir)/*/.)) header-files := $(notdir $(wildcard $(srcdir)/*.h)) header-files += $(notdir $(wildcard $(srcdir)/*.agh)) header-files := $(filter-out $(no-export-headers), $(header-files)) @@ -88,11 +104,9 @@ quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files) $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \ touch $@ -PHONY += __headersinst __headerscheck - ifndef HDRCHECK # Rules for installing headers -__headersinst: $(subdirs) $(install-file) +__headers: $(install-file) @: targets += $(install-file) @@ -104,7 +118,7 @@ $(install-file): scripts/headers_install.sh \ $(call if_changed,install) else -__headerscheck: $(subdirs) $(check-file) +__headers: $(check-file) @: targets += $(check-file) @@ -113,11 +127,6 @@ $(check-file): scripts/headers_check.pl $(output-files) FORCE endif -# Recursion -.PHONY: $(subdirs) -$(subdirs): - $(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@ - targets := $(wildcard $(sort $(targets))) cmd_files := $(wildcard \ $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) @@ -126,6 +135,8 @@ ifneq ($(cmd_files),) include $(cmd_files) endif +endif # skip-inst + .PHONY: $(PHONY) PHONY += FORCE FORCE: ;
Since commit 61562f981e92 ("uapi: export all arch specifics directories"), "make INSTALL_HDR_PATH=$root/usr headers_install" deletes standard glibc headers and others in $root/usr/include. The cause of the issue is that headers_install now starts descending from arch/$(hdr-arch)/include/uapi with $root/usr/include for its destination when installing asm headers. So, headers already there are assumed to be unwanted. When headers_install starts descending from include/uapi with $root/usr/include for its destination, it works around the problem by creating an dummy destination $root/usr/include/uapi, but this is tricky. To fix the problem in a clean way is to skip headers install/check in include/uapi or arch/$(hdr-arch)/include/uapi because we know there are only sub-directories in uapi directories. A good side effect is the empty destination $root/usr/include/uapi will go away. I am also removing the trailing slash in the headers_check target to skip checking in arch/$(hdr-arch)/include/uapi. Fixes: 61562f981e92 ("uapi: export all arch specifics directories") Reported-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- Changes in v2: - Remove trailing slash from $(hdr-inst)=... of headers_check Makefile | 2 +- scripts/Makefile.headersinst | 43 +++++++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 17 deletions(-)