On Fri, Nov 15, 2019, 17:38 Petr Pisar <ppi...@redhat.com> wrote:

> On 2019-11-15, Daniel P  Berrangé <berra...@redhat.com> wrote:
> > On Fri, Nov 15, 2019 at 02:53:08PM -0000, Petr Pisar wrote:
> >> On 2019-11-15, John M. Harris Jr <joh...@splentity.com> wrote:
> >> > On Friday, November 15, 2019 6:32:21 AM MST Petr Pisar wrote:
> >> >> Example: I have Perl 5.26 as a default version. I have Perl 5.30 as
> an
> >> >> laternative version. Now I want to package Bugzilla that's written in
> >> >> Perl. How do you package Bugzilla so that it works with Perl 5.26 as
> >> >> well as with Perl 5.30?
> >> >
> >> > This sounds like a bug in Modularity.
> >>
> >> Modularity can achieve it when both Perls are packaged as a module. I'm
> >> only showing why we need default stream if we want modules.
> >
> > I'm interested in how this should work when two different modules
> > interact, and we need a language binding across both modules.
> >
> > Consider if we move the virtualization stack (QEMU & Libvirt) into a
> > module with two streams, one libvirt 5.8.0 and one libvirt 6.1.0.
> >
> > Now we want to build Perl bindings for libvirt. We'll need the
> > corresponding version of perl-Sys-Virt either 5.8.0 or 6.1.0,
> > built for each virt module stream, but also built for each Perl
> > module stream 5.26 / 5.30. eg the combinatorial expansion
> >
> >  -   perl-Sys-Virt 5.8.0   with libvirt 5.9.0 with perl 5.26
> >  -   perl-Sys-Virt 5.8.0   with libvirt 5.9.0 with perl 5.30
> >  -   perl-Sys-Virt 6.1.0   with libvirt 6.1.0 with perl 5.26
> >  -   perl-Sys-Virt 6.1.0   with libvirt 6.1.0 with perl 5.30
> >
> True, you have 4 combinations.
>
> > which module would the perl-Sys-Virt builds live in ?
> >
> > If perl-Sys-Virt is part of the virt module, IIUC we'd only be
> > able to build it for one specific perl module stream.
> >
> > If perl-Sys-Virt is part of the perl module, IIUC we'd only be
> > able to build it for one specific virt module stream
> >
> > It looks to me like we have to create a new module just to hold
> > the perl-Sys-Virt package, and give this 4 streams, to cover the
> > combinatorial expansion of the perl & virt module streams. Is
> > this right ?
> >
> No. Modularity solves this combination problem with "stream expansion".
> Sources for such module exists only once, you submit them for building
> with fedpkg only once, but a build systems computes all combinations
> (this the stream expansion) and schedules a build for each of the
> combination. That will result in multiple module builds with the same
> module name, stream, version, but differing with a special
> discriminator called "context".
>

The problem described by Daniel was that Perl module should be different
version when building against 5.x libvirt.

Example: Let's say you have libvirt module with 5.8.0 and 6.1.0 streams
> and perl module with 5.26 and 5.30 streams. If you add perl-Sys-Virt
> into a new module, you write a modulemd file for it like this:
>
> - buildrequiers:
>     libvirt: [5.8.0, 6.1.0]
>     perl: [5.26, 5.30]
>     platform: [f32]
>   requires:
>     libvirt: [5.8.0, 6.1.0]
>     perl: [5.26, 5.30]
>     platform: [f32]
>
> "fedpkg module-build" on it will spawn 4 builds. Even you don't have to
> enumerate the streams and let the module build system to figure out it
> automatically and expand for all existing:
>
> - buildrequiers:
>     libvirt: []
>     perl: []
>     platform: []
>   requires:
>     libvirt: []
>     perl: []
>     platform: []
>
> Or you can put perl-Sys-Virt into libvirt module and write into libvirt
> modulemd of each of the libvirt streams:
>
> - buildrequiers:
>     perl: []
>     platform: []
>   requires:
>     perl: []
>     platform: []
>
> You can see these modules in RHEL or CentOS. E.g. perl-DBD-Pg module
> <
> https://git.centos.org/modules/perl-DBD-Pg/blob/c8-stream-3.7/f/perl-DBD-Pg.yaml
> >.
>
> When installing the module, DNF makes sure to select a proper context
> for libvirt and perl you have already selected. If it happened that you
> built it only for Perl 5.26, but you have already enabled Perl 5.24 on
> your system, DNF will report an error that 5.26 module is needed but it
> is disabled.
>
> > And we'd have to do create more modules for every other language
> > binding we ship (ocaml, python, ruby, etc) if the language runtime
> > uses modules.
> >
> You can put all the bindings into one module. Or each binding into its
> own module. Whatever fits your needs better.
>
> -- Petr
> _______________________________________________
> devel mailing list -- devel@lists.fedoraproject.org
> To unsubscribe send an email to devel-le...@lists.fedoraproject.org
> Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
>
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org

Reply via email to