public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] perl-module.eclass -- review
@ 2009-02-27 14:08 Torsten Veller
  2009-02-28 11:28 ` [gentoo-dev] Re: perl-module.eclass -- review - 2 Torsten Veller
  2009-03-02  6:56 ` [gentoo-dev] perl-module.eclass -- review Robin H. Johnson
  0 siblings, 2 replies; 15+ messages in thread
From: Torsten Veller @ 2009-02-27 14:08 UTC (permalink / raw
  To: gentoo-dev; +Cc: gentoo-perl

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

Please review the attached perl-module.eclass.
Patch linked below.

Changes (#239510):
~~~~~~~
- EAPI 2 support
- default license
- reduced EXPORT_FUNCTIONS for EAPI=2
- HOMEPAGE changed
- LDFLAGS support
- quoting
- removes updatepod()
- removes .packlist files
- removes empty *.bs files
- removed BUILDER_VER stuff


IDEAS
~~~~~
- remove esvn_clean
- cache perlinfo calls


TODO (no showstopper)
~~~~
- still no documentation
- perl-app.eclass not done


After that perl-module_src_prep calls in ebuilds should be updated
(perl-module_src_configure) or removed:
|    app-pda/pilot-link
|    dev-perl/GDTextUtil
|    dev-tex/html2latex
|    kde-base/dcopperl
|    mail-filter/spamassassin
|    sci-libs/gdal
|    sci-libs/udunit

Ebuilds with a local perl-module_src_prep function should be fixed too
|    dev-perl/Alien-wxWidgets
|    dev-perl/HTML-Mason
|    www-apps/Embperl/Embperl


git://github.com/tove/perl-eclass.git
http://people.gentoo.org/tove/files/perl-module.eclass.diff

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

# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v 1.112 2008/09/30 08:28:44 robbat2 Exp $
#
# Author: Seemant Kulleen <seemant@gentoo.org>

# @ECLASS: perl-module.eclass
# @MAINTAINER:
# perl@gentoo.org
# @BLURB: eclass for perl modules
# @DESCRIPTION:
# The perl-module eclass is designed to allow easier installation of perl
# modules, and their incorporation into the Gentoo Linux system.

inherit eutils base

case "${EAPI:-0}" in
	0|1)
		EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm src_compile src_install src_test src_unpack
		;;
	*)
		EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install
		;;
esac

DESCRIPTION="Based on the $ECLASS eclass"

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

[ -z "${SRC_URI}" -a -z "${MODULE_A}" ] && MODULE_A="${MY_P:-${P}}.tar.gz"
[ -z "${SRC_URI}" -a -n "${MODULE_AUTHOR}" ] && \
	SRC_URI="mirror://cpan/authors/id/${MODULE_AUTHOR:0:1}/${MODULE_AUTHOR:0:2}/${MODULE_AUTHOR}/${MODULE_SECTION}/${MODULE_A}"
[ -z "${HOMEPAGE}" ] && \
	HOMEPAGE="http://search.cpan.org/dist/${MY_PN:-${PN}}"

SRC_PREP="no"
SRC_TEST="skip"
PREFER_BUILDPL="yes"

PERL_VERSION=""
SITE_ARCH=""
SITE_LIB=""
VENDOR_LIB=""
VENDOR_ARCH=""
ARCH_LIB=""
pm_echovar=""

perl-module_src_unpack() {
	base_src_unpack unpack
	has "${EAPI:-0}" 0 1 && perl-module_src_prepare
}

perl-module_src_prepare() {
	if [[ -n ${PATCHES} ]] ; then
		base_src_unpack autopatch
	fi
	esvn_clean
}

perl-module_src_configure() {
	perl-module_src_prep
}

perl-module_src_prep() {
	[[ "${SRC_PREP}" = "yes" ]] && return 0
	SRC_PREP="yes"

	perlinfo

	export PERL_MM_USE_DEFAULT=1
	# Disable ExtUtils::AutoInstall from prompting
	export PERL_EXTUTILS_AUTOINSTALL="--skipdeps"

	if [[ "${PREFER_BUILDPL}" == "yes" && -f Build.PL ]] ; then
		einfo "Using Module::Build"
		perl Build.PL \
			--installdirs vendor \
			--libdoc= \
			--config installman3dir= \
			--destdir "${D}" \
			--create_packlist=0 \
			--extra_linker_flags="${LDFLAGS}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	elif [[ -f Makefile.PL ]] ; then
		einfo "Using ExtUtils::MakeMaker"
		perl Makefile.PL \
			PREFIX=/usr \
			INSTALLDIRS=vendor \
			INSTALLMAN3DIR='none' \
			DESTDIR="${D}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	fi
	if [[ ! -f Build.PL && ! -f Makefile.PL ]] ; then
		einfo "No Make or Build file detected..."
		return
	fi
}

perl-module_src_compile() {
	perlinfo

	has "${EAPI:-0}" 0 1 && perl-module_src_prep

	if [[ -f Build ]] ; then
		./Build build || die "compilation failed"
	elif [[ -f Makefile ]] ; then
		#make ${mymake} OPTIMIZE="${CFLAGS}" OTHERLDFLAGS="${LDFLAGS}" || die "compilation failed"
		make ${mymake} OTHERLDFLAGS="${LDFLAGS}" || die "compilation failed"
	fi
}

perl-module_src_test() {
	if [[ "${SRC_TEST}" == "do" ]] ; then
		perlinfo
		if [[ -f Build ]] ; then
			./Build test || die "test failed"
		elif [[ -f Makefile ]] ; then
			make test || die "test failed"
		fi
	fi
}

perl-module_src_install() {
	local f stat
	perlinfo

	[[ -z ${mytargets} ]] && mytargets="pure_install"

	if [[ -f Build ]] ; then
		./Build ${mytargets} || die
	elif [[ -f Makefile ]] ; then
		make ${myinst} ${mytargets} || die
	fi

	einfo "Cleaning out stray man files"
	for f in $(find "${D}" -type f -name "*.3pm*" ) ; do
		#einfo "Cleaning stray man files: ${f##*/}"
		rm -f "${f}"
	done
	find "${D}"/usr/share/man -depth -type d -empty -delete 2>/dev/null

	fixlocalpod

	for f in Change* CHANGES README* ${mydoc}; do
		[[ -s "${f}" ]] && dodoc ${f}
	done

	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
		-o \( -name '*.bs' -a -empty \) \) -delete
	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete


	for f in $(find "${D}" -type f -not -name '*\.so' ) ; do
		stat=$(file "${f}" | grep -i " text" )
		if [[ "${stat}x" != "x" ]] ; then
			sed -i -e "s:${D}:/:g" "${f}"
		fi
	done
}

perl-module_pkg_setup() {
	perlinfo
}

perl-module_pkg_preinst() {
	perlinfo
}

perl-module_pkg_postinst() { : ; }
#	einfo "Man pages are not installed for most modules now."
#	einfo "Please use perldoc instead."
#}

perl-module_pkg_prerm() { : ; }

perl-module_pkg_postrm() { : ; }

perlinfo() {
	local version
	eval `perl '-V:version'`
	PERL_VERSION=${version}

	local installsitearch
	eval `perl '-V:installsitearch'`
	SITE_ARCH=${installsitearch}

	local installsitelib
	eval `perl '-V:installsitelib'`
	SITE_LIB=${installsitelib}

	local installarchlib
	eval `perl '-V:installarchlib'`
	ARCH_LIB=${installarchlib}

	local installvendorlib
	eval `perl '-V:installvendorlib'`
	VENDOR_LIB=${installvendorlib}

	local installvendorarch
	eval `perl '-V:installvendorarch'`
	VENDOR_ARCH=${installvendorarch}
}

fixlocalpod() {
	find "${D}" -type f -name perllocal.pod -delete
	find "${D}" -depth -mindepth 1 -type d -empty -delete
}

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-02-27 14:08 [gentoo-dev] perl-module.eclass -- review Torsten Veller
@ 2009-02-28 11:28 ` Torsten Veller
  2009-03-02  3:34   ` Donnie Berkholz
  2009-03-02  6:56 ` [gentoo-dev] perl-module.eclass -- review Robin H. Johnson
  1 sibling, 1 reply; 15+ messages in thread
From: Torsten Veller @ 2009-02-28 11:28 UTC (permalink / raw
  To: gentoo-dev; +Cc: gentoo-perl

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

* Torsten Veller <ml-en@veller.net>:
> Please review the attached perl-module.eclass.
> Patch linked below.

Thanks Bo Ørsted Andresen for feedback

> Changes
> ~~~~~~~
  - use emake
  - more quoting
  - call perlinfo only once

As I've not seen any ebuild doing the replacement in line 156,
I've added a temporary ewarn. If you hits you, tell me.

> git://github.com/tove/perl-eclass.git
> http://people.gentoo.org/tove/files/perl-module.eclass.diff

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

# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v 1.112 2008/09/30 08:28:44 robbat2 Exp $
#
# Author: Seemant Kulleen <seemant@gentoo.org>

# @ECLASS: perl-module.eclass
# @MAINTAINER:
# perl@gentoo.org
# @BLURB: eclass for perl modules
# @DESCRIPTION:
# The perl-module eclass is designed to allow easier installation of perl
# modules, and their incorporation into the Gentoo Linux system.

inherit eutils base

case "${EAPI:-0}" in
	0|1)
		EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm src_compile src_install src_test src_unpack
		;;
	*)
		EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install
		;;
esac

DESCRIPTION="Based on the $ECLASS eclass"

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

[ -z "${SRC_URI}" -a -z "${MODULE_A}" ] && MODULE_A="${MY_P:-${P}}.tar.gz"
[ -z "${SRC_URI}" -a -n "${MODULE_AUTHOR}" ] && \
	SRC_URI="mirror://cpan/authors/id/${MODULE_AUTHOR:0:1}/${MODULE_AUTHOR:0:2}/${MODULE_AUTHOR}/${MODULE_SECTION}/${MODULE_A}"
[ -z "${HOMEPAGE}" ] && \
	HOMEPAGE="http://search.cpan.org/dist/${MY_PN:-${PN}}"

SRC_PREP="no"
SRC_TEST="skip"
PREFER_BUILDPL="yes"

PERL_VERSION=""
SITE_ARCH=""
SITE_LIB=""
VENDOR_LIB=""
VENDOR_ARCH=""
ARCH_LIB=""
pm_echovar=""
perlinfo_done=false

perl-module_src_unpack() {
	base_src_unpack unpack
	has "${EAPI:-0}" 0 1 && perl-module_src_prepare
}

perl-module_src_prepare() {
	if [[ -n ${PATCHES} ]] ; then
		base_src_unpack autopatch
	fi
	esvn_clean
}

perl-module_src_configure() {
	perl-module_src_prep
}

perl-module_src_prep() {
	[[ "${SRC_PREP}" = "yes" ]] && return 0
	SRC_PREP="yes"

	${perlinfo_done} || perlinfo

	export PERL_MM_USE_DEFAULT=1
	# Disable ExtUtils::AutoInstall from prompting
	export PERL_EXTUTILS_AUTOINSTALL="--skipdeps"

	if [[ "${PREFER_BUILDPL}" == "yes" && -f Build.PL ]] ; then
		einfo "Using Module::Build"
		perl Build.PL \
			--installdirs=vendor \
			--libdoc= \
			--destdir="${D}" \
			--create_packlist=0 \
			--extra_linker_flags="${LDFLAGS}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	elif [[ -f Makefile.PL ]] ; then
		einfo "Using ExtUtils::MakeMaker"
		perl Makefile.PL \
			PREFIX=/usr \
			INSTALLDIRS=vendor \
			INSTALLMAN3DIR='none' \
			DESTDIR="${D}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	fi
	if [[ ! -f Build.PL && ! -f Makefile.PL ]] ; then
		einfo "No Make or Build file detected..."
		return
	fi
}

perl-module_src_compile() {
	${perlinfo_done} || perlinfo

	has "${EAPI:-0}" 0 1 && perl-module_src_prep

	if [[ -f Build ]] ; then
		./Build build || die "compilation failed"
	elif [[ -f Makefile ]] ; then
		#emake ${mymake} OPTIMIZE="${CFLAGS}" OTHERLDFLAGS="${LDFLAGS}" || die "compilation failed"
		emake ${mymake} OTHERLDFLAGS="${LDFLAGS}" || die "compilation failed"
	fi
}

perl-module_src_test() {
	if [[ "${SRC_TEST}" == "do" ]] ; then
		${perlinfo_done} || perlinfo
		if [[ -f Build ]] ; then
			./Build test || die "test failed"
		elif [[ -f Makefile ]] ; then
			emake test || die "test failed"
		fi
	fi
}

perl-module_src_install() {
	local f
	${perlinfo_done} || perlinfo

	[[ -z ${mytargets} ]] && mytargets="pure_install"

	if [[ -f Build ]] ; then
		./Build ${mytargets} || die
	elif [[ -f Makefile ]] ; then
		emake ${myinst} ${mytargets} || die
	fi

#	einfo "Cleaning out stray man files"
	find "${D}" -type f -name "*.3pm" -delete
	find "${D}"/usr/share/man -depth -type d -empty -delete 2>/dev/null

	fixlocalpod

	for f in Change* CHANGES README* ${mydoc}; do
		[[ -s "${f}" ]] && dodoc ${f}
	done

	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
		-o \( -name '*.bs' -a -empty \) \) -delete
	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete

	find "${D}" -type f -not -name '*.so' | while read f ; do
		if file "${f}" | grep -q -i " text" ; then
if grep -q "${D}" "${f}" ; then ewarn "QA: File contains a temporary path ${f}" ; fi
			sed -i -e "s:${D}:/:g" "${f}" || die
		fi
	done
}

perl-module_pkg_setup() {
	${perlinfo_done} || perlinfo
}

perl-module_pkg_preinst() {
	${perlinfo_done} || perlinfo
}

perl-module_pkg_postinst() { : ; }
#	einfo "Man pages are not installed for most modules now."
#	einfo "Please use perldoc instead."
#}

perl-module_pkg_prerm() { : ; }

perl-module_pkg_postrm() { : ; }

perlinfo() {
	perlinfo_done=true

	local f version install{site{arch,lib},archlib,vendor{arch,lib}}
	for f in version install{site{arch,lib},archlib,vendor{arch,lib}} ; do
		eval "$(perl -V:${f} )"
	done
	PERL_VERSION=${version}
	SITE_ARCH=${installsitearch}
	SITE_LIB=${installsitelib}
	ARCH_LIB=${installarchlib}
	VENDOR_LIB=${installvendorlib}
	VENDOR_ARCH=${installvendorarch}
}

fixlocalpod() {
	find "${D}" -type f -name perllocal.pod -delete
	find "${D}" -depth -mindepth 1 -type d -empty -delete
}

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-02-28 11:28 ` [gentoo-dev] Re: perl-module.eclass -- review - 2 Torsten Veller
@ 2009-03-02  3:34   ` Donnie Berkholz
  2009-03-02  7:24     ` Torsten Veller
  0 siblings, 1 reply; 15+ messages in thread
From: Donnie Berkholz @ 2009-03-02  3:34 UTC (permalink / raw
  To: gentoo-dev, gentoo-perl

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

On 12:28 Sat 28 Feb     , Torsten Veller wrote:
> case "${EAPI:-0}" in
> 	0|1)
> 		EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm src_compile src_install src_test src_unpack
> 		;;
> 	*)
> 		EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install
> 		;;
> esac

Maybe this is just me, but I prefer to reserve '*' cases for the 
fallback when I don't understand what I'm given.

> 	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
> 		-o \( -name '*.bs' -a -empty \) \) -delete
> 	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete

I'm curious how portable the find () construct is. Do you know?

> 	find "${D}" -type f -not -name '*.so' | while read f ; do
> 		if file "${f}" | grep -q -i " text" ; then
> if grep -q "${D}" "${f}" ; then ewarn "QA: File contains a temporary path ${f}" ; fi
> 			sed -i -e "s:${D}:/:g" "${f}" || die

Could you just use dosed here?

-- 
Thanks,
Donnie

Donnie Berkholz
Developer, Gentoo Linux
Blog: http://dberkholz.wordpress.com

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] perl-module.eclass -- review
  2009-02-27 14:08 [gentoo-dev] perl-module.eclass -- review Torsten Veller
  2009-02-28 11:28 ` [gentoo-dev] Re: perl-module.eclass -- review - 2 Torsten Veller
@ 2009-03-02  6:56 ` Robin H. Johnson
  2009-03-02 12:08   ` [gentoo-dev] " Torsten Veller
  1 sibling, 1 reply; 15+ messages in thread
From: Robin H. Johnson @ 2009-03-02  6:56 UTC (permalink / raw
  To: gentoo-dev, gentoo-perl

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

On Fri, Feb 27, 2009 at 03:08:52PM +0100, Torsten Veller wrote:
> Please review the attached perl-module.eclass.
> Patch linked below.
Are you going to include the changes from Bug 254980 so that s390 can
build their stages properly?

Specifically, going to EAPI2 and adding DEPEND="dev-lang/perl[!build]"
to the eclass.

-- 
Robin Hugh Johnson
Gentoo Linux Developer & Infra Guy
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

[-- Attachment #2: Type: application/pgp-signature, Size: 330 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-02  3:34   ` Donnie Berkholz
@ 2009-03-02  7:24     ` Torsten Veller
  2009-03-02 12:01       ` Bo Ørsted Andresen
  0 siblings, 1 reply; 15+ messages in thread
From: Torsten Veller @ 2009-03-02  7:24 UTC (permalink / raw
  To: gentoo-dev

* Donnie Berkholz <dberkholz@gentoo.org>:

Thanks for your comments.

> On 12:28 Sat 28 Feb     , Torsten Veller wrote:
> > case "${EAPI:-0}" in
> > 	0|1)
> > 		EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm src_compile src_install src_test src_unpack
> > 		;;
> > 	*)
> > 		EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install
> > 		;;
> > esac
> 
> Maybe this is just me, but I prefer to reserve '*' cases for the 
> fallback when I don't understand what I'm given.

As this is a general problem we should move it out of this thread.
I also think this should have been discussed months ago.


> > 	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
> > 		-o \( -name '*.bs' -a -empty \) \) -delete
> > 	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete
> 
> I'm curious how portable the find () construct is. Do you know?

http://www.opengroup.org/onlinepubs/000095399/utilities/find.html

The brackets are no problem.
But -mindepth and -delete are not in the specs:

| The -mindepth and -maxdepth options are GNU extensions that should be
| avoided if possible.                             (from devmanual.g.o)
Well, even the portage ebuild uses -mindepth. So should I replace it?

| The `-delete' action was introduced by the BSD family of operating
| systems                                         (from `info find`)
and is also used several times in the tree.


> > 	find "${D}" -type f -not -name '*.so' | while read f ; do
> > 		if file "${f}" | grep -q -i " text" ; then
> > if grep -q "${D}" "${f}" ; then ewarn "QA: File contains a temporary path ${f}" ; fi
> > 			sed -i -e "s:${D}:/:g" "${f}" || die
> 
> Could you just use dosed here?

I guess you mean the default expression?

dosed defaults to "s:${D}::g"
$D is supposed to end with a trailing slash.
-> is the path still absolute?

Strange at least.


BTW: After I looked up the devmanual part about "find" above, I wonder:
| find "${S}" -type f | while read f ; do
| [...]
| for f in $(find "${S}" -type f) ; do
| [...]
| Warning
| In both cases, files with weird characters or spaces in their names may
| cause serious problems. 

Is there still a problem in the snippet above and is the following better
(if we assume that packages contain files with sane names)?

pushd "${D}" > /dev/null
for f in $(find . -type f -not -name '*.so' ) ; do
    if file "${f}" | grep -q -i " text" ; then
        sed -i -e "s:${D}:/:g" "${f}" || die
    fi
done
popd > /dev/null

Maybe i need some coffee.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-02  7:24     ` Torsten Veller
@ 2009-03-02 12:01       ` Bo Ørsted Andresen
  2009-03-03 11:13         ` Peter Volkov
  0 siblings, 1 reply; 15+ messages in thread
From: Bo Ørsted Andresen @ 2009-03-02 12:01 UTC (permalink / raw
  To: gentoo-dev

On Monday 02 March 2009 08:24:35 Torsten Veller wrote:
> > > 	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
> > > 		-o \( -name '*.bs' -a -empty \) \) -delete
> > > 	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete
> >
> > I'm curious how portable the find () construct is. Do you know?

It was established well over a year ago that find in the ebuild environment 
must be GNU find. Using portable find is not worth the pain.

[...]
> > Could you just use dosed here?

dosed needs to die.

[...]
> BTW: After I looked up the devmanual part about "find" above, I wonder:
> | find "${S}" -type f | while read f ; do
> | [...]
> | for f in $(find "${S}" -type f) ; do
> | [...]
> | Warning
> | In both cases, files with weird characters or spaces in their names may
> | cause serious problems.

The while loop breaks with leading or trailing spaces in the path. If the 
spaces are anywhere else in the path it works. The for loop breaks with spaces 
regardless of where they are. And you can of course come up with weird 
characters that break them both.

If you really want to do better use:

  find "${S}" -print0 | while read -rd '' f; do
      if file "${f}" ...
  done

You also really should provide proper die messages.

-- 
Bo Andresen



^ permalink raw reply	[flat|nested] 15+ messages in thread

* [gentoo-dev] Re: perl-module.eclass -- review
  2009-03-02  6:56 ` [gentoo-dev] perl-module.eclass -- review Robin H. Johnson
@ 2009-03-02 12:08   ` Torsten Veller
  2009-03-02 17:51     ` Donnie Berkholz
  2009-03-02 18:10     ` [gentoo-dev] Re: perl-module.eclass -- review Robin H. Johnson
  0 siblings, 2 replies; 15+ messages in thread
From: Torsten Veller @ 2009-03-02 12:08 UTC (permalink / raw
  To: gentoo-dev

* "Robin H. Johnson" <robbat2@gentoo.org>:
> On Fri, Feb 27, 2009 at 03:08:52PM +0100, Torsten Veller wrote:
> > Please review the attached perl-module.eclass.
> > Patch linked below.
> Are you going to include the changes from Bug 254980 so that s390 can
> build their stages properly?
> 
> Specifically, going to EAPI2 and adding DEPEND="dev-lang/perl[!build]"
> to the eclass.

Currently the eclass doesn't set any dependencies.
If it is used the ebuild has to depend on perl if needed.


I see the following options:

1) Don't add DEPEND to the eclass.
   So if a package is used for stage-building we have to raise EAPI and
   depend on dev-lang/perl[-build] in the ebuild.

   The part I don't understand in the bug above is:
   Does adding dev-lang/perl[-build] automagically reinstall
   perl during stage-building
   (here portage stops and complains).


2) Add DEPEND conditionally to the eclass.
   To give ebuilds the chance to inherit perl-module.eclass
   (and currently also perl-app.eclass) and support perl conditionally,
   we have to add another global variable to check it.

   (Checking CATEGORY and perl? probably could be added additonally)


3) Add DEPEND.
   Always depend on dev-lang/perl and 
   if EAPI=2 then depend on dev-lang/perl[-build]


Comments?



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review
  2009-03-02 12:08   ` [gentoo-dev] " Torsten Veller
@ 2009-03-02 17:51     ` Donnie Berkholz
  2009-03-02 18:13       ` Robin H. Johnson
  2009-03-02 18:10     ` [gentoo-dev] Re: perl-module.eclass -- review Robin H. Johnson
  1 sibling, 1 reply; 15+ messages in thread
From: Donnie Berkholz @ 2009-03-02 17:51 UTC (permalink / raw
  To: gentoo-dev

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

On 13:08 Mon 02 Mar     , Torsten Veller wrote:
> Currently the eclass doesn't set any dependencies. If it is used the 
> ebuild has to depend on perl if needed.
> 
> 
> I see the following options:
> 
> 1) Don't add DEPEND to the eclass.
>    So if a package is used for stage-building we have to raise EAPI and
>    depend on dev-lang/perl[-build] in the ebuild.
> 
>    The part I don't understand in the bug above is:
>    Does adding dev-lang/perl[-build] automagically reinstall
>    perl during stage-building
>    (here portage stops and complains).
> 
> 
> 2) Add DEPEND conditionally to the eclass.
>    To give ebuilds the chance to inherit perl-module.eclass
>    (and currently also perl-app.eclass) and support perl conditionally,
>    we have to add another global variable to check it.
> 
>    (Checking CATEGORY and perl? probably could be added additonally)
> 
> 
> 3) Add DEPEND.
>    Always depend on dev-lang/perl and 
>    if EAPI=2 then depend on dev-lang/perl[-build]
> 
> 
> Comments?

