]> code.ossystems Code Review - openembedded-core.git/commitdiff
chrpath: Cleanup and fix previous patch
authorRoss Burton <ross.burton@intel.com>
Fri, 13 Dec 2019 11:33:51 +0000 (11:33 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sun, 29 Dec 2019 09:26:28 +0000 (09:26 +0000)
Ensure self.data isn't accessed without assignment. Also clean up old style
popen use and replace with modern/simpler subprocess.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/chrpath.bbclass
meta/lib/oe/qa.py

index 67b197ec22895ac19da93ec3a3e7f7ec0cd467fd..26b984c4dbb252f8fa64f57e44ff08eac7b0866c 100644 (file)
@@ -2,7 +2,7 @@ CHRPATH_BIN ?= "chrpath"
 PREPROCESS_RELOCATE_DIRS ?= ""
 
 def process_file_linux(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlinks = False):
-    import subprocess as sub, oe.qa
+    import subprocess, oe.qa
 
     with oe.qa.ELFFile(fpath) as elf:
         try:
@@ -10,14 +10,11 @@ def process_file_linux(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlin
         except oe.qa.NotELFFileError:
             return
 
-    p = sub.Popen([cmd, '-l', fpath],stdout=sub.PIPE,stderr=sub.PIPE)
-    out, err = p.communicate()
-    # If returned successfully, process stdout for results
-    if p.returncode != 0:
+    try:
+        out = subprocess.check_output([cmd, "-l", fpath], universal_newlines=True)
+    except subprocess.CalledProcessError:
         return
 
-    out = out.decode('utf-8')
-
     # Handle RUNPATH as well as RPATH
     out = out.replace("RUNPATH=","RPATH=")
     # Throw away everything other than the rpath list
@@ -50,10 +47,11 @@ def process_file_linux(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlin
 
         args = ":".join(new_rpaths)
         #bb.note("Setting rpath for %s to %s" %(fpath, args))
-        p = sub.Popen([cmd, '-r', args, fpath],stdout=sub.PIPE,stderr=sub.PIPE)
-        out, err = p.communicate()
-        if p.returncode != 0:
-            bb.fatal("%s: chrpath command failed with exit code %d:\n%s%s" % (d.getVar('PN'), p.returncode, out, err))
+        try:
+            subprocess.check_output([cmd, "-r", args, fpath],
+            stderr=subprocess.PIPE, universal_newlines=True)
+        except subprocess.CalledProcessError as e:
+            bb.fatal("chrpath command failed with exit code %d:\n%s\n%s" % (e.returncode, e.stdout, e.stderr))
 
 def process_file_darwin(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlinks = False):
     import subprocess as sub
index 21066c4dc3b3cfceace83cc7858a35e123c05caf..ea831b930acc5d6a88c4b9217c2767ea1ce59195 100644 (file)
@@ -41,13 +41,15 @@ class ELFFile:
     def __init__(self, name):
         self.name = name
         self.objdump_output = {}
+        self.data = None
 
     # Context Manager functions to close the mmap explicitly
     def __enter__(self):
         return self
 
     def __exit__(self, exc_type, exc_value, traceback):
-        self.data.close()
+        if self.data:
+            self.data.close()
 
     def open(self):
         with open(self.name, "rb") as f: