Another pile of perl subpackages and perl(:VERSION) introduction

Petr Pisar ppisar at redhat.com
Tue Oct 13 14:43:32 UTC 2015


Hello,

I moved another load of Perl modules from perl package into subpackages. This
saves about 600 KB in the minimal build root.

When doing so, I did a mistake that caused a file conflict on IO::Socket::IP
manual page. This is fixed in perl-4:5.22.0-352. So don't be scared by current
Koschei results. But be scared after Koschei picks up the fixed perl.

I also moved some Unicode-related modules to perl-libs because they are
autoloaded when a Unicode feauture is used in a regular expression. perl-libs
is now much bigger. I'm sorry.


This second change revealed a long standing issue with generating dependency
from "require 5.006"-like statements. The dependency is exported as "perl >=
1:5.006" now. It has three issues:

(1) The epoch number lost track with recent perl packages. If you needed v5.22,
you would get 1:5.22 which is obviously superoptimal.

(2) The version number is not normalized to perl's RPM version. E.g. 5.010001
is exported as 1:5010001 which passes only because of wrong epoch number.

(3) The version constraint should be applied to perl-libs package instead of
perl package because perl-libs is the package that delivers the interpreter.
This acually becomes visible after moving the Unicode modules to perl-libs:
Now, perl-libs requires perl-Exporter that because of the "require 5.006"
requires "perl >= 1:5.006" which pulls in perl unnecessarily.

Therefore I decided to fix it in the following way:

(1) I added "perl(:VERSION) = 5.22.0" Provides to perl-libs.

(2) I implemented pure-perl version normalization from Perl to RPM versions in
a new Fedora::VSP perl module. This is available in Rawhide now.

(3) I prepared perl-generators enhancement the uses the Fedora::VSP to export
Perl version constraint as "perl(:VERSION)" symbol including proper
normalization. I did a small local test that looks promissing. Jitka is runnig
extensive tests now.

(4) If everything is well, Jitka will enroll new perl-generators with this
change.

(5) Then I will rebuild perl to fix the regresssion that perl-libs requires
perl.

(7) Finally, as package gets normal updates, they will obtain this new
dependency expression automatically. There is not need for any mass rebuild or
changing spec files.

(8) The only thing that could be polished in spec files are occasional
BuildRequire on perl package version. They could be fixed either by removal or
rewording to the "perl(:VERSION)".

Backward compatibility:

We will probably push the perl-libs' Provide of "perl(:VERSION)" into older
Fedoras for people who would implement step (8) and would like to have the
same spec file in all Fedoras.

But we do not plan to port the generators change to older Fedoras. So the new
way how to express Perl version will be harnessed fully only since Fedora 24.

In the far future, I'd like to augment the version normalization to all Perl
module dependencies. That would solve the problems that arise when upstream
relases 1.2 version after 1.12. But that will require some automated
conversion of manually specified dependencies, probably by some nice macro
like "BuildRequire: %perl_m Module::Name 1.2" and a mass rebuild.

-- Petr
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: not available
URL: <http://lists.fedoraproject.org/pipermail/perl-devel/attachments/20151013/3d2ec3e7/attachment.sig>


More information about the perl-devel mailing list