[OE-core] [oe-core][PATCH 1/1] package.bbclass: decouple splitting and stripping

Joe Slater jslater at windriver.com
Fri Mar 13 21:57:53 UTC 2015


Fix logic in split_and_strip_files() to allow splitting or
stripping independently.  We also return quickly from this
function if we have nothing to do.  We seek the following behavior:

Strip / Split     Behavior
yes   / yes       binaries stripped; debug info and source in -dbg
no    / yes       debug info and source in -dbg
yes   / no        binaries stripped; -dbg packages empty
no    / no        -dbg packages empty (not a very useful case)

Currently, no/yes does not work and is the same as no/no.

Signed-off-by: Joe Slater <jslater at windriver.com>
---
 meta/classes/package.bbclass |  108 ++++++++++++++++++++++--------------------
 1 file changed, 57 insertions(+), 51 deletions(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 9f64ed7..ad8771f 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -812,6 +812,12 @@ python fixup_perms () {
 }
 
 python split_and_strip_files () {
+
+    stripping = d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'
+    splitting = d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT', True) != '1'
+    if not (stripping or splitting):
+        return
+
     import stat, errno
 
     dvar = d.getVar('PKGD', True)
@@ -879,64 +885,64 @@ python split_and_strip_files () {
     kernmods = []
     libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir", True))
     baselibdir = os.path.abspath(dvar + os.sep + d.getVar("base_libdir", True))
-    if (d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'):
-        for root, dirs, files in cpath.walk(dvar):
-            for f in files:
-                file = os.path.join(root, f)
-                if file.endswith(".ko") and file.find("/lib/modules/") != -1:
-                    kernmods.append(file)
-                    continue
 
-                # Skip debug files
-                if debugappend and file.endswith(debugappend):
-                    continue
-                if debugdir and debugdir in os.path.dirname(file[len(dvar):]):
-                    continue
+    for root, dirs, files in cpath.walk(dvar):
+        for f in files:
+            file = os.path.join(root, f)
+            if file.endswith(".ko") and file.find("/lib/modules/") != -1:
+                kernmods.append(file)
+                continue
 
-                try:
-                    ltarget = cpath.realpath(file, dvar, False)
-                    s = cpath.lstat(ltarget)
-                except OSError as e:
-                    (err, strerror) = e.args
-                    if err != errno.ENOENT:
-                        raise
-                    # Skip broken symlinks
-                    continue
-                if not s:
+            # Skip debug files
+            if debugappend and file.endswith(debugappend):
+                continue
+            if debugdir and debugdir in os.path.dirname(file[len(dvar):]):
+                continue
+
+            try:
+                ltarget = cpath.realpath(file, dvar, False)
+                s = cpath.lstat(ltarget)
+            except OSError as e:
+                (err, strerror) = e.args
+                if err != errno.ENOENT:
+                    raise
+                # Skip broken symlinks
+                continue
+            if not s:
+                continue
+            # Check its an excutable
+            if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) or (s[stat.ST_MODE] & stat.S_IXOTH) \
+                    or ((file.startswith(libdir) or file.startswith(baselibdir)) and ".so" in f):
+                # If it's a symlink, and points to an ELF file, we capture the readlink target
+                if cpath.islink(file):
+                    target = os.readlink(file)
+                    if isELF(ltarget):
+                        #bb.note("Sym: %s (%d)" % (ltarget, isELF(ltarget)))
+                        symlinks[file] = target
                     continue
-                # Check its an excutable
-                if (s[stat.ST_MODE] & stat.S_IXUSR) or (s[stat.ST_MODE] & stat.S_IXGRP) or (s[stat.ST_MODE] & stat.S_IXOTH) \
-                        or ((file.startswith(libdir) or file.startswith(baselibdir)) and ".so" in f):
-                    # If it's a symlink, and points to an ELF file, we capture the readlink target
-                    if cpath.islink(file):
-                        target = os.readlink(file)
-                        if isELF(ltarget):
-                            #bb.note("Sym: %s (%d)" % (ltarget, isELF(ltarget)))
-                            symlinks[file] = target
+                # It's a file (or hardlink), not a link
+                # ...but is it ELF, and is it already stripped?
+                elf_file = isELF(file)
+                if elf_file & 1:
+                    if elf_file & 2:
+                        if 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn, True) or "").split():
+                            bb.note("Skipping file %s from %s for already-stripped QA test" % (file[len(dvar):], pn))
+                        else:
+                            msg = "File '%s' from %s was already stripped, this will prevent future debugging!" % (file[len(dvar):], pn)
+                            package_qa_handle_error("already-stripped", msg, d)
                         continue
-                    # It's a file (or hardlink), not a link
-                    # ...but is it ELF, and is it already stripped?
-                    elf_file = isELF(file)
-                    if elf_file & 1:
-                        if elf_file & 2:
-                            if 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn, True) or "").split():
-                                bb.note("Skipping file %s from %s for already-stripped QA test" % (file[len(dvar):], pn))
-                            else:
-                                msg = "File '%s' from %s was already stripped, this will prevent future debugging!" % (file[len(dvar):], pn)
-                                package_qa_handle_error("already-stripped", msg, d)
-                            continue
-                        # Check if it's a hard link to something else
-                        if s.st_nlink > 1:
-                            file_reference = "%d_%d" % (s.st_dev, s.st_ino)
-                            # Hard link to something else
-                            hardlinks[file] = file_reference
-                            continue
-                        elffiles[file] = elf_file
+                    # Check if it's a hard link to something else
+                    if s.st_nlink > 1:
+                        file_reference = "%d_%d" % (s.st_dev, s.st_ino)
+                        # Hard link to something else
+                        hardlinks[file] = file_reference
+                        continue
+                    elffiles[file] = elf_file
 
     #
     # First lets process debug splitting
     #
-    if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT', True) != '1'):
+    if splitting:
         hardlinkmap = {}
         # For hardlinks, process only one of the files
         for file in hardlinks:
@@ -1008,7 +1014,7 @@ python split_and_strip_files () {
     #
     # Now lets go back over things and strip them
     #
-    if (d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'):
+    if stripping:
         strip = d.getVar("STRIP", True)
         sfiles = []
         for file in elffiles:
-- 
1.7.9.5




More information about the Openembedded-core mailing list