[1/1] sanity.bbclass: the tmpdir can't be longer than 410

Submitted by Robert Yang on July 5, 2012, 8:57 a.m. | Patch ID: 31213


Message ID f60e1ac7831879919453664410fb6ad7b2cefdc7.1341462183.git.liezhi.yang@windriver.com
State Accepted
Commit ebcf949853ff667478a1ea1d3f1f8f41d643e708
Headers show

Commit Message

Robert Yang July 5, 2012, 8:57 a.m.
There will be errors when the length of the tmpdir is longer than 410:

1) Longer than 420:
Can't exec "/bin/sh": Argument list too long at /usr/lib/perl/5.10/IO/File.pm line 66.

This error happens on both Ubuntu 10.04 and 10.10 when the pkg needs run
"autoreconf", this is because it passes many files with absolute path to
aclocal, aclocal passes them to perl, this is a limitation of the perl
on Ubuntu 10.04 and 10.10, and the perl-native is not ready at this very
early stage.

2) Longer than 490:
bitbake/lib/bb/persist_data.py", line 197, in connect(database=...)
    >    return sqlite3.connect(database, timeout=5, isolation_level=None)
OperationalError: unable to open database file

This error happens on Ubuntu 10.04, 10.10 and Fedora 17. This is because
the length of the database in sqlite3 module (host's) can't be longer
than 490 (or little smaller). The python-native is not ready at this
very early stage.

The 2 errors are host related, I think that limit the length of the
TMPDIR to 410 is OK for most of the build, rarely build sets TMPDIR's
longer than 410.

[YOCTO #2434]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
 meta/classes/sanity.bbclass |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

Patch hide | download patch | download mbox

diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 6ed1e6f..765958e 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -171,6 +171,11 @@  def check_create_long_filename(filepath, pathname):
         return "Failed to create %s directory in which to run long name sanity check: %s.\n" % (pathname, strerror)
     return ""
+def check_path_length(filepath, pathname, limit):
+    if len(filepath) > limit:
+	return "The length of %s is longer than 410, this would cause unexpected errors, please use a shorter path.\n" % pathname
+    return ""
 def check_connectivity(d):
     # URI's to check can be set in the CONNECTIVITY_CHECK_URIS variable
     # using the same syntax as for SRC_URI. If the variable is not set
@@ -453,6 +458,9 @@  def check_sanity(sanity_data):
     tmpdir = sanity_data.getVar('TMPDIR', True)
     sstate_dir = sanity_data.getVar('SSTATE_DIR', True)
+    # The length of tmpdir can't be longer than 410
+    messages = messages + check_path_length(tmpdir, "TMPDIR", 410)
     # Check saved sanity info
     last_sanity_version = 0
     last_tmpdir = ""