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."
+}




Reply via email to