FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Gentoo > Gentoo Development

 
 
LinkBack Thread Tools
 
Old 12-29-2010, 07:56 AM
Torsten Veller
 
Default Ebuild- and CPAN-versions compatibility

CPAN and ebuild versions are ordered in different ways. The idea here is
to change the ebuild versions to be predictable and CPAN compatible.

CPAN versions exist as "decimal" and "dotted-integer" versions.

| # Decimal versions #
| d+(.d+)?
|
| Any version which "looks like a number"[...]. This
| also includes versions with a single decimal point[...]

1.19 < 1.191 < 1.2

| # Dotted-Integer Versions #
| vd+(.d{1,3}){2,}
|
| These contain more than one decimal point[...]
| This is what is commonly used in most open source software as the
| "external" version[...] A leading 'v' character is now required

v1.9.0 < v1.10.0 < v1.10.0.1


These version objects can be compared by grouping three digits of the
decimal number to one integer part of the dotted-integer version...

1.19 = 1.190 = 1.190000 ~ v1.190.0
1.191 = 1.191 = 1.191000 ~ v1.191.0
1.2 = 1.200000 ~ v1.200.0

1.009 = 1.009000 ~ v1.9.0
1.01 = 1.010000 ~ v1.10.0
1.010000001 ~ v1.10.0.1

perl -wE'use version;@v=map{version->parse($_)}@ARGV;print map{$_->numify," ",$_->normal,"
"}@v'
1.19 1.191 1.2 1.9.0 1.10.0 1.10.0.1

Many CPAN distributions are released in decimal version format. Most of
the time it's no problem to use the same version as PV. Sometimes it is...[2]

I solved it by adding additional dots.
1.191 becomes 1.19.1, 5.251 becomes 5.2.5.1, depending on former
releases. By removing the additional dots from PV it's easy to get the
upstream decimal version. But it differs from perlish versions meaning.


The current list of outdated cpan packages[1] contains at least four
packages that need attention:
| App-CLI 0.08 0.313
| IO-AIO 3.65 3.7
| MARC-Charset 1.3 1.31
| Sphinx-Search 0.22 0.2401


