[oe] [oe-commits] [openembedded-core] 05/06: package.bbclass: Include dbgsrc for static libs

Burton, Ross ross.burton at intel.com
Fri Apr 20 14:09:32 UTC 2018


FWIW, libsdl2 builds fine for me with current sumo branch.

Ross

On 20 April 2018 at 13:03, Martin Jansa <martin.jansa at gmail.com> wrote:
> I haven't dig around this much, but some of my builds are now failing with:
>
> ERROR: libsdl2-webos-2.0.4-86-r22 do_package: dwarfsrcfiles failed with
> exit code 1 (cmd was 'dwarfsrcfiles' 'libsdl2-webos/2.0.4-86-r22/
> package/usr/lib/libSDL2main.a'):
> dwarfsrcfiles: libsdl2-webos/2.0.4-86-r22/package/usr/lib/libSDL2main.a:
> not a valid ELF file
> ERROR: libsdl2-webos-2.0.4-86-r22 do_package: Function failed:
> split_and_strip_files
>
> It's different version of libsdl2 than what's in oe-core now and the recipe
> for it might be a bit broken.
>
> $ file package/usr/lib/libSDL2main.a
> package/usr/lib/libSDL2main.a: current ar archive
>
> $ recipe-sysroot-native/usr/bin/dwarfsrcfiles package/usr/lib/libSDL2main.a
> dwarfsrcfiles: package/usr/lib/libSDL2main.a: not a valid ELF file
>
> $ ar x ../package/usr/lib/libSDL2main.a
>
> contains only:
> SDL_dummy_main.lo
>
> Should we try a bit harder to check if the .a contains static library? In
> the meantime I'll check what's going on in libsdl2-webos build and if the
> same happens in oe-core libsdl2.
>
> Regards,
>
> On Thu, Apr 19, 2018 at 3:45 PM, <git at git.openembedded.org> wrote:
>
>> This is an automated email from the git hooks/post-receive script.
>>
>> rpurdie pushed a commit to branch master
>> in repository openembedded-core.
>>
>> commit eefa5ba35663fabe1f3f8cf7f1ff126d51240613
>> Author: Ola x Nilsson <ola.x.nilsson at axis.com>
>> AuthorDate: Thu Apr 19 13:17:30 2018 +0200
>>
>>     package.bbclass: Include dbgsrc for static libs
>>
>>     The debugsource must be added from the package providing the static
>>     lib, because any package using that lib does not have access to the
>>     source code.
>>
>>     Fixes [YOCTO #12558]
>>
>>     Signed-off-by: Ola x Nilsson <olani at axis.com>
>>     Signed-off-by: Ross Burton <ross.burton at intel.com>
>> ---
>>  meta/classes/package.bbclass | 44 ++++++++++++++++++++++++++++++
>> ++------------
>>  1 file changed, 32 insertions(+), 12 deletions(-)
>>
>> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
>> index 7978307..fff7ceb 100644
>> --- a/meta/classes/package.bbclass
>> +++ b/meta/classes/package.bbclass
>> @@ -344,6 +344,20 @@ def parse_debugsources_from_dwarfs
>> rcfiles_output(dwarfsrcfiles_output):
>>
>>      return debugfiles.keys()
>>
>> +def append_source_info(file, sourcefile, d):
>> +    cmd = "'dwarfsrcfiles' '%s'" % (file)
>> +    (retval, output) = oe.utils.getstatusoutput(cmd)
>> +    # 255 means a specific file wasn't fully parsed to get the debug file
>> list, which is not a fatal failure
>> +    if retval != 0 and retval != 255:
>> +        bb.fatal("dwarfsrcfiles failed with exit code %s (cmd was %s)%s"
>> % (retval, cmd, ":\n%s" % output if output else ""))
>> +
>> +    debugsources = parse_debugsources_from_dwarfsrcfiles_output(output)
>> +    # filenames are null-separated - this is an artefact of the previous
>> use
>> +    # of rpm's debugedit, which was writing them out that way, and the
>> code elsewhere
>> +    # is still assuming that.
>> +    debuglistoutput = '\0'.join(debugsources) + '\0'
>> +    open(sourcefile, 'a').write(debuglistoutput)
>> +
>>
>>  def splitdebuginfo(file, debugfile, debugsrcdir, sourcefile, d):
>>      # Function to split a single file into two components, one is the
>> stripped
>> @@ -369,18 +383,7 @@ def splitdebuginfo(file, debugfile, debugsrcdir,
>> sourcefile, d):
>>
>>      # We need to extract the debug src information here...
>>      if debugsrcdir:
>> -        cmd = "'dwarfsrcfiles' '%s'" % (file)
>> -        (retval, output) = oe.utils.getstatusoutput(cmd)
>> -        # 255 means a specific file wasn't fully parsed to get the debug
>> file list, which is not a fatal failure
>> -        if retval != 0 and retval != 255:
>> -            bb.fatal("dwarfsrcfiles failed with exit code %s (cmd was
>> %s)%s" % (retval, cmd, ":\n%s" % output if output else ""))
>> -
>> -        debugsources = parse_debugsources_from_dwarfs
>> rcfiles_output(output)
>> -        # filenames are null-separated - this is an artefact of the
>> previous use
>> -        # of rpm's debugedit, which was writing them out that way, and
>> the code elsewhere
>> -        # is still assuming that.
>> -        debuglistoutput = '\0'.join(debugsources) + '\0'
>> -        open(sourcefile, 'a').write(debuglistoutput)
>> +        append_source_info(file, sourcefile, d)
>>
>>      bb.utils.mkdirhier(os.path.dirname(debugfile))
>>
>> @@ -936,6 +939,15 @@ python split_and_strip_files () {
>>                  type |= 8
>>          return type
>>
>> +    def isStaticLib(path):
>> +        if path.endswith('.a') and not os.path.islink(path):
>> +            with open(path, 'rb') as fh:
>> +                # The magic must include the first slash to avoid
>> +                # matching golang static libraries
>> +                magic = b'!<arch>\x0a/'
>> +                start = fh.read(len(magic))
>> +                return start == magic
>> +        return False
>>
>>      #
>>      # First lets figure out all of the files we may have to process ...
>> do this only once!
>> @@ -943,6 +955,7 @@ python split_and_strip_files () {
>>      elffiles = {}
>>      symlinks = {}
>>      kernmods = []
>> +    staticlibs = []
>>      inodes = {}
>>      libdir = os.path.abspath(dvar + os.sep + d.getVar("libdir"))
>>      baselibdir = os.path.abspath(dvar + os.sep + d.getVar("base_libdir"))
>> @@ -955,6 +968,9 @@ python split_and_strip_files () {
>>                  if file.endswith(".ko") and file.find("/lib/modules/") !=
>> -1:
>>                      kernmods.append(file)
>>                      continue
>> +                if isStaticLib(file):
>> +                    staticlibs.append(file)
>> +                    continue
>>
>>                  # Skip debug files
>>                  if debugappend and file.endswith(debugappend):
>> @@ -1033,6 +1049,10 @@ python split_and_strip_files () {
>>              # Only store off the hard link reference if we successfully
>> split!
>>              splitdebuginfo(file, fpath, debugsrcdir, sourcefile, d)
>>
>> +        if debugsrcdir:
>> +            for file in staticlibs:
>> +                append_source_info(file, sourcefile, d)
>> +
>>          # Hardlink our debug symbols to the other hardlink copies
>>          for ref in inodes:
>>              if len(inodes[ref]) == 1:
>>
>> --
>> To stop receiving notification emails like this one, please contact
>> the administrator of this repository.
>> --
>> _______________________________________________
>> Openembedded-commits mailing list
>> Openembedded-commits at lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-commits
>>
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel



More information about the Openembedded-devel mailing list