From: Chen Qi <qi.c...@windriver.com>

TMPDIR must be an absolute path, otherwise, the build will fail.
Special characters in TMPDIR will also cause build failures.

This patch enables checking for the validity of TMPDIR.

The logic in sanity.bbclass has also been changed a little bit. For now,
we only create the directory hierarch for TMPDIR if TMPDIR is valid. And
also, we only handle ABI version change only if the TMPDIR directory hierarchy
has been created.

Signed-off-by: Chen Qi <qi.c...@windriver.com>
---
 meta/classes/sanity.bbclass |   27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 83378b0..f6292f4 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -659,6 +659,16 @@ def check_sanity_everybuild(status, d):
     if oeroot.find(' ') != -1:
         status.addresult("Error, you have a space in your COREBASE directory 
path. Please move the installation to a directory which doesn't include a space 
since autotools doesn't support this.")
 
+    # Function to check if TMPDIR contains invalid characters, and check if it 
is an absolute path
+    def is_tmpdir_valid(path):
+        import re
+        valid_tmpdir_regexp = "^/[a-zA-Z0-9\-_/.~]+$"
+        valid_pattern = re.compile(valid_tmpdir_regexp)
+        if valid_pattern.match(path):
+            return True
+        else:
+            return False
+
     # Check that TMPDIR hasn't changed location since the last time we were run
     tmpdir = d.getVar('TMPDIR', True)
     checkfile = os.path.join(tmpdir, "saved_tmpdir")
@@ -667,10 +677,16 @@ def check_sanity_everybuild(status, d):
             saved_tmpdir = f.read().strip()
             if (saved_tmpdir != tmpdir):
                 status.addresult("Error, TMPDIR has changed location. You need 
to either move it back to %s or rebuild\n" % saved_tmpdir)
+            if not is_tmpdir_valid(tmpdir):
+                status.addresult("Error, you have special characters in TMPDIR 
directory path or your TMPDIR is not an absolute path. The TMPDIR should match 
this regexp: ^/[a-zA-Z0-9\-_/.~]$")
     else:
-        bb.utils.mkdirhier(tmpdir)
-        with open(checkfile, "w") as f:
-            f.write(tmpdir)
+        if not is_tmpdir_valid(tmpdir):
+            status.addresult("Error, you have special characters in TMPDIR 
directory path or your TMPDIR is not an absolute path. The TMPDIR should match 
this regexp: ^/[a-zA-Z0-9\-_/.~]$")
+        else:
+            # Make directory hierarchy for TMPDIR only if TMPDIR is valid
+            bb.utils.mkdirhier(tmpdir)
+            with open(checkfile, "w") as f:
+                f.write(tmpdir)
 
 def check_sanity(sanity_data):
     import subprocess
@@ -722,7 +738,10 @@ def check_sanity(sanity_data):
             f.write("TMPDIR %s\n" % tmpdir) 
             f.write("SSTATE_DIR %s\n" % sstate_dir) 
 
-    sanity_handle_abichanges(status, sanity_data)
+    # Handle ABI version change only if TMPDIR hierarchy has been created
+    saved_tmpdir = os.path.join(tmpdir, "saved_tmpdir")
+    if os.path.exists(saved_tmpdir):
+        sanity_handle_abichanges(status, sanity_data)
 
     if status.messages != "":
         raise_sanity_error(sanity_data.expand(status.messages), sanity_data, 
status.network_error)
-- 
1.7.9.5

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to