Use separate part for each perl package
Rework perl installation to install each package in a separate directory. Each package install a `perl` interpreter for each package, which is implemented a shell wrapper setting `$PERL5LIB` with the path of this package and its dependencies. To install a perl package, use `perl-CPAN-package` macro, like in this example for a fictional `XXX::YYY` package: ``` [perl-XXX-YYY] <= perl-CPAN-package module = XXX/XXX-YYY version = 1.2.3 md5sum = ab68b329da9893e34099c7d8ad5cb9c940cd123 ``` This will download package from https://www.cpan.org/modules/by-module/XXX/XXX-YYY-1.2.3.tar.gz and install using the usual `perl Makefile.PL && make && make install` sequence. To install package with dependencies, use the `inc=` argument, like in this example for another fictional package `XXX::ZZZ` package that would depend on `XXX::YYY` and `XXX::ABC` : ``` [perl-XXX-ZZZ] <= perl-CPAN-package module = XXX/XXX-ZZZ version = 1.2.3 md5sum = 401b30e3b8b5d629635a5c613cdb7919 inc = ${perl-XXX-YYY:site_perl}:${perl-XXX-ABC:site_perl} ``` The full list of options is described in the [macro](https://lab.nexedi.com/nexedi/slapos/blob/a5bec95c/component/perl/buildout.cfg#L31-65). That macro creates an interpreter for each package, but sometimes we need to create an interpreter with multiple packages. The `perl-wrapper` macro is available for this. It also accepts a `inc=` argument in the same format. Because this wrapper is implemented using `-I` argument, it is also suitable for scrips running in perl [taint mode](https://perldoc.perl.org/perlsec.html#Taint-mode-and-%40INC), like the w3-validator we are using. All perl components and perl usages have been updated to this new infrastructure. Some (apparently) unmaintained components were using an obsolete `slapos.recipe.build:cpan` recipe. They were used only in mioga2 from unstable, so I moved them inline in mioga2 software. /reviewed-on nexedi/slapos!341
Showing
Please register or sign in to comment