diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-07-20 08:45:28 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-07-24 11:52:27 +0100 |
commit | 069a1c4a1520914234dc58b506663fcfd80433e3 (patch) | |
tree | 2262a99b4945322847699389c08f2a923e650948 /meta/classes/package.bbclass | |
parent | e0ea2c73781800fa2e1c7d9d2fd540eca2f9f3e3 (diff) | |
download | poky-069a1c4a1520914234dc58b506663fcfd80433e3.tar.gz |
package: Refactor to remove isElf/is_elf function duplication
There are probably further cleanups needed here but this at least removes
the major code duplication between these two similar funcitons, keeping the
kernel module ".ko" extension check for efficiency to avoid opening and
reading file contents in the general case.
(From OE-Core rev: 7ad0c0d6ab12bebeac097fc0f5210c876dcfe9be)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/package.bbclass')
-rw-r--r-- | meta/classes/package.bbclass | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 94e4639a11..f121acccab 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -936,38 +936,6 @@ python split_and_strip_files () { | |||
936 | sourcefile = d.expand("${WORKDIR}/debugsources.list") | 936 | sourcefile = d.expand("${WORKDIR}/debugsources.list") |
937 | bb.utils.remove(sourcefile) | 937 | bb.utils.remove(sourcefile) |
938 | 938 | ||
939 | # Return type (bits): | ||
940 | # 0 - not elf | ||
941 | # 1 - ELF | ||
942 | # 2 - stripped | ||
943 | # 4 - executable | ||
944 | # 8 - shared library | ||
945 | # 16 - kernel module | ||
946 | def isELF(path): | ||
947 | type = 0 | ||
948 | result = subprocess.check_output(["file", "-b", path], stderr=subprocess.STDOUT).decode("utf-8") | ||
949 | |||
950 | # Not stripped | ||
951 | if "ELF" in result: | ||
952 | type |= 1 | ||
953 | if "not stripped" not in result: | ||
954 | type |= 2 | ||
955 | if "executable" in result: | ||
956 | type |= 4 | ||
957 | if "shared" in result: | ||
958 | type |= 8 | ||
959 | return type | ||
960 | |||
961 | def isStaticLib(path): | ||
962 | if path.endswith('.a') and not os.path.islink(path): | ||
963 | with open(path, 'rb') as fh: | ||
964 | # The magic must include the first slash to avoid | ||
965 | # matching golang static libraries | ||
966 | magic = b'!<arch>\x0a/' | ||
967 | start = fh.read(len(magic)) | ||
968 | return start == magic | ||
969 | return False | ||
970 | |||
971 | # | 939 | # |
972 | # First lets figure out all of the files we may have to process ... do this only once! | 940 | # First lets figure out all of the files we may have to process ... do this only once! |
973 | # | 941 | # |
@@ -987,7 +955,7 @@ python split_and_strip_files () { | |||
987 | if file.endswith(".ko") and file.find("/lib/modules/") != -1: | 955 | if file.endswith(".ko") and file.find("/lib/modules/") != -1: |
988 | kernmods.append(file) | 956 | kernmods.append(file) |
989 | continue | 957 | continue |
990 | if isStaticLib(file): | 958 | if oe.package.is_static_lib(file): |
991 | staticlibs.append(file) | 959 | staticlibs.append(file) |
992 | continue | 960 | continue |
993 | 961 | ||
@@ -1017,14 +985,14 @@ python split_and_strip_files () { | |||
1017 | # If it's a symlink, and points to an ELF file, we capture the readlink target | 985 | # If it's a symlink, and points to an ELF file, we capture the readlink target |
1018 | if cpath.islink(file): | 986 | if cpath.islink(file): |
1019 | target = os.readlink(file) | 987 | target = os.readlink(file) |
1020 | if isELF(ltarget): | 988 | if oe.package.is_elf(ltarget): |
1021 | #bb.note("Sym: %s (%d)" % (ltarget, isELF(ltarget))) | 989 | #bb.note("Sym: %s (%d)" % (ltarget, oe.package.is_elf(ltarget))) |
1022 | symlinks[file] = target | 990 | symlinks[file] = target |
1023 | continue | 991 | continue |
1024 | 992 | ||
1025 | # It's a file (or hardlink), not a link | 993 | # It's a file (or hardlink), not a link |
1026 | # ...but is it ELF, and is it already stripped? | 994 | # ...but is it ELF, and is it already stripped? |
1027 | elf_file = isELF(file) | 995 | elf_file = oe.package.is_elf(file) |
1028 | if elf_file & 1: | 996 | if elf_file & 1: |
1029 | if elf_file & 2: | 997 | if elf_file & 2: |
1030 | if 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn) or "").split(): | 998 | if 'already-stripped' in (d.getVar('INSANE_SKIP_' + pn) or "").split(): |