From 7785c41d0b95d084bec716166393d2a3323692dd Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Thu, 12 Dec 2019 13:13:55 +0000 Subject: 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 Signed-off-by: Richard Purdie --- meta/classes/chrpath.bbclass | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/meta/classes/chrpath.bbclass b/meta/classes/chrpath.bbclass index 2870c10d51..67b197ec22 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: -- cgit v1.2.3-54-g00ecf