public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Torsten Veller <tove@gentoo.org>
To: gentoo-dev@lists.gentoo.org, gentoo-perl@lists.gentoo.org
Subject: [gentoo-dev] Re: Ebuild- and CPAN-versions compatibility
Date: Tue, 11 Jan 2011 21:10:13 +0100	[thread overview]
Message-ID: <20110111201013.GA23791@veller.net> (raw)
In-Reply-To: <20101229085631.GA6757@veller.net>

[-- Attachment #1: Type: text/plain, Size: 2910 bytes --]

* 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

[-- Attachment #2: perl-module.patch --]
[-- Type: text/plain, Size: 3986 bytes --]

- 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=("${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

      reply	other threads:[~2011-01-11 21:17 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-29  8:56 [gentoo-dev] Ebuild- and CPAN-versions compatibility Torsten Veller
2011-01-11 20:10 ` Torsten Veller [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110111201013.GA23791@veller.net \
    --to=tove@gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    --cc=gentoo-perl@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox