linux-libc-headers: do_install: fix "Argument list too long" error

There would be an "Argument list too long" error when the TMPDIR is in a
deep dir, for example, when "len(readlink -f TMPDIR) >= 350 (our
supported value is 410)". Use "$(foreach ,,$(shell echo))" to fix it.

There was already a patch which tried to fix this issue, so squash the
current change into the previous one as Bruce suggested.

[YOCTO #5138]

(From OE-Core rev: 4e10c45d7c61ac1ccf8b53ef525ca03d3d458bba)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Robert Yang 2013-09-14 02:48:06 +00:00 committed by Richard Purdie
parent 8dd7ab3a78
commit 7303b67d33
1 changed files with 26 additions and 13 deletions

View File

@ -1,6 +1,6 @@
From e60cc1b011bf0f1acdb7e5168b7bed4ebb78c91f Mon Sep 17 00:00:00 2001 From b200d4bcffc86bb08fd3898bc7cde00f0686f62d Mon Sep 17 00:00:00 2001
From: Bruce Ashfield <bruce.ashfield@windriver.com> From: Robert Yang <liezhi.yang@windriver.com>
Date: Wed, 9 Jan 2013 16:24:39 -0500 Date: Fri, 13 Sep 2013 22:01:02 -0400
Subject: [PATCH] scripts/Makefile.headersinst: install headers from scratch file Subject: [PATCH] scripts/Makefile.headersinst: install headers from scratch file
If headers_install is executed from a deep/long directory structure, the If headers_install is executed from a deep/long directory structure, the
@ -14,18 +14,23 @@ By dumping the input files to a scratch file and using xargs to read the
input list from the scratch file, we can avoid blowing out the maximum input list from the scratch file, we can avoid blowing out the maximum
argument size and install headers in a long path name environment. argument size and install headers in a long path name environment.
Robert:
Use "$(foreach ,,$(shell echo))" rather than "echo" to make it work when
len(TMPDIR) <= 410.
Upstream-Status: Inappropriate [oe-specific]
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
--- ---
RP: Refreshed for 3.10 as the problem still exists there on the autobuilders RP: Refreshed for 3.10 as the problem still exists there on the autobuilders
scripts/Makefile.headersinst | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
scripts/Makefile.headersinst | 4 +++- diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
1 files changed, 3 insertions(+), 1 deletions(-) --- a/scripts/Makefile.headersinst
+++ b/scripts/Makefile.headersinst
Index: linux-3.10/scripts/Makefile.headersinst @@ -72,7 +72,7 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
===================================================================
--- linux-3.10.orig/scripts/Makefile.headersinst
+++ linux-3.10/scripts/Makefile.headersinst
@@ -72,7 +72,7 @@ printdir = $(patsubst $(INSTALL_HDR_PATH
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 = \
@ -34,11 +39,19 @@ Index: linux-3.10/scripts/Makefile.headersinst
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; \
@@ -101,7 +101,9 @@ targets += $(install-file) @@ -98,10 +98,17 @@ __headersinst: $(subdirs) $(install-file)
@:
targets += $(install-file)
+# Use the $(foreach ,,$(shell echo)) to avoid the "Argument list too
+# long" error, and use the "$(shell echo)" rather than "echo" to keep
+# the order.
$(install-file): scripts/headers_install.sh $(input-files) FORCE $(install-file): scripts/headers_install.sh $(input-files) 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 $@)))
+ @echo $(input-files) > $(INSTALL_HDR_PATH)/.input-files + $(shell echo -n > $(INSTALL_HDR_PATH)/.input-files)
+ $(foreach f,$(input-files),$(shell echo -n "$(f) " >> \
+ $(INSTALL_HDR_PATH)/.input-files))
$(call if_changed,install) $(call if_changed,install)
+ @rm $(INSTALL_HDR_PATH)/.input-files + @rm $(INSTALL_HDR_PATH)/.input-files