Skip to contentSkip to conversation

linux-libc-headers: fix long path name build breakage

PATCH New Bruce Ashfield 1 participant 2 messages Jan 10, 2013

lore
Share & tools
lore
#0 lore raw

cover linux-libc-headers: fix long path name build breakage

Richard/Saul,

Here's a patch to fix the recent autobuilder failures with the updated linux-libc-headers (3.7) as the default.

I wasn't sure if we needed a PR bump, but I added one anyone. Let me know if I should respin with it removed.

I'll send this patch upstream for comments as well, but in it's current form it does get us up and running on the builders.

Until this is accepted, it will be propagated to any > 3.7 kernel headers, just in case they are used in a long path name configuration.

Cheers,

Bruce

The following changes since commit 66f4c8a674d9f8db958b13866af4d63ab8cbcd44:

guile: add explicit dependency to avoid parallel build issue (2013-01-09 15:05:26 +0000)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib zedd/kernel
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=zedd/kernel

Bruce Ashfield (1):
linux-libc-headers: fix headers install in long path name
environments

 ...efile.headersinst-install-headers-from-sc.patch |   47 ++++++++++++++++++++
 .../linux-libc-headers/linux-libc-headers_3.7.bb   |    4 ++
 2 files changed, 51 insertions(+)
 create mode 100644 meta/recipes-kernel/linux-libc-headers/linux-libc-headers/scripts-Makefile.headersinst-install-headers-from-sc.patch
Signature · 1 line
1.7.10.4
#1 lore raw

PATCH 1/1 linux-libc-headers: fix headers install in long path name environments

If a build is started in a deep directory structure, or in a path with long directory names the installation of linux-libc-headers will fail with:

| make[2]: execvp: /bin/sh: Argument list too long | make[2]: ***

From within the kernel Makefiles themselves.

The solution is to patch the kernel build rules with the following change:

[
scripts/Makefile.headersinst: install headers from scratch file

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]: ***

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 argument size and install headers in a long path name environment.
]

Until this change, or a similar one, is merged into the mainline kernel, this change should be applied to any 3.7 or greater libc-headers build.

Upstream-status: Pending

---
 ...efile.headersinst-install-headers-from-sc.patch |   47 ++++++++++++++++++++
 .../linux-libc-headers/linux-libc-headers_3.7.bb   |    4 ++
 2 files changed, 51 insertions(+)
 create mode 100644 meta/recipes-kernel/linux-libc-headers/linux-libc-headers/scripts-Makefile.headersinst-install-headers-from-sc.patch
meta/recipes-kernel/linux-libc-headers/linux-libc-headers/scripts-Makefile.headersinst-install-headers-from-sc.patch new file +47 -0
new file mode 100644
index 0000000..be1ef25
@@ -0,0 +1,47 @@
+From e60cc1b011bf0f1acdb7e5168b7bed4ebb78c91f Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <[email protected]>
+Date: Wed, 9 Jan 2013 16:24:39 -0500
+Subject: [PATCH] scripts/Makefile.headersinst: install headers from scratch file
+
+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]: ***
+
+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
+argument size and install headers in a long path name environment.
+
+Signed-off-by: Bruce Ashfield <[email protected]>
+---
+ scripts/Makefile.headersinst |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst
+index 06ba4a7..536d722 100644
+--- a/scripts/Makefile.headersinst
++++ b/scripts/Makefile.headersinst
+@@ -71,7 +71,7 @@ printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@))
+ quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\
+                             file$(if $(word 2, $(all-files)),s))
+       cmd_install = \
+-        $(PERL) $< $(installdir) $(SRCARCH) $(input-files); \
++        xargs $(PERL) $< $(installdir) $(SRCARCH) < $(INSTALL_HDR_PATH)/.input-files; \
+         for F in $(wrapper-files); do                                   \
+                 echo "\#include <asm-generic/$$F>" > $(installdir)/$$F;    \
+         done;                                                           \
+@@ -100,7 +100,9 @@ targets += $(install-file)
+ $(install-file): scripts/headers_install.pl $(input-files) FORCE
+ 	$(if $(unwanted),$(call cmd,remove),)
+ 	$(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@)))
++	@echo $(input-files) > $(INSTALL_HDR_PATH)/.input-files
+ 	$(call if_changed,install)
++	@rm $(INSTALL_HDR_PATH)/.input-files
+ 
+ else
+ __headerscheck: $(subdirs) $(check-file)
+-- 
+1.7.0.4
+
meta/recipes-kernel/linux-libc-headers/linux-libc-headers_3.7.bb +4 -0
index 3d688b7..a363289 100644
@@ -1,4 +1,8 @@
 require linux-libc-headers.inc
 
+SRC_URI += "file://scripts-Makefile.headersinst-install-headers-from-sc.patch"
+
+PR = "r1"
+
 SRC_URI[md5sum] = "5323f3faadd051e83af605a63be5ea2e"
 SRC_URI[sha256sum] = "dc08d87a579fe2918362e6666e503a95a76296419195cb499aa9dd4dbe171a9e"
Signature · 1 line
1.7.10.4