# Turn of extended glob matching so that g++ doesn't get incorrectly matched.
shopt -u extglob
-QA_INTERCEPTORS="javac java-config python python-config perl grep egrep fgrep sed gcc g++ cc bash awk nawk gawk pkg-config"
+if [[ ${EBUILD_PHASE} == depend ]] ; then
+ QA_INTERCEPTORS="awk bash cc egrep fgrep g++
+ gawk gcc grep javac java-config nawk perl
+ pkg-config python python-config sed"
+elif [[ ${EBUILD_PHASE} == clean* ]] ; then
+ unset QA_INTERCEPTORS
+else
+ QA_INTERCEPTORS="autoconf automake aclocal libtoolize"
+fi
# level the QA interceptors if we're in depend
-if hasq "depend" "${EBUILD_SH_ARGS}"; then
+if [[ -n ${QA_INTERCEPTORS} ]] ; then
for BIN in ${QA_INTERCEPTORS}; do
BIN_PATH=$(type -Pf ${BIN})
if [ "$?" != "0" ]; then
else
BODY="${BIN_PATH} \"\$@\"; return \$?"
fi
- FUNC_SRC="${BIN}() {
- if [ \$ECLASS_DEPTH -gt 0 ]; then
- eqawarn \"QA Notice: '${BIN}' called in global scope: eclass \${ECLASS}\"
+ if [[ ${EBUILD_PHASE} == depend ]] ; then
+ FUNC_SRC="${BIN}() {
+ if [ \$ECLASS_DEPTH -gt 0 ]; then
+ eqawarn \"QA Notice: '${BIN}' called in global scope: eclass \${ECLASS}\"
+ else
+ eqawarn \"QA Notice: '${BIN}' called in global scope: \${CATEGORY}/\${PF}\"
+ fi
+ ${BODY}
+ }"
+ elif hasq ${BIN} autoconf automake aclocal libtoolize ; then
+ FUNC_SRC="${BIN}() {
+ eqawarn \"QA Notice: '${BIN}' called by \${FUNCNAME[1]}: \${CATEGORY}/\${PF}\"
+ eqawarn \"Use autotools.eclass instead of calling '${BIN}' directly.\"
+ ${BODY}
+ }"
else
- eqawarn \"QA Notice: '${BIN}' called in global scope: \${CATEGORY}/\${PF}\"
+ FUNC_SRC="${BIN}() {
+ eqawarn \"QA Notice: '${BIN}' called by \${FUNCNAME[1]}: \${CATEGORY}/\${PF}\"
+ ${BODY}
+ }"
fi
- ${BODY}
- }";
eval "$FUNC_SRC" || echo "error creating QA interceptor ${BIN}" >&2
done
unset BIN_PATH BIN BODY FUNC_SRC
#a reasonable default for $S
[[ -z ${S} ]] && export S=${WORKDIR}/${P}
-#wipe the interceptors. we don't want saved.
-if hasq "depend" "${EBUILD_SH_ARGS}"; then
- unset -f $QA_INTERCEPTORS
- unset QA_INTERCEPTORS
-fi
-
#some users have $TMP/$TMPDIR to a custom dir in their home ...
#this will cause sandbox errors with some ./configure
#scripts, so set it to $T.
debug-print-section inherit EXPORT_FUNCTIONS newdepend newrdepend \
newpdepend do_newdepend remove_path_entry killparent \
save_ebuild_env filter_readonly_variables preprocess_ebuild_env \
- source_all_bashrcs ebuild_phase ebuild_phase_with_hooks
+ source_all_bashrcs ebuild_phase ebuild_phase_with_hooks \
+ ${QA_INTERCEPTORS}
# portage config variables and variables set directly by portage
unset BAD BRACKET BUILD_PREFIX COLS \
"ebuild.majorsyn":"This ebuild has a major syntax error that may cause the ebuild to fail partially or fully",
"ebuild.minorsyn":"This ebuild has a minor syntax error that contravenes gentoo coding style",
"ebuild.badheader":"This ebuild has a malformed header",
- "ebuild.autotools":"Ebuild calls autotools directly instead of using autotools.eclass",
"metadata.missing":"Missing metadata.xml files",
"metadata.bad":"Bad metadata.xml files",
"virtual.versioned":"PROVIDE contains virtuals with versions",
"ebuild.notadded",
"ebuild.nostable",
"ebuild.allmasked",
-"ebuild.autotools",
"ebuild.nesteddie",
"desktop.invalid",
"digest.assumed",
elif self.method_re.match(line):
self.check_next_line = True
-class Autotools(LineCheck):
- """Check for direct calls to autotools"""
- repoman_check_name = 'ebuild.autotools'
- re = re.compile(r'^[^#]*([^e]|^)(autoconf|automake|aclocal|libtoolize)')
-
- def check(self, num, line):
- """Run the check on line and return error if there is one"""
- m = self.re.match(line)
- if m is not None:
- return ("Direct calls to '%s'" % m.group(2)) + \
- " instead of using autotools.eclass on line: %d"
-
class EbuildQuotedA(LineCheck):
"""Ensure ebuilds have no quoting around ${A}"""
if match:
return "Quoted \"${A}\" on line: %d"
-_constant_checks = tuple((c() for c in (Autotools,
+_constant_checks = tuple((c() for c in (
EbuildQuote, EbuildUselessDodoc, EbuildUselessCdS,
EbuildNestedDie, EbuildQuotedA)))