[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] build,include: rework shell script for headers++.chk
commit 61ac7919a6a38a24d26fd1b57a2511beb0724e99 Author: Anthony PERARD <anthony.perard@xxxxxxxxxx> AuthorDate: Thu Jun 23 09:40:12 2022 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jun 23 09:40:12 2022 +0200 build,include: rework shell script for headers++.chk The command line generated for headers++.chk by make is quite long, and in some environment it is too long. This issue have been seen in Yocto build environment. Error messages: make[9]: execvp: /bin/sh: Argument list too long make[9]: *** [include/Makefile:181: include/headers++.chk] Error 127 Rework so that we do the foreach loop in shell rather that make to reduce the command line size by a lot. We also need a way to get headers prerequisite for some public headers so we use a switch "case" in shell to be able to do some simple pattern matching. Variables alone in POSIX shell don't allow to work with associative array or variables with "/". Also rework headers99.chk as it has a similar implementation, even if with only two headers to check the command line isn't too long at the moment. Fixes: 28e13c7f43 ("build: xen/include: use if_changed") Reported-by: Bertrand Marquis <Bertrand.Marquis@xxxxxxx> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx> Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx> Tested-by: Michal Orzel <michal.orzel@xxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/include/Makefile | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/xen/include/Makefile b/xen/include/Makefile index 617599df7e..510f65c92a 100644 --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -141,13 +141,24 @@ cmd_header_chk = \ quiet_cmd_headers99_chk = CHK $@ define cmd_headers99_chk rm -f $@.new; \ - $(foreach i, $(filter %.h,$^), \ - echo "#include "\"$(i)\" \ + get_prereq() { \ + case $$1 in \ + $(foreach i, $(filter %.h,$^), \ + $(if $($(patsubst $(srctree)/%,%,$(i))-prereq), \ + $(i)$(close) \ + echo "$(foreach j, $($(patsubst $(srctree)/%,%,$(i))-prereq), \ + -include $(j).h)";;)) \ + *) ;; \ + esac; \ + }; \ + for i in $(filter %.h,$^); do \ + echo "#include "\"$$i\" \ | $(CC) -x c -std=c99 -Wall -Werror \ -include stdint.h \ - $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include $(j).h) \ + $$(get_prereq $$i) \ -S -o /dev/null - \ - || exit $$?; echo $(i) >> $@.new;) \ + || exit $$?; echo $$i >> $@.new; \ + done; \ mv $@.new $@ endef @@ -158,13 +169,23 @@ define cmd_headerscxx_chk touch $@.new; \ exit 0; \ fi; \ - $(foreach i, $(filter %.h,$^), \ - echo "#include "\"$(i)\" \ + get_prereq() { \ + case $$1 in \ + $(foreach i, $(filter %.h,$^), \ + $(if $($(patsubst $(srctree)/%,%,$(i))-prereq), \ + $(i)$(close) \ + echo "$(foreach j, $($(patsubst $(srctree)/%,%,$(i))-prereq), \ + -include c$(j))";;)) \ + *) ;; \ + esac; \ + }; \ + for i in $(filter %.h,$^); do \ + echo "#include "\"$$i\" \ | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__ \ -include stdint.h -include $(srcdir)/public/xen.h \ - $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include c$(j)) \ + $$(get_prereq $$i) \ -S -o /dev/null - \ - || exit $$?; echo $(i) >> $@.new;) \ + || exit $$?; echo $$i >> $@.new; done; \ mv $@.new $@ endef -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |