- Remove ebuild.autotools repoman check since it produces lots
authorZac Medico <zmedico@gentoo.org>
Wed, 30 Jan 2008 22:49:47 +0000 (22:49 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 30 Jan 2008 22:49:47 +0000 (22:49 -0000)
  of false positives (bug #207104) and its hard to parse bash

- Use QA_INTERCEPTORS in ebuild.sh to implement a runtime
  'QA Notice' when autotools is called directly

svn path=/main/trunk/; revision=9235

bin/ebuild.sh
bin/isolated-functions.sh
pym/repoman/checks.py

index 28ba561c4fae6f8b594aacde046a874b6ef39780..8bcb3dd2b5abd76d1ae49a38dcd45cd0b341c4d1 100755 (executable)
@@ -1579,9 +1579,17 @@ unset E_IUSE E_DEPEND E_RDEPEND E_PDEPEND
 # 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
@@ -1589,14 +1597,27 @@ if hasq "depend" "${EBUILD_SH_ARGS}"; 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
@@ -1720,12 +1741,6 @@ fi
 #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.
index 7e7e710e05d958c23d7f6644815cd04f9151a155..5750ce8ddd691b7b227db40d6b5b49e5db1c02b7 100755 (executable)
@@ -454,7 +454,8 @@ save_ebuild_env() {
                        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 \
index 26910198163bfcacafb0911eb25215aac76af7d4..462199722db04c43c87f902c167d635b103b544c 100644 (file)
@@ -185,19 +185,6 @@ class EbuildUselessCdS(LineCheck):
                        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"""
-               autotools_match = self.re.match(line)
-               if autotools_match is not None:
-                       return ("Direct calls to '%s'" % autotools_match.group(2)) + \
-                               " instead of using autotools.eclass on line: %d"
-
-
 class EbuildQuotedA(LineCheck):
        """Ensure ebuilds have no quoting around ${A}"""
 
@@ -209,7 +196,7 @@ class EbuildQuotedA(LineCheck):
                if match:
                        return "Quoted \"${A}\" on line: %d"
 
-_constant_checks = tuple((c() for c in (Autotools,
+_constant_checks = tuple((c() for c in (
        EbuildWhitespace, EbuildQuote,
        EbuildAssignment, EbuildUselessDodoc,
        EbuildUselessCdS, EbuildNestedDie, EbuildQuotedA)))