[2/2] classes/debian: clean up process spawning

Message ID 20180116133754.29471-2-ross.burton@intel.com
State Accepted
Commit 8f7fdab41b8d6aced6753920bb5deed147c9baa8
Headers show
Series
  • [1/2] classes/debian: fix library path handling
Related show

Commit Message

Ross Burton Jan. 16, 2018, 1:37 p.m.
This code is old and was of it's time, rewrite it to use modernish (we support
Python 3.4, so can't use subprocess.run()) subprocess and re idioms instead.

Signed-off-by: Ross Burton <ross.burton@intel.com>

---
 meta/classes/debian.bbclass | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

-- 
2.11.0

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

Patch

diff --git a/meta/classes/debian.bbclass b/meta/classes/debian.bbclass
index edc6da1ba3a..989ea8f8d28 100644
--- a/meta/classes/debian.bbclass
+++ b/meta/classes/debian.bbclass
@@ -25,7 +25,7 @@  python () {
 }
 
 python debian_package_name_hook () {
-    import glob, copy, stat, errno, re, pathlib
+    import glob, copy, stat, errno, re, pathlib, subprocess
 
     pkgdest = d.getVar("PKGDEST")
     packages = d.getVar('PACKAGES')
@@ -76,15 +76,14 @@  python debian_package_name_hook () {
             if path in libdirs:
                 has_libs = 1
                 if so_re.match(os.path.basename(f)):
-                    cmd = (d.getVar('TARGET_PREFIX') or "") + "objdump -p " + f + " 2>/dev/null"
-                    fd = os.popen(cmd)
-                    lines = fd.readlines()
-                    fd.close()
-                    for l in lines:
-                        m = re.match("\s+SONAME\s+([^\s]*)", l)
-                        if m and not m.group(1) in sonames:
-                            sonames.append(m.group(1))
-
+                    try:
+                        cmd = [d.expand("${TARGET_PREFIX}objdump"), "-p", f]
+                        output = subprocess.check_output(cmd).decode("utf-8")
+                        for m in re.finditer("\s+SONAME\s+([^\s]+)", output):
+                            if m.group(1) not in sonames:
+                                sonames.append(m.group(1))
+                    except subprocess.CalledProcessError:
+                        pass
         bb.debug(1, 'LIBNAMES: pkg %s libs %d bins %d sonames %s' % (orig_pkg, has_libs, has_bins, sonames))
         soname = None
         if len(sonames) == 1: