dilfridge 15/03/15 17:23:09 Modified: ChangeLog perl-module.eclass Log: Detect dangerous environment variables, bug 543042; support Module::Build::Tiny directly, bug 495044
Revision Changes Path 1.1565 eclass/ChangeLog file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?rev=1.1565&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?rev=1.1565&content-type=text/plain diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?r1=1.1564&r2=1.1565 Index: ChangeLog =================================================================== RCS file: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v retrieving revision 1.1564 retrieving revision 1.1565 diff -u -r1.1564 -r1.1565 --- ChangeLog 15 Mar 2015 17:03:27 -0000 1.1564 +++ ChangeLog 15 Mar 2015 17:23:09 -0000 1.1565 @@ -1,6 +1,10 @@ # ChangeLog for eclass directory # Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1564 2015/03/15 17:03:27 slyfox Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1565 2015/03/15 17:23:09 dilfridge Exp $ + + 15 Mar 2015; Andreas K. Huettel <[email protected]> perl-module.eclass: + Detect dangerous environment variables, bug 543042; support + Module::Build::Tiny directly, bug 495044 15 Mar 2015; Sergei Trofimovich <[email protected]> haskell-cabal.eclass: Respect CFLAGS. New syntax for revisions 1.164 eclass/perl-module.eclass file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/perl-module.eclass?rev=1.164&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/perl-module.eclass?rev=1.164&content-type=text/plain diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/perl-module.eclass?r1=1.163&r2=1.164 Index: perl-module.eclass =================================================================== RCS file: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v retrieving revision 1.163 retrieving revision 1.164 diff -u -r1.163 -r1.164 --- perl-module.eclass 14 Mar 2015 14:32:10 -0000 1.163 +++ perl-module.eclass 15 Mar 2015 17:23:09 -0000 1.164 @@ -1,6 +1,6 @@ # Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v 1.163 2015/03/14 14:32:10 dilfridge Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/perl-module.eclass,v 1.164 2015/03/15 17:23:09 dilfridge Exp $ # @ECLASS: perl-module.eclass # @MAINTAINER: @@ -114,6 +114,8 @@ [[ ${SRC_PREP} = yes ]] && return 0 SRC_PREP="yes" + perl_check_env + perl_set_version [[ -z ${pm_echovar} ]] && export PERL_MM_USE_DEFAULT=1 @@ -127,13 +129,25 @@ 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; + if grep -q '\(use\|require\)\s*Module::Build::Tiny' Build.PL ; then + einfo "Using Module::Build::Tiny" + if [[ ${DEPEND} != *dev-perl/Module-Build-Tiny* && ${PN} != Module-Build-Tiny ]]; then + eqawarn "QA Notice: The ebuild uses Module::Build::Tiny but doesn't depend on it." + eqawarn " Add dev-perl/Module-Build-Tiny to DEPEND!" + if [[ -n ${PERLQAFATAL} ]]; then + eerror "Bailing out due to PERLQAFATAL=1"; + die + fi + fi + else + 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 fi set -- \ @@ -256,23 +270,22 @@ local f - if [[ -z ${mytargets} ]] ; then + if [[ -f Build ]]; then + mytargets="${mytargets:-install}" + mbparams="${mbparams:---pure}" + einfo "./Build ${mytargets} ${mbparams}" + ./Build ${mytargets} ${mbparams} \ + || die "./Build ${mytargets} ${mbparams} failed" + elif [[ -f Makefile ]]; then case "${CATEGORY}" in dev-perl|perl-core) mytargets="pure_install" ;; *) mytargets="install" ;; 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 + if [[ $(declare -p myinst 2>&-) != "declare -a myinst="* ]]; then + local myinst_local=(${myinst}) + else + local myinst_local=("${myinst[@]}") + fi emake "${myinst_local[@]}" ${mytargets} \ || die "emake ${myinst_local[@]} ${mytargets} failed" fi @@ -548,3 +561,53 @@ popd > /dev/null fi } + +# @FUNCTION: perl_check_env +# @USAGE: perl_check_env +# @DESCRIPTION: +# Checks a blacklist of known-suspect ENV values that can be accidentally set by users +# doing personal perl work, which may accidentally leak into portage and break the +# system perl installaton. +# Dies if any of the suspect fields are found, and tell the user what needs to be unset. +# There's a workaround, but you'll have to read the code for it. +perl_check_env() { + local errored value; + + for i in PERL_MM_OPT PERL5LIB PERL5OPT PERL_MB_OPT PERL_CORE PERLPREFIX; do + # Next unless match + [ -v $i ] || continue; + + # Warn only once, and warn only when one of the bad values are set. + # record failure here. + if [ ${errored:-0} == 0 ]; then + if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then + elog "perl-module.eclass: Suspicious environment values found."; + else + eerror "perl-module.eclass: Suspicious environment values found."; + fi + fi + errored=1 + + # Read ENV Value + eval "value=\$$i"; + + # Print ENV name/value pair + if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then + elog " $i=\"$value\""; + else + eerror " $i=\"$value\""; + fi + done + + # Return if there were no failures + [ ${errored:-0} == 0 ] && return; + + # Return if user knows what they're doing + if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then + elog "Continuing anyway, seems you know what you're doing." + return + fi + + eerror "Your environment settings may lead to undefined behavior and/or build failures." + die "Please fix your environment ( ~/.bashrc, package.env, ... ), see above for details." +}
