Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0ff68f1 authored by Nicolas Dichtel's avatar Nicolas Dichtel Committed by Michal Marek
Browse files

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: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Tested-by: default avatarBruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent f722406f
Loading
Loading
Loading
Loading
+14 −6
Original line number Original line Diff line number Diff line
@@ -47,18 +47,24 @@ header-y := $(filter-out $(generic-y), $(header-y))
all-files     := $(header-y) $(genhdr-y) $(wrapper-files)
all-files     := $(header-y) $(genhdr-y) $(wrapper-files)
output-files  := $(addprefix $(installdir)/, $(all-files))
output-files  := $(addprefix $(installdir)/, $(all-files))


input-files   := $(foreach hdr, $(header-y), \
input-files1  := $(foreach hdr, $(header-y), \
		   $(if $(wildcard $(srcdir)/$(hdr)), \
		   $(if $(wildcard $(srcdir)/$(hdr)), \
			$(wildcard $(srcdir)/$(hdr)), \
			$(wildcard $(srcdir)/$(hdr))) \
		   )
input-files1-name := $(notdir $(input-files1))
input-files2  := $(foreach hdr, $(header-y), \
		   $(if  $(wildcard $(srcdir)/$(hdr)),, \
			$(if $(wildcard $(oldsrcdir)/$(hdr)), \
			$(if $(wildcard $(oldsrcdir)/$(hdr)), \
				$(wildcard $(oldsrcdir)/$(hdr)), \
				$(wildcard $(oldsrcdir)/$(hdr)), \
				$(error Missing UAPI file $(srcdir)/$(hdr))) \
				$(error Missing UAPI file $(srcdir)/$(hdr))) \
		   )) \
		   ))
		 $(foreach hdr, $(genhdr-y), \
input-files2-name := $(notdir $(input-files2))
input-files3  := $(foreach hdr, $(genhdr-y), \
		   $(if	$(wildcard $(gendir)/$(hdr)), \
		   $(if	$(wildcard $(gendir)/$(hdr)), \
			$(wildcard $(gendir)/$(hdr)), \
			$(wildcard $(gendir)/$(hdr)), \
			$(error Missing generated UAPI file $(gendir)/$(hdr)) \
			$(error Missing generated UAPI file $(gendir)/$(hdr)) \
		   ))
		   ))
input-files3-name := $(notdir $(input-files3))


# Work out what needs to be removed
# Work out what needs to be removed
oldheaders    := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
oldheaders    := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
@@ -72,7 +78,9 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
                            file$(if $(word 2, $(all-files)),s))
                            file$(if $(word 2, $(all-files)),s))
      cmd_install = \
      cmd_install = \
        $(CONFIG_SHELL) $< $(installdir) $(input-files); \
        $(CONFIG_SHELL) $< $(installdir) $(srcdir) $(input-files1-name); \
        $(CONFIG_SHELL) $< $(installdir) $(oldsrcdir) $(input-files2-name); \
        $(CONFIG_SHELL) $< $(installdir) $(gendir) $(input-files3-name); \
        for F in $(wrapper-files); do                                   \
        for F in $(wrapper-files); do                                   \
                echo "\#include <asm-generic/$$F>" > $(installdir)/$$F;    \
                echo "\#include <asm-generic/$$F>" > $(installdir)/$$F;    \
        done;                                                           \
        done;                                                           \
@@ -98,7 +106,7 @@ __headersinst: $(subdirs) $(install-file)
	@:
	@:


targets += $(install-file)
targets += $(install-file)
$(install-file): scripts/headers_install.sh $(input-files) FORCE
$(install-file): scripts/headers_install.sh $(input-files1) $(input-files2) $(input-files3) FORCE
	$(if $(unwanted),$(call cmd,remove),)
	$(if $(unwanted),$(call cmd,remove),)
	$(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
	$(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
	$(call if_changed,install)
	$(call if_changed,install)
+5 −2
Original line number Original line Diff line number Diff line
@@ -2,7 +2,7 @@


if [ $# -lt 1 ]
if [ $# -lt 1 ]
then
then
	echo "Usage: headers_install.sh OUTDIR [FILES...]
	echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...]
	echo
	echo
	echo "Prepares kernel header files for use by user space, by removing"
	echo "Prepares kernel header files for use by user space, by removing"
	echo "all compiler.h definitions and #includes, removing any"
	echo "all compiler.h definitions and #includes, removing any"
@@ -10,6 +10,7 @@ then
	echo "asm/inline/volatile keywords."
	echo "asm/inline/volatile keywords."
	echo
	echo
	echo "OUTDIR: directory to write each userspace header FILE to."
	echo "OUTDIR: directory to write each userspace header FILE to."
	echo "SRCDIR: source directory where files are picked."
	echo "FILES:  list of header files to operate on."
	echo "FILES:  list of header files to operate on."


	exit 1
	exit 1
@@ -19,6 +20,8 @@ fi


OUTDIR="$1"
OUTDIR="$1"
shift
shift
SRCDIR="$1"
shift


# Iterate through files listed on command line
# Iterate through files listed on command line


@@ -34,7 +37,7 @@ do
		-e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
		-e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
		-e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
		-e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
		-e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
		-e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
		"$i" > "$OUTDIR/$FILE.sed" || exit 1
		"$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1
	scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
	scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
		> "$OUTDIR/$FILE"
		> "$OUTDIR/$FILE"
	[ $? -gt 1 ] && exit 1
	[ $? -gt 1 ] && exit 1