chrpath: do less work

Message ID 20191217125020.25932-1-ross.burton@intel.com
State Accepted
Commit 977f4baacf7c8d06d9cfe5c5e39bb8bc19f27028
Headers show
Series
  • chrpath: do less work
Related show

Commit Message

Ross Burton Dec. 17, 2019, 12:50 p.m.
Instead of trying to change the RPATH in every file under the binary
directories, check that the file is an ELF first.

This means that we don't attempt to change the RPATH on the entire
Python standard library, for example.

Also return early if the directory to iterate doesn't exist.

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

---
 meta/classes/chrpath.bbclass | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

-- 
2.20.1

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

Comments

Ross Burton Dec. 17, 2019, 12:51 p.m. | #1
On 17/12/2019 12:50, Ross Burton wrote:
> Instead of trying to change the RPATH in every file under the binary

> directories, check that the file is an ELF first.

> 

> This means that we don't attempt to change the RPATH on the entire

> Python standard library, for example.

> 

> Also return early if the directory to iterate doesn't exist.

> 

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


Retracting this, a chunk is missing.

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

Patch

diff --git a/meta/classes/chrpath.bbclass b/meta/classes/chrpath.bbclass
index 2870c10d515..67b197ec228 100644
--- a/meta/classes/chrpath.bbclass
+++ b/meta/classes/chrpath.bbclass
@@ -2,7 +2,13 @@  CHRPATH_BIN ?= "chrpath"
 PREPROCESS_RELOCATE_DIRS ?= ""
 
 def process_file_linux(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardlinks = False):
-    import subprocess as sub
+    import subprocess as sub, oe.qa
+
+    with oe.qa.ELFFile(fpath) as elf:
+        try:
+            elf.open()
+        except oe.qa.NotELFFileError:
+            return
 
     p = sub.Popen([cmd, '-l', fpath],stdout=sub.PIPE,stderr=sub.PIPE)
     out, err = p.communicate()
@@ -72,6 +78,10 @@  def process_file_darwin(cmd, fpath, rootdir, baseprefix, tmpdir, d, break_hardli
         out, err = p.communicate()
 
 def process_dir(rootdir, directory, d, break_hardlinks = False):
+    bb.debug(2, "Checking %s for binaries to process" % directory)
+    if not os.path.exists(directory):
+        return
+
     import stat
 
     rootdir = os.path.normpath(rootdir)
@@ -80,10 +90,6 @@  def process_dir(rootdir, directory, d, break_hardlinks = False):
     baseprefix = os.path.normpath(d.expand('${base_prefix}'))
     hostos = d.getVar("HOST_OS")
 
-    #bb.debug("Checking %s for binaries to process" % directory)
-    if not os.path.exists(directory):
-        return
-
     if "linux" in hostos:
         process_file = process_file_linux
     elif "darwin" in hostos: