Gentoo::PerlMod::Version - Convert arbitrary Perl Modules' versions into normalised Gentoo versions.
version 0.3.0
use Gentoo::PerlMod::Version qw( :all ); # http://search.cpan.org/~gmpassos/XML-Smart-1.6.9/ say gentooize_version( '1.6.9' ) # 1.6.9 http://search.cpan.org/~pip/Math-BaseCnv-1.6.A6FGHKE/ say gentooize_version('1.6.A6FGHKE') # <-- death, this is awful # -- Work-In-Progress Features -- say gentooize_version('1.6.A6FGHKE',{ lax => 1}) # <-- still death say gentooize_version('1.6.A6FGHKE',{ lax => 2}) # 1.6.366.556.632.14 # <-- the best we can do. say gentooize_version('1.9902-TRIAL') # <-- death, this is awful say gentooize_version('1.9902-TRIAL', { lax => 1 }) # 1.990.200_rc # <-- -TRIAL gets nuked, 'rc' is added.
my $normalized = gentooize_version( $weird_version )
gentooize_version tries hard to mangle a version that is part of a CPAN dist into a normalized form for Gentoo, which can be used as the version number of the ebuild, while storing the original upstream version in the ebuild.
CPAN: Foo-Bar-Baz 1.5 print gentooize_version('1.5'); # -> 1.500.0 -> dev-perl/Foo-Bar-Baz-1.500.0.ebuild cat dev-perl/Foo-Bar-Baz-1.500.0.ebuild # ... # MODULE_VERSION="1.5" # ...
Normal behaviour accepts only sane non-testing versions, i.e.:
0.1 -> 0.001.0 0.001 -> 0.1.0 1.1 -> 1.001.0 1.123.13 -> 1.123.13
Etc.
This uses version.pm to read versions and to normalize them.
version.pm
0.1 # 0.100.0 0.01 # 0.10.0 0.001 # 0.1.0 0.0001 # 0.0.100
So assuming Perl can handle your versions, they can be normalised.
my $nomralized = gentooize_version( $werid_version, { lax => 1 } );
EXPERIMENTAL: This feature is still in flux, and the emitted versions may change.
This adds one layer of laxativity, and permits parsing and processing of "Developer Release" builds.
1.10-TRIAL # 1.100.0_rc 1.11-TRIAL # 1.110.0_rc 1.1_1 # 1.110.0_rc
my $nomralized = gentooize_version( $werid_version, { lax => 2 } );
This adds another layer of laxativity, and permits parsing and processing of packages with versions not officially supported by Perl.
This means versions such as
1.6.A # 1.6.10 1.6.AA # 1.6.370 1.6.AAA # 1.6.370.10 1.6.AAAA # 1.6.370.370 1.6.A6FGHKE # 1.6.366.556.632.14
This is performed by some really nasty tricks, and treats the ASCII portion like a set of pairs.
1.6.A6.FG.HK.E
And each ascii pair is treated like a Base36 number.
0 -> 0 .... 9 -> 9 A -> 10 ... Z -> 35
A6 is thus
10 * 36 + 6 => 366
As you can see, its really nasty, and hopefully its not needed.
Kent Fredric <kentnl@cpan.org>
This software is copyright (c) 2011 by Kent Fredric <kentnl@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Gentoo::PerlMod::Version, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Gentoo::PerlMod::Version
CPAN shell
perl -MCPAN -e shell install Gentoo::PerlMod::Version
For more information on module installation, please visit the detailed CPAN module installation guide.