Am 04.01.22 um 06:10 schrieb Tim Mooney via oi-dev:

All-

My basic question is what the best practice is for how packagers
should be
specifying dependencies between language modules/libraries for scripting
languages?  Currently I'm specifically interested in perl modules, but
the same idea is relevant for python, ruby, etc.

As an example of one way to do it, there's
oi-userland/components/perl/libwww-perl/libwww-perl-PERLVER.p5m.
Alexander manually added all of the modules that are needed for
libwww-perl-###, using the most obvious, "friendly" syntax for depend:

    depend fmri=library/perl-5/encode-locale-$(PLV) type=require
    depend fmri=library/perl-5/file-listing-$(PLV) type=require
    depend fmri=library/perl-5/html-parser-$(PLV) type=require

etc.

Doing it that way, though, those dependencies don't get added to Makefile
when you do "gmake REQUIRED_PACKAGES", and they don't appear to be added
to the "pkg5" metadata after a successful publish.

This is intended. The requirements modeled in the Makefile (and thus in
pkg5) are BUILD dependencies whereas depend actions in the manifest are
RUNTIME dependencies. Alas our tools are not good at detecting runtime
dependencies and sometimes fail on build dependencies (eg. for test
requirements). So we need to manually add missing dependencies. The
actual state of both, runtime and build dependencies is lacking. And
sometimes you'll be hit by this fact when you build or install packages
locally. This is also a reason why sometimes local builds are fine while
they fail on the build server (and vice versa).



The same is true if you want to make a language module depend upon the
version of the perl interpreter it was built for.  I first tried using
this syntax:

    depend fmri=runtime/perl-$(PLV) type=require

or variants of it as outlined in the pkg guide, like:

    depend fmri=pkg:/runtime/perl-$(PLV) type=require

Dependencies specified that way aren't output by REQUIRED_PACKAGES.

However, if you change the syntax to a "less obvious" method:

    depend fmri=__TBD pkg.debug.depend.file=perl \
        pkg.debug.depend.path=usr/perl5/$(PERLVER)/bin type=require

then REQUIRED_PACKAGES *does* add the dependency to the Makefile and the
pkg5 metadata.  That's a trick that Aurélien has used in some places.

When IPS is working (eg. by running pkg install) it does not have access
to the information in the Makefiles or pkg5.
From what I know pkg5 files aren't yet used at all. They are artifacts
from future enhancements of the build tools Aurélien has been working on.


So what's the right thing to do here?  Use the simple syntax in the .p5m
file and don't care that the dependency isn't listed in the Makefile or
pkg5?  Use the more complicated syntax, with "fmri=__TBD" and a file and
path from the dependency?  Don't specify anything in the .p5m file and
instead manually add the dependency in the Makefile, as you might for
a build dependency?

It depends on what you want to model: build dependency, runtime
dependency or both.



I'm happy to fix up missing inter-module dependencies when I find them,
but I would like to follow whatever the best practice is for these types
of dependencies.

Thanks,

Tim

Andreas

_______________________________________________
oi-dev mailing list
[email protected]
https://openindiana.org/mailman/listinfo/oi-dev

Reply via email to