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

Martin Jansa martin.jansa at gmail.com
Fri Apr 20 12:03:22 UTC 2018


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
>


More information about the Openembedded-commits mailing list