Vincent Pit currently maintains a number of special version mappings[6] for
CPANPLUS-Dist-Gentoo[4][5] (creates ebuilds from the CPAN like g-cpan
does) and suggested to move to a predictable and CPAN-compatible
versioning scheme:
| if the version starts by 'v' or has at least two dots, then it's used
| as-is (thus 'v1.2' becames '1.2' and '1.2.3' stays the same) ; otherwise
| the version number is a float 1.xxxyyyzzz... which is mapped to
| 1.xxx.yyy.zzz with padding zeros if needed ('1.1' would become '1.100',
| and '1.0701' would be '1.070.100')
(whether 1.0701 becomes 1.070.100 or 1.70.100 has to be decided but
doesn't really matter.)

I like this but it also means:
- set the CPAN version inside the ebuilds
- touch a lot of ebuilds
- have some downgrades[3]
- some upstreams force 0.21 < 0.21.1 (which isn't true for cpan
versioning!). hopefully these are only historical issues.
- versions look different but mean the same
- fix tools like up2date-ng, g-cpan,...

Maybe we should start by fixing only the packages where the CPAN versions
weren't compatible with PMS? Instead of having mappings for many cases
we only need a list of packages with transformed versions?

Comments?


[0] https://github.com/gentoo-perl/wiki/wiki/version
[1] http://www.gentoo.org/proj/en/perl/outdated-cpan-packages.xml
[2] grep "^inherit.*versionator" dev-perl/**/*.ebuild | wc -l # 86
[3] find dev-perl -name "*.ebuild" | egrep ".[0-9]{4,}" | wc -l # ~68 downgrades
[4] http://search.cpan.org/dist/CPANPLUS-Dist-Gentoo/
[5] https://github.com/gentoo-perl/perl-experimental/tree/master/dev-perl/CPANPLUS-Dist-Gentoo
[6] http://cpansearch.perl.org/src/VPIT/CPANPLUS-Dist-Gentoo-0.11/lib/CPANPLUS/Dist/Gentoo/Maps.pm
 
Old 01-11-2011, 07:10 PM
Torsten Veller
 
Default Ebuild- and CPAN-versions compatibility

* Torsten Veller <tove@gentoo.org>:
> CPAN and ebuild versions are ordered in different ways. The idea here is
> to change the ebuild versions to be predictable and CPAN compatible.

I've committed dev-perl/Gentoo-PerlMod-Version which contains a perl module and
a scipt to convert the versions. gentoo-perlmod-version.pl maps given
perlish versions to ebuild versions (perl => ebuild):

$ gentoo-perlmod-version.pl 0.9 0.98 0.987 v0.{900,980,987} 0.{900,980,987}.0
0.9 => 0.900
0.98 => 0.980
0.987 => 0.987
v0.900 => 0.900
v0.980 => 0.980
v0.987 => 0.987
0.900.0 => 0.900
0.980.0 => 0.980
0.987.0 => 0.987

gentoo-perlmod-version.pl 0.9 0.08 0.007 0.0006 0.00005 0.000004 0.0000003
0.9 => 0.900
0.08 => 0.80
0.007 => 0.7
0.0006 => 0.0.600
0.00005 => 0.0.50
0.000004 => 0.0.4
0.0000003 => 0.0.0.300

Using version.pm the ebuild and perl versions can be compared:
The ebuild version just needs to be prefixed with a 'v'.
$ perl -wE 'while(@ARGV){say version->parse(shift) <=> version->parse(shift)}' v1.1 1.001 v1.190 1.19


The given perl distribution version will be recorded as MODULE_VERSION in
the ebuild. (For ease of use s/^MODULE_VERSION=(['"]?)(.+)1/$2/ should
return the version if not PV.)

Diff of the perl-module.eclass is attached.


The change of versioning will result in ~22 downgrades:

$ find dev-perl -name "*.ebuild" | egrep '.[1-9][0-9]{3}'
dev-perl/POE-Component-IKC/POE-Component-IKC-0.2200.ebuild
dev-perl/Class-Accessor-Grouped/Class-Accessor-Grouped-0.10000.ebuild
dev-perl/IO-Moose/IO-Moose-0.1004.ebuild
dev-perl/DBD-mysql/DBD-mysql-2.9007.ebuild
dev-perl/text-autoformat/text-autoformat-1.669002.ebuild
dev-perl/text-autoformat/text-autoformat-1.669001.ebuild
dev-perl/CPAN-Mini/CPAN-Mini-1.100630.ebuild
dev-perl/Tie-Cache-LRU/Tie-Cache-LRU-20081023.2116.ebuild
dev-perl/DateTime-Format-Strptime/DateTime-Format-Strptime-1.5000.ebuild
dev-perl/DateTime-Format-Strptime/DateTime-Format-Strptime-1.4000.ebuild
dev-perl/Net-Twitter/Net-Twitter-3.14001.ebuild
dev-perl/Net-Twitter/Net-Twitter-3.13009.ebuild
dev-perl/XML-RAI/XML-RAI-1.3031.ebuild
dev-perl/XML-RAI/XML-RAI-1.3022.ebuild
dev-perl/Algorithm-Diff/Algorithm-Diff-1.1902.ebuild
dev-perl/Throwable/Throwable-0.102080.ebuild
dev-perl/Email-Sender/Email-Sender-0.102370.ebuild
dev-perl/Email-Sender/Email-Sender-0.101760.ebuild
dev-perl/Convert-BER/Convert-BER-1.3200.ebuild
dev-perl/Convert-BER/Convert-BER-1.3101.ebuild
dev-perl/Scalar-Properties/Scalar-Properties-1.100860.ebuild
dev-perl/DateTime-Format-Mail/DateTime-Format-Mail-0.3001.ebuild
dev-perl/File-chdir/File-chdir-0.1002.ebuild
dev-perl/File-chdir/File-chdir-0.1003.ebuild
dev-perl/Net-Netmask/Net-Netmask-1.9015.ebuild
dev-perl/PlRPC/PlRPC-0.2020-r1.ebuild
dev-perl/SQL-Translator/SQL-Translator-0.11006.ebuild
dev-perl/SQL-Translator/SQL-Translator-0.11007.ebuild
dev-perl/Perl6-Junction/Perl6-Junction-1.40000.ebuild
dev-perl/MP3-Tag/MP3-Tag-0.9709.ebuild
- Die on unsupported EAPI
- Die if PERL_EXPORT_PHASE_FUNCTIONS not yes or no
- Add support for MY_PN, MY_PV, MODULE_VERSION
- Allow use of myconf, mymake, myinst as arrays
- Use Module::Build even if Module::Build is not prefered but no Makefile.PL is found

--- a/eclass/perl-module.eclass
+++ b/eclass/perl-module.eclass
@@ -34,7 +34,7 @@
esac
;;
*)
- DEPEND="EAPI-UNSUPPORTED"
+ die "EAPI=${EAPI} is not supported by perl-module.eclass"
;;
esac

@@ -46,7 +46,7 @@
debug-print "PERL_EXPORT_PHASE_FUNCTIONS=no"
;;
*)
- DEPEND+=" PERL_EXPORT_PHASE_FUNCTIONS-UNSUPPORTED"
+ die "PERL_EXPORT_PHASE_FUNCTIONS=${PERL_EXPORT_PHASE_F UNCTIONS} is not supported by perl-module.eclass"
;;
esac

@@ -54,6 +54,10 @@

LICENSE="${LICENSE:-|| ( Artistic GPL-1 GPL-2 GPL-3 )}"

+if [[ -n ${MY_PN} || -n ${MY_PV} || -n ${MODULE_VERSION} ]] ; then
+ : ${MY_P:=${MY_PN:-${PN}}-${MY_PV:-${MODULE_VERSION:-${PV}}}}
+ S=${MY_S:-${WORKDIR}/${MY_P}}
+fi
[[ -z "${SRC_URI}" && -z "${MODULE_A}" ]] && MODULE_A="${MY_P:-${P}}.tar.gz"
[[ -z "${SRC_URI}" && -n "${MODULE_AUTHOR}" ]] &&
SRC_URI="mirror://cpan/authors/id/${MODULE_AUTHOR:0:1}/${MODULE_AUTHOR:0:2}/${MODULE_AUTHOR}/${MODULE_SECTION:+${MODULE_SECTION}/}${MODULE_A}"
@@ -97,21 +101,31 @@
# Disable ExtUtils::AutoInstall from prompting
export PERL_EXTUTILS_AUTOINSTALL="--skipdeps"

- if [[ ${PREFER_BUILDPL} == yes && -f Build.PL ]] ; then
+ if [[ $(declare -p myconf 2>&-) != "declare -a myconf="* ]]; then
+ local myconf_local=(${myconf})
+ else
+ local myconf_local=("${myconf[@]}")
+ fi
+
+ if [[ ( ${PREFER_BUILDPL} == yes || ! -f Makefile.PL ) && -f Build.PL ]] ; then
einfo "Using Module::Build"
if [[ ${DEPEND} != *virtual/perl-Module-Build* && ${PN} != Module-Build ]] ; then
eqawarn "QA Notice: The ebuild uses Module::Build but doesn't depend on it."
eqawarn " Add virtual/perl-Module-Build to DEPEND!"
+ if [[ -n ${PERLQAFATAL} ]]; then
+ eerror "Bailing out due to PERLQAFATAL=1";
+ die;
+ fi
fi
set --
--installdirs=vendor
--libdoc=
--destdir="${D}"
--create_packlist=0
- ${myconf}
+ "${myconf_local[@]}"
einfo "perl Build.PL" "$@"
perl Build.PL "$@" <<< "${pm_echovar}"
- || die "Unable to build! (are you using USE="build"?)"
+ || die "Unable to build!"
elif [[ -f Makefile.PL ]] ; then
einfo "Using ExtUtils::MakeMaker"
set --
@@ -119,10 +133,10 @@
INSTALLDIRS=vendor
INSTALLMAN3DIR='none'
DESTDIR="${D}"
- ${myconf}
+ "${myconf_local[@]}"
einfo "perl Makefile.PL" "$@"
perl Makefile.PL "$@" <<< "${pm_echovar}"
- || die "Unable to build! (are you using USE="build"?)"
+ || die "Unable to build!"
fi
if [[ ! -f Build.PL && ! -f Makefile.PL ]] ; then
einfo "No Make or Build file detected..."
@@ -136,14 +150,22 @@

has src_configure ${PERL_EXPF} || perl-module_src_prep

+ if [[ $(declare -p mymake 2>&-) != "declare -a mymake="* ]]; then
+ local mymake_local=(${mymake})
+ else
+ local mymake_local=("${mymake[@]}")
+ fi
+
if [[ -f Build ]] ; then
./Build build
- || die "compilation failed"
+ || die "Compilation failed"
elif [[ -f Makefile ]] ; then
- emake
+ set --
OTHERLDFLAGS="${LDFLAGS}"
- ${mymake}
- || die "compilation failed"
+ "${mymake_local[@]}"
+ einfo "emake" "$@"
+ emake "$@"
+ || die "Compilation failed"
# OPTIMIZE="${CFLAGS}"
fi
}
@@ -200,12 +222,18 @@
esac
fi

+ if [[ $(declare -p myinst 2>&-) != "declare -a myinst="* ]]; then
+ local myinst_local=(${myinst})
+ else
+ local myinst_local=("${myinst[@]}")
+ fi
+
if [[ -f Build ]] ; then
./Build ${mytargets}
|| die "./Build ${mytargets} failed"
elif [[ -f Makefile ]] ; then
- emake ${myinst} ${mytargets}
- || die "emake ${myinst} ${mytargets} failed"
+ emake "${myinst_local[@]}" ${mytargets}
+ || die "emake ${myinst_local[@]} ${mytargets} failed"
fi

perl_delete_module_manpages
 

Thread Tools




All times are GMT. The time now is 05:21 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org