Commit c0ff68f1611d6855a06d672989ad5cfea160a4eb
Committed by
Michal Marek
1 parent
f722406faa
Exists in
master
and in
20 other branches
kbuild: fix make headers_install when path is too long
If headers_install is executed from a deep/long directory structure, the shell's maximum argument length can be execeeded, which breaks the operation with: | make[2]: execvp: /bin/sh: Argument list too long | make[2]: *** Instead of passing each files name with the entire path, I give only the file name without the source path and give this path as a new argument to headers_install.pl. Because there is three possible paths, I have tree input-files list, one per path. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Tested-by: Bruce Ashfield <bruce.ashfield@windriver.com> Signed-off-by: Michal Marek <mmarek@suse.cz>
Showing 2 changed files with 19 additions and 8 deletions Side-by-side Diff
scripts/Makefile.headersinst
... | ... | @@ -47,18 +47,24 @@ |
47 | 47 | all-files := $(header-y) $(genhdr-y) $(wrapper-files) |
48 | 48 | output-files := $(addprefix $(installdir)/, $(all-files)) |
49 | 49 | |
50 | -input-files := $(foreach hdr, $(header-y), \ | |
50 | +input-files1 := $(foreach hdr, $(header-y), \ | |
51 | 51 | $(if $(wildcard $(srcdir)/$(hdr)), \ |
52 | - $(wildcard $(srcdir)/$(hdr)), \ | |
52 | + $(wildcard $(srcdir)/$(hdr))) \ | |
53 | + ) | |
54 | +input-files1-name := $(notdir $(input-files1)) | |
55 | +input-files2 := $(foreach hdr, $(header-y), \ | |
56 | + $(if $(wildcard $(srcdir)/$(hdr)),, \ | |
53 | 57 | $(if $(wildcard $(oldsrcdir)/$(hdr)), \ |
54 | 58 | $(wildcard $(oldsrcdir)/$(hdr)), \ |
55 | 59 | $(error Missing UAPI file $(srcdir)/$(hdr))) \ |
56 | - )) \ | |
57 | - $(foreach hdr, $(genhdr-y), \ | |
60 | + )) | |
61 | +input-files2-name := $(notdir $(input-files2)) | |
62 | +input-files3 := $(foreach hdr, $(genhdr-y), \ | |
58 | 63 | $(if $(wildcard $(gendir)/$(hdr)), \ |
59 | 64 | $(wildcard $(gendir)/$(hdr)), \ |
60 | 65 | $(error Missing generated UAPI file $(gendir)/$(hdr)) \ |
61 | 66 | )) |
67 | +input-files3-name := $(notdir $(input-files3)) | |
62 | 68 | |
63 | 69 | # Work out what needs to be removed |
64 | 70 | oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) |
... | ... | @@ -72,7 +78,9 @@ |
72 | 78 | quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ |
73 | 79 | file$(if $(word 2, $(all-files)),s)) |
74 | 80 | cmd_install = \ |
75 | - $(CONFIG_SHELL) $< $(installdir) $(input-files); \ | |
81 | + $(CONFIG_SHELL) $< $(installdir) $(srcdir) $(input-files1-name); \ | |
82 | + $(CONFIG_SHELL) $< $(installdir) $(oldsrcdir) $(input-files2-name); \ | |
83 | + $(CONFIG_SHELL) $< $(installdir) $(gendir) $(input-files3-name); \ | |
76 | 84 | for F in $(wrapper-files); do \ |
77 | 85 | echo "\#include <asm-generic/$$F>" > $(installdir)/$$F; \ |
78 | 86 | done; \ |
... | ... | @@ -98,7 +106,7 @@ |
98 | 106 | @: |
99 | 107 | |
100 | 108 | targets += $(install-file) |
101 | -$(install-file): scripts/headers_install.sh $(input-files) FORCE | |
109 | +$(install-file): scripts/headers_install.sh $(input-files1) $(input-files2) $(input-files3) FORCE | |
102 | 110 | $(if $(unwanted),$(call cmd,remove),) |
103 | 111 | $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) |
104 | 112 | $(call if_changed,install) |
scripts/headers_install.sh
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | |
3 | 3 | if [ $# -lt 1 ] |
4 | 4 | then |
5 | - echo "Usage: headers_install.sh OUTDIR [FILES...] | |
5 | + echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...] | |
6 | 6 | echo |
7 | 7 | echo "Prepares kernel header files for use by user space, by removing" |
8 | 8 | echo "all compiler.h definitions and #includes, removing any" |
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | echo "asm/inline/volatile keywords." |
11 | 11 | echo |
12 | 12 | echo "OUTDIR: directory to write each userspace header FILE to." |
13 | + echo "SRCDIR: source directory where files are picked." | |
13 | 14 | echo "FILES: list of header files to operate on." |
14 | 15 | |
15 | 16 | exit 1 |
... | ... | @@ -19,6 +20,8 @@ |
19 | 20 | |
20 | 21 | OUTDIR="$1" |
21 | 22 | shift |
23 | +SRCDIR="$1" | |
24 | +shift | |
22 | 25 | |
23 | 26 | # Iterate through files listed on command line |
24 | 27 | |
... | ... | @@ -34,7 +37,7 @@ |
34 | 37 | -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ |
35 | 38 | -e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \ |
36 | 39 | -e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \ |
37 | - "$i" > "$OUTDIR/$FILE.sed" || exit 1 | |
40 | + "$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1 | |
38 | 41 | scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \ |
39 | 42 | > "$OUTDIR/$FILE" |
40 | 43 | [ $? -gt 1 ] && exit 1 |