Re: About placement of dual-life modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 26, 2011 at 2:40 PM, Robin Lee <robinlee.sysu@xxxxxxxxx> wrote:
> On Tue, Apr 26, 2011 at 5:51 PM, Petr Pisar <ppisar@xxxxxxxxxx> wrote:
>> On Fri, Apr 22, 2011 at 11:00:46PM +0800, Robin Lee wrote:
>>>
>>> Some dual-life modules, like PathTools and CGI, are placed within
>>> vendor path in Fedora 15. This situation is not expected by some
>>> applications, for example, "cpanm -L" command will definitely fail if
>>> an installing package needs such dual-life modules.
>>>
>> This is problem of that applications. They should not expect exact location.

Not really. I think it's legitimate to assume that core modules are
available in archlib/privlib. In a "normal" perl installation, that's
always true. When upgrading a dual-lifed module from the CPAN, you
don't remove or overwrite the files from core, you just install the
new version in sitearch/sitelib.

>> Formally, some packagers wanted to install all Fedora modules into core.

That would also break "cpanm -L" by making it think that *all*
installed modules were part of core and then failing to pick up any
non-core dependencies. This is a good reason to keep the proper
core/vendor split with all of our modules going to vendor.

>> But
>> there are some RPM-related problems (files in debuginfo subpackages would
>> conflict because debug data are delivered by one subpackage for all
>> subpackages together) and some packagers were against it.
> I agree that this is the true obstacle.

Yep, this prevents a simple workaround of installing arch-specific
dual-lifed modules from the cpan in core directories. I think for
noarch packages, we're okay.

There is a possible solution, though - basically replicating what
"normal" perl does. Rather than uninstalling the core module when
replaced with cpan version, arrange things so that both core version
and cpan version are installed simultaneously (or core version only if
that's newer than cpan version).

In perl.spec, we can create additional perlcore-Dist-Name sub-packages, e.g:

%package Scalar-List-Utils
Summary:        A selection of general-utility scalar and list subroutines
Group:          Development/Libraries
License:        GPL+ or Artistic
%global         Scalar_List_Utils_epoch     0
%global         Scalar_List_Utils_version   1.22
Epoch:          %{Scalar_List_Utils_epoch}
Version:        %{Scalar_List_Utils_version}
Requires:       perl = %{perl_epoch}:%{perl_version}-%{release}
Requires:       perlcore-Scalar-List-Utils = %{epoch}:%{version}-%{release}
Obsoletes:      perlcpan-Scalar-List-Utils <= %{epoch}:%{version}-%{release}

%description Scalar-List-Utils
Scalar::Util and List::Util contain a selection of subroutines that people have
expressed would be nice to have in the perl core, but the usage would not
really be high enough to warrant the use of a keyword, and the size so small
such that being individual extensions would be wasteful.

%package -n perlcore-Scalar-List-Utils
Summary:        Scalar-List-Utils from Perl core
Group:          Development/Libraries
License:        GPL+ or Artistic
Epoch:          %{Scalar_List_Utils_epoch}
Version:        %{Scalar_List_Utils_version}
Requires:       perl = %{perl_epoch}:%{perl_version}-%{release}
Requires:       perl-Scalar-List-Utils >= %{epoch}:%{version}-%{release}

%description -n perlcore-Scalar-List-Utils
Scalar-List-Utils implementation from Perl core.

%files Scalar-List-Utils
%{_mandir}/man3/List::Util*
%{_mandir}/man3/Scalar::Util*

%files -n perlcore-Scalar-List-Utils
%defattr(-,root,root,-)
%{archlib}/List/
%{archlib}/List/Util/
%{archlib}/List/Util.pm
%{archlib}/Scalar/
%{archlib}/Scalar/Util/
%{archlib}/Scalar/Util.pm
%{archlib}/auto/List/
%{archlib}/auto/List/Util/



And in each of the dual-lifed perl-Dist-Name packages, create
perlcpan-Dist-Name sub-packages, e.g:

%package -n perlcpan-Scalar-List-Utils
Summary:        Scalar-List-Utils from the CPAN
Group:          Development/Libraries
License:        GPL+ or Artistic
Requires:       perl-Scalar-List-Utils = %{epoch}:%{version}-%{release}

%description -n perlcpan-Scalar-List-Utils
Scalar-List-Utils implementation from the CPAN.

%files
%defattr(-,root,root,-)
%doc Changes README
%{_mandir}/man3/*

%files -n perlcpan-Scalar-List-Utils
%{perl_vendorarch}/auto/*
%{perl_vendorarch}/List*
%{perl_vendorarch}/Scalar*


So that we end up with:

perl-Scalar-List-Utils-1.22-158.fc15.x86_64.rpm
perlcore-Scalar-List-Utils-1.22-158.fc15.x86_64.rpm

and

perl-Scalar-List-Utils-1.23-2.fc15.x86_64.rpm
perlcpan-Scalar-List-Utils-1.23-2.fc15.x86_64.rpm


Where perlcpan-Scalar-List-Utils-1.23 is the "best" provider of
perl(Scalar::Util) and the dependencies ensure that perlcpan package
pulls in perl-Scalar-List-Utils-1.23, which in turn pulls in
perlcore-Scalar-List-Utils-1.22.

If at some point in the future, perl 5.14.x comes with a newer
Scalar-List-Utils, we end up with

perl-Scalar-List-Utils-1.24-199.fc16.x86_64.rpm
perlcore-Scalar-List-Utils-1.24-199.fc16.x86_64.rpm

and

perl-Scalar-List-Utils-1.23-2.fc15.x86_64.rpm
perlcpan-Scalar-List-Utils-1.23-2.fc15.x86_64.rpm

Where perlcore-Scalar-List-Utils-1.24 is now the "best" provider of
perl(Scalar::Util) which pulls in perl-Scalar-List-Utils-1.24 and
obsoletes perlcpan-Scalar-List-Utils-1.23.


Of course, it's a bit of effort to implement, and potentially doubles
the installed size of any dual-lifed modules, but fairly easy to
revert if and when debuginfo plays nice with sub-packages. (And may
help to avoid another "Redhat perl != perl" debate).


-- 
Iain.
--
Fedora Extras Perl SIG
http://www.fedoraproject.org/wiki/Extras/SIGs/Perl
perl-devel mailing list
perl-devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/perl-devel


[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Legacy Announce]     [Fedora PHP Devel]     [Kernel Devel]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Big List of Linux Books]     [Gimp]     [Yosemite Information]
  Powered by Linux