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

Richard Purdie richard.purdie at linuxfoundation.org
Mon Oct 7 22:15:32 UTC 2019


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.

Cheers,

Richard



More information about the Openembedded-core mailing list