* Torsten Veller <t...@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_FUNCTIONS} 
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=("${myco...@]}")
+       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_loc...@]}"
                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_loc...@]}"
                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=("${myma...@]}")
+       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_loc...@]}"
+               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=("${myin...@]}")
+       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_loc...@]}" ${mytargets} \
+                       || die "emake ${myinst_loc...@]} ${mytargets} failed"
        fi
 
        perl_delete_module_manpages

Reply via email to