[OE-core] [PATCH] perl: Handle PACKAGES_DYNAMIC for perl-native

Khem Raj raj.khem at gmail.com
Mon Oct 7 22:35:44 UTC 2019


On Mon, Oct 7, 2019 at 3:15 PM Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:

> On Sun, 2019-10-06 at 08:47 -0700, Khem Raj wrote:
> > A perl module recipe extending to provide native version causes target
> > perl dependencies to be pulled into native build if the module recipe
> > has RDEPENDS_${PN} = "perl-module-XXXX" e.g. libxml-sax-base-perl
> > recipe.
> >
> > The reason is that native bbclass empties out PACKAGES_DYNAMIC and
> > perl's PACKAGES_DYNAMIC_class-target is greedy enough to usurp native
> > modules as well.
> >
> > Eventually we end up with errors like when sstate is used across
> > machines
> >
> > * ERROR: libxml-sax-base-perl-native different signature for task
> do_populate_sysroot.sigdata between qemux86copy and qemuarm
> >
> > Therefore, to fix this native case needs to handled specially when
> > re-assigning module dependencies in split_perl_packages(), where the
> > modules are named correctly for native case and have a single dependency
> > on perl-native, secondly, PACKAGES_DYNAMIC for target case needs to be
> > reined in to spare, -native modules, thirdly, let perl-native take over
> > the case for providing native modules
> >
> > This will fix several sstate signature errors like above with external
> > perl modules providing native variants and having runtime dependencies on
> > modules which are provided by perl proper
> >
> > Signed-off-by: Khem Raj <raj.khem at gmail.com>
> > ---
> >  meta/recipes-devtools/perl/perl_5.30.0.bb | 13 +++++++++----
> >  1 file changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/meta/recipes-devtools/perl/perl_5.30.0.bb
> b/meta/recipes-devtools/perl/perl_5.30.0.bb
> > index a221bce52b..9614477982 100644
> > --- a/meta/recipes-devtools/perl/perl_5.30.0.bb
> > +++ b/meta/recipes-devtools/perl/perl_5.30.0.bb
> > @@ -265,13 +265,18 @@ python split_perl_packages () {
> >      # Read the pre-generated dependency file, and use it to set module
> dependecies
> >      for line in open(d.expand("${WORKDIR}") +
> '/perl-rdepends.txt').readlines():
> >          splitline = line.split()
> > -        module = splitline[0].replace("RDEPENDS_perl", "RDEPENDS_${PN}")
> > -        depends = splitline[2].strip('"').replace("perl-module",
> "${PN}-module")
> > +        if bb.data.inherits_class('native', d):
> > +            module = splitline[0] + '-native'
> > +            depends = "perl-native"
> > +        else:
> > +            module = splitline[0].replace("RDEPENDS_perl",
> "RDEPENDS_${PN}")
> > +            depends = splitline[2].strip('"').replace("perl-module",
> "${PN}-module")
> >          d.appendVar(d.expand(module), " " + depends)
> >  }
> >
> > -PACKAGES_DYNAMIC_class-target += "^perl-module-.*"
> > -PACKAGES_DYNAMIC_class-nativesdk += "^nativesdk-perl-module-.*"
> > +PACKAGES_DYNAMIC_class-native_forcevariable = "^perl-module-.*-native$"
> > +PACKAGES_DYNAMIC_class-target = "^perl-module-.*(?<!native)$"
> > +PACKAGES_DYNAMIC_class-nativesdk = "^nativesdk-perl-module-.*"
> >
> >  RDEPENDS_${PN}-misc += "perl perl-modules"
> >  RDEPENDS_${PN}-pod += "perl"
>
> We should never be using _forcevariable in public repos, let alone OE-
> Core. Its a tool of last resort. I guess this is because native.bbclass
> is clearing it but we need to find a better way.


Ok and any suggestions that would be better here ?


>
> Cheers,
>
> Richard
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20191007/33349116/attachment.html>


More information about the Openembedded-core mailing list