chrpath: do less work

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.

(From OE-Core rev: 977f4baacf7c8d06d9cfe5c5e39bb8bc19f27028)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton
2019-12-12 13:13:55 +00:00
committed by Richard Purdie
parent 8b1eb782c3
commit 7785c41d0b

View File

@@ -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: