From 8d9b2b281577717bb223f50b24f57ed4eaebd56c Mon Sep 17 00:00:00 2001 From: Kent Fredric Date: Mon, 11 Apr 2016 21:58:36 +1200 Subject: perl-functions.eclass: Add a new (not in ::gentoo) perl_check_eapi function --- eclass/perl-functions.eclass | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/eclass/perl-functions.eclass b/eclass/perl-functions.eclass index b189ff32c..21fe60592 100644 --- a/eclass/perl-functions.eclass +++ b/eclass/perl-functions.eclass @@ -686,3 +686,57 @@ perl_domodule() { insinto "/${target#/}" doins "${doins_opts[@]}" "${files[@]}" } + +# @FUNCTION: perl_check_eapi +# @DESCRIPTION: +# Checks a blacklist of known-suspect eclass variables which can be accidentally set +# by maintainers, or may be accidentally left residual after an EAPI change. +# +# Dies if any of the suspect fields are found, and tell the user that the ebuild in question +# is broken and needs a fix. +# +# There's a workaround, but you'll have to read the code for it. +perl_check_eapi() { + local errored value; + local suspect_vars=(); + + # Secret sauce to inhibit this check + [[ -n "${_EAPI_PERL_MODULE_PERMISSIVE}" ]] && return; + + if [[ ${EAPI:-0} == 5 ]]; then + suspect_vars=( DIST_TEST DIST_VERSION DIST_NAME DIST_AUTHOR DIST_A_EXT DIST_A DIST_SECTION DIST_EXAMPLES ); + else + suspect_vars=( MY_PN MY_PV MODULE_VERSION MY_P MODULE_A MODULE_A_EXT MODULE_AUTHOR MODULE_NAME SRC_TEST MODULE_SECTION ); + fi + for i in "${suspect_vars[@]}"; do + [[ -v $i ]] || continue; + + # Add heading once and only once + if [[ ${errored:-0} == 0 ]]; then + if [[ -n "${I_KNOW_WHAT_I_AM_DOING}" ]]; then + elog "perl-module.eclass: Suspicious EAPI${EAPI:-0} eclass variables found."; + else + eerror "perl-module.eclass: Suspicious EAPI${EAPI:-0} eclass variables found."; + fi + fi + + errored=1 + # Print ENV name/value pair + if [[ -n "${I_KNOW_WHAT_I_AM_DOING}" ]]; then + elog " ${i}=\"${!i}\""; + else + eerror " ${i}=\"${!i}\""; + 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 ebuild/env contains eclass variables that are known invalid/legacy and indicate author oversight." + die "Please file a bug for this ebuild as per above details." +} -- cgit v1.2.3-65-gdbad