[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