All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saul Wold <sgw@linux.intel.com>
To: Andreas Oberritter <obi@opendreambox.org>
Subject: Re: [PATCH v2][RFC] chrpath.bbclass: strip common parent directories from rpath
Date: Mon, 01 Jul 2013 16:31:49 -0700	[thread overview]
Message-ID: <51D21165.90305@linux.intel.com> (raw)

On 03/05/2013 04:32 PM, Andreas Oberritter wrote:
>
> Allows to use shorter TMPDIRs in corner cases, e.g. with native
> perl modules, having a deep directory structure.
>
> The problem is that the original absolute rpath may be shorter
> than the newly generated relative rpath.
>
> The failing rpaths were '/ab/cde/tmp/sysroots/x86_64-linux/usr/lib'
> (old) and '$ORIGIN/../../../../../../../../../usr/lib' (new) for
> '/ab/cde/tmp/sysroots/x86_64-linux/usr/lib/perl-native/perl/5.14.3/auto/XML/Parser/Expat/Expat.so'
>
> The new rpath is '$ORIGIN/../../../../../../..'.
>
> The new code doesn't just compare libdir, because I guess it
> should also work if only parts of libdir share a parent directory
> with the binary.
>
> This patch also adds a check for len(basedir) > 0, because I think
> basedir is empty in the cross-compile case, in which case
> rpath.find(basedir) would always return 0, but I'm unsure whether
> I understood that part of the code correctly or not.
>

This seems to introduce a problem in slipt_and_strip_files

> ERROR: debugedit failed with exit code 127 (cmd was '/srv/ssd/sgw/builds/sec_flags/build/tmp/sysroots/x86_64-linux/usr/lib/rpm/bin/debugedit' -b '/srv/ssd/sgw/builds/sec_flags/build/tmp/work/i586-poky-linux' -d '/usr/src/debug' -i -l '/srv/ssd/sgw/builds/sec_flags/build/tmp/work/i586-poky-linux/eglibc/2.17-r3/debugsources.list' '/srv/ssd/sgw/builds/sec_flags/build/tmp/work/i586-poky-linux/eglibc/2.17-r3/package/usr/bin/locale')
> ERROR: Function failed: split_and_strip_files
> ERROR: Logfile of failure stored in: /srv/ssd/sgw/builds/sec_flags/build/tmp/work/i586-poky-linux/eglibc/2.17-r3/temp/log.do_package.26019
> ERROR: Task 27 (/srv/ssd/sgw/builds/sec_flags/meta/recipes-core/eglibc/eglibc_2.17.bb, do_package) failed with exit code '1'


That was seen with a clean build, no sstate.

Sau!


> [YOCTO #3989]
>
> Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
> ---
> v2: Fixed reassembly of libpath
>
>   meta/classes/chrpath.bbclass |   17 +++++++++++++++--
>   1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/meta/classes/chrpath.bbclass b/meta/classes/chrpath.bbclass
> index 0c7ab77..454b587 100644
> --- a/meta/classes/chrpath.bbclass
> +++ b/meta/classes/chrpath.bbclass
> @@ -55,9 +55,22 @@ def process_dir (directory, d):
>                   rpath =  os.path.normpath(rpath)
>                   # If the rpath shares a root with base_prefix determine a new dynamic rpath from the
>                   # base_prefix shared root
> -                if rpath.find(basedir) != -1:
> -                    depth = fpath.partition(basedir)[2].count('/')
> +                if len(basedir) > 0 and rpath.find(basedir) != -1:
> +                    relfpath = fpath.partition(basedir)[2].strip()
>                       libpath = rpath.partition(basedir)[2].strip()
> +                    depth = relfpath.count('/')
> +                    # Compare common parent directories to reduce the length of the new rpath.
> +                    # Ignore the first (empty) element.
> +                    libdirs = libpath.split('/')
> +                    relfdirs = relfpath.split('/')
> +                    nparents = 0
> +                    for i in range(1, min(len(libdirs), len(relfdirs))):
> +                        if libdirs[i] != relfdirs[i]:
> +                            break
> +                        nparents += 1
> +                    if nparents > 0:
> +                        libpath = '/' + '/'.join(libdirs[i:])
> +                        depth -= nparents
>                   # otherwise (i.e. cross packages) determine a shared root based on the TMPDIR
>                   # NOTE: This will not work reliably for cross packages, particularly in the case
>                   # where your TMPDIR is a short path (i.e. /usr/poky) as chrpath cannot insert an
>


             reply	other threads:[~2013-07-01 23:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-01 23:31 Saul Wold [this message]
  -- strict thread matches above, loose matches on Subject: below --
2013-03-05 23:55 [PATCH][RFC] chrpath.bbclass: strip common parent directories from rpath Andreas Oberritter
2013-03-06  0:32 ` [PATCH v2][RFC] " Andreas Oberritter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51D21165.90305@linux.intel.com \
    --to=sgw@linux.intel.com \
    --cc=obi@opendreambox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.