Having not spent a lot of time thinking about this, I'm guessing the use 
case of concern is packages that have an optional perl module always 
pulling in dev-lang/perl. This would apparently be relevant on an 
embedded system that lacked perl but required a package with an optional 
perl module. To handle that miniscule use case, I'd tend to go with a 
conditional variable (GENTOO_PERL="no"?) that defaults to "yes".

-- 
Thanks,
Donnie

Donnie Berkholz
Developer, Gentoo Linux
Blog: http://dberkholz.wordpress.com

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review
  2009-03-02 12:08   ` [gentoo-dev] " Torsten Veller
  2009-03-02 17:51     ` Donnie Berkholz
@ 2009-03-02 18:10     ` Robin H. Johnson
  1 sibling, 0 replies; 15+ messages in thread
From: Robin H. Johnson @ 2009-03-02 18:10 UTC (permalink / raw
  To: gentoo-dev

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

On Mon, Mar 02, 2009 at 01:08:15PM +0100, Torsten Veller wrote:
>    The part I don't understand in the bug above is:
>    Does adding dev-lang/perl[-build] automagically reinstall
>    perl during stage-building
>    (here portage stops and complains).
Yes. Portage will rebuild Perl with USE=-build.

-- 
Robin Hugh Johnson
Gentoo Linux Developer & Infra Guy
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

[-- Attachment #2: Type: application/pgp-signature, Size: 330 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review
  2009-03-02 17:51     ` Donnie Berkholz
@ 2009-03-02 18:13       ` Robin H. Johnson
  2009-03-05 14:47         ` [gentoo-dev] Re: perl-module.eclass -- review - 3 Torsten Veller
  0 siblings, 1 reply; 15+ messages in thread
From: Robin H. Johnson @ 2009-03-02 18:13 UTC (permalink / raw
  To: gentoo-dev

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

On Mon, Mar 02, 2009 at 09:51:07AM -0800, Donnie Berkholz wrote:
> On 13:08 Mon 02 Mar     , Torsten Veller wrote:
> > Currently the eclass doesn't set any dependencies. If it is used the 
> > ebuild has to depend on perl if needed.
> > 
> > 
> > I see the following options:
Perl modules by definition need dev-lang/perl installed to build
(Makefile.PL is written in Perl).

How many Perl modules can be installed with a Perl that is built with
USE=build?

> Having not spent a lot of time thinking about this, I'm guessing the use 
> case of concern is packages that have an optional perl module always 
> pulling in dev-lang/perl. This would apparently be relevant on an 
> embedded system that lacked perl but required a package with an optional 
> perl module. To handle that miniscule use case, I'd tend to go with a 
> conditional variable (GENTOO_PERL="no"?) that defaults to "yes".
Yes, this would be needed in any case, similar to how it's done for
stuff that had optional X dependencies.

-- 
Robin Hugh Johnson
Gentoo Linux Developer & Infra Guy
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

[-- Attachment #2: Type: application/pgp-signature, Size: 330 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-02 12:01       ` Bo Ørsted Andresen
@ 2009-03-03 11:13         ` Peter Volkov
  2009-03-03 13:09           ` Bo Ørsted Andresen
  0 siblings, 1 reply; 15+ messages in thread
From: Peter Volkov @ 2009-03-03 11:13 UTC (permalink / raw
  To: gentoo-dev

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

В Пнд, 02/03/2009 в 13:01 +0100, Bo Ørsted Andresen пишет:
> On Monday 02 March 2009 08:24:35 Torsten Veller wrote:
> > > Could you just use dosed here?
> 
> dosed needs to die.

Why?

-- 
Peter.

[-- Attachment #2: Эта часть сообщения подписана цифровой подписью --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-03 11:13         ` Peter Volkov
@ 2009-03-03 13:09           ` Bo Ørsted Andresen
  2009-03-09  1:50             ` Donnie Berkholz
  0 siblings, 1 reply; 15+ messages in thread
From: Bo Ørsted Andresen @ 2009-03-03 13:09 UTC (permalink / raw
  To: gentoo-dev

On Tuesday 03 March 2009 12:13:34 Peter Volkov wrote:
> > > > Could you just use dosed here?
> >
> > dosed needs to die.
>
> Why?

Because it's utterly pointless and exists only for legacy reasons. Few 
packages use it anyway.

-- 
Bo Andresen



^ permalink raw reply	[flat|nested] 15+ messages in thread

* [gentoo-dev] Re: perl-module.eclass -- review - 3
  2009-03-02 18:13       ` Robin H. Johnson
@ 2009-03-05 14:47         ` Torsten Veller
  0 siblings, 0 replies; 15+ messages in thread
From: Torsten Veller @ 2009-03-05 14:47 UTC (permalink / raw
  To: gentoo-dev

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

* "Robin H. Johnson" <robbat2@gentoo.org>:
> On Mon, Mar 02, 2009 at 09:51:07AM -0800, Donnie Berkholz wrote:
> > conditional variable (GENTOO_PERL="no"?) that defaults to "yes".
> Yes, this would be needed in any case, similar to how it's done for
> stuff that had optional X dependencies.

Next version. I want to commit it tomorrow.

For EAPI=2 it checks GENTOO_DEPEND_ON_PERL and depends on
dev-lang/perl[-build] unless GENTOO_DEPEND_ON_PERL is set and not "yes".

Thanks

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

# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v 1.112 2008/09/30 08:28:44 robbat2 Exp $
#
# Author: Seemant Kulleen <seemant@gentoo.org>

# @ECLASS: perl-module.eclass
# @MAINTAINER:
# perl@gentoo.org
# @BLURB: eclass for perl modules
# @DESCRIPTION:
# The perl-module eclass is designed to allow easier installation of perl
# modules, and their incorporation into the Gentoo Linux system.

inherit eutils base

case "${EAPI:-0}" in
	0|1)
		EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst pkg_prerm pkg_postrm src_compile src_install src_test src_unpack
		;;
	2)
		EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install

		case "${GENTOO_DEPEND_ON_PERL:-yes}" in
			yes)
				DEPEND="dev-lang/perl[-build]"
				RDEPEND="${DEPEND}"
				;;
		esac
		;;
esac

DESCRIPTION="Based on the $ECLASS eclass"

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

[[ -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_A}"
[[ -z "${HOMEPAGE}" ]] && \
	HOMEPAGE="http://search.cpan.org/dist/${MY_PN:-${PN}}"

SRC_PREP="no"
SRC_TEST="skip"
PREFER_BUILDPL="yes"

PERL_VERSION=""
SITE_ARCH=""
SITE_LIB=""
ARCH_LIB=""
VENDOR_ARCH=""
VENDOR_LIB=""

pm_echovar=""
perlinfo_done=false

perl-module_src_unpack() {
	base_src_unpack unpack
	has "${EAPI:-0}" 0 1 && perl-module_src_prepare
}

perl-module_src_prepare() {
	if [[ -n ${PATCHES} ]] ; then
		base_src_unpack autopatch
	fi
	esvn_clean
}

perl-module_src_configure() {
	perl-module_src_prep
}

perl-module_src_prep() {
	[[ "${SRC_PREP}" = "yes" ]] && return 0
	SRC_PREP="yes"

	${perlinfo_done} || perlinfo

	export PERL_MM_USE_DEFAULT=1
	# Disable ExtUtils::AutoInstall from prompting
	export PERL_EXTUTILS_AUTOINSTALL="--skipdeps"

	if [[ "${PREFER_BUILDPL}" == "yes" && -f Build.PL ]] ; then
		einfo "Using Module::Build"
		perl Build.PL \
			--installdirs=vendor \
			--libdoc= \
			--destdir="${D}" \
			--create_packlist=0 \
			--extra_linker_flags="${LDFLAGS}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	elif [[ -f Makefile.PL ]] ; then
		einfo "Using ExtUtils::MakeMaker"
		perl Makefile.PL \
			PREFIX=/usr \
			INSTALLDIRS=vendor \
			INSTALLMAN3DIR='none' \
			DESTDIR="${D}" \
			${myconf} \
			<<< ${pm_echovar} \
				|| die "Unable to build! (are you using USE=\"build\"?)"
	fi
	if [[ ! -f Build.PL && ! -f Makefile.PL ]] ; then
		einfo "No Make or Build file detected..."
		return
	fi
}

perl-module_src_compile() {
	${perlinfo_done} || perlinfo

	has "${EAPI:-0}" 0 1 && perl-module_src_prep

	if [[ -f Build ]] ; then
		./Build build \
			|| die "compilation failed"
	elif [[ -f Makefile ]] ; then
		emake \
			OTHERLDFLAGS="${LDFLAGS}" \
			${mymake} \
				|| die "compilation failed"
#			OPTIMIZE="${CFLAGS}" \
	fi
}

perl-module_src_test() {
	if [[ "${SRC_TEST}" == "do" ]] ; then
		${perlinfo_done} || perlinfo
		if [[ -f Build ]] ; then
			./Build test || die "test failed"
		elif [[ -f Makefile ]] ; then
			emake test || die "test failed"
		fi
	fi
}

perl-module_src_install() {
	local f
	${perlinfo_done} || perlinfo

	[[ -z ${mytargets} ]] && mytargets="pure_install"

	if [[ -f Build ]] ; then
		./Build ${mytargets} \
			|| die "./Build ${mytargets} failed"
	elif [[ -f Makefile ]] ; then
		emake ${myinst} ${mytargets} \
			|| die "emake ${myinst} ${mytargets} failed"
	fi

#	einfo "Cleaning out stray man files"
	find "${D}" -type f -name "*.3pm" -delete
	find "${D}"/usr/share/man -depth -type d -empty -delete 2>/dev/null

	fixlocalpod

	for f in Change* CHANGES README* ${mydoc}; do
		[[ -s "${f}" ]] && dodoc ${f}
	done

	find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist \
		-o \( -name '*.bs' -a -empty \) \) -delete
	find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete

	find "${D}" -type f -not -name '*.so' -print0 | while read -rd '' f ; do
		if file "${f}" | grep -q -i " text" ; then
if grep -q "${D}" "${f}" ; then ewarn "QA: File contains a temporary path ${f}" ;fi
			sed -i -e "s:${D}:/:g" "${f}"
		fi
	done
}

perl-module_pkg_setup() {
	${perlinfo_done} || perlinfo
}

perl-module_pkg_preinst() {
	${perlinfo_done} || perlinfo
}

perl-module_pkg_postinst() { : ; }
#	einfo "Man pages are not installed for most modules now."
#	einfo "Please use perldoc instead."
#}

perl-module_pkg_prerm() { : ; }

perl-module_pkg_postrm() { : ; }

perlinfo() {
	perlinfo_done=true

	local f version install{site{arch,lib},archlib,vendor{arch,lib}}
	for f in version install{site{arch,lib},archlib,vendor{arch,lib}} ; do
		eval "$(perl -V:${f} )"
	done
	PERL_VERSION=${version}
	SITE_ARCH=${installsitearch}
	SITE_LIB=${installsitelib}
	ARCH_LIB=${installarchlib}
	VENDOR_LIB=${installvendorlib}
	VENDOR_ARCH=${installvendorarch}
}

fixlocalpod() {
	find "${D}" -type f -name perllocal.pod -delete
	find "${D}" -depth -mindepth 1 -type d -empty -delete
}

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-03 13:09           ` Bo Ørsted Andresen
@ 2009-03-09  1:50             ` Donnie Berkholz
  2009-03-09  8:02               ` Rémi Cardona
  0 siblings, 1 reply; 15+ messages in thread
From: Donnie Berkholz @ 2009-03-09  1:50 UTC (permalink / raw
  To: gentoo-dev

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

On 14:09 Tue 03 Mar     , Bo Ørsted Andresen wrote:
> On Tuesday 03 March 2009 12:13:34 Peter Volkov wrote:
> > > > > Could you just use dosed here?
> > >
> > > dosed needs to die.
> >
> > Why?
> 
> Because it's utterly pointless and exists only for legacy reasons. Few 
> packages use it anyway.

I did a quick check to look at the data supporting your point and found 
120 packages using it. I guess that qualifies as "few" when compared to 
the whole tree.

-- 
Thanks,
Donnie

Donnie Berkholz
Developer, Gentoo Linux
Blog: http://dberkholz.wordpress.com

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [gentoo-dev] Re: perl-module.eclass -- review - 2
  2009-03-09  1:50             ` Donnie Berkholz
@ 2009-03-09  8:02               ` Rémi Cardona
  0 siblings, 0 replies; 15+ messages in thread
From: Rémi Cardona @ 2009-03-09  8:02 UTC (permalink / raw
  To: gentoo-dev

Le 09/03/2009 02:50, Donnie Berkholz a écrit :
> On 14:09 Tue 03 Mar     , Bo Ørsted Andresen wrote:
>> On Tuesday 03 March 2009 12:13:34 Peter Volkov wrote:
>>>>>> Could you just use dosed here?
>>>> dosed needs to die.
>>> Why?
>> Because it's utterly pointless and exists only for legacy reasons. Few
>> packages use it anyway.
>
> I did a quick check to look at the data supporting your point and found
> 120 packages using it. I guess that qualifies as "few" when compared to
> the whole tree.

Doing a bit of a cross thread thing here:

How about getting rid of dosed in EAPI=3 ? Sounds like the perfect time 
to do it.

Rémi



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2009-03-09  8:02 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-27 14:08 [gentoo-dev] perl-module.eclass -- review Torsten Veller
2009-02-28 11:28 ` [gentoo-dev] Re: perl-module.eclass -- review - 2 Torsten Veller
2009-03-02  3:34   ` Donnie Berkholz
2009-03-02  7:24     ` Torsten Veller
2009-03-02 12:01       ` Bo Ørsted Andresen
2009-03-03 11:13         ` Peter Volkov
2009-03-03 13:09           ` Bo Ørsted Andresen
2009-03-09  1:50             ` Donnie Berkholz
2009-03-09  8:02               ` Rémi Cardona
2009-03-02  6:56 ` [gentoo-dev] perl-module.eclass -- review Robin H. Johnson
2009-03-02 12:08   ` [gentoo-dev] " Torsten Veller
2009-03-02 17:51     ` Donnie Berkholz
2009-03-02 18:13       ` Robin H. Johnson
2009-03-05 14:47         ` [gentoo-dev] Re: perl-module.eclass -- review - 3 Torsten Veller
2009-03-02 18:10     ` [gentoo-dev] Re: perl-module.eclass -- review Robin H. Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox