summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-06-16 10:47:30 +0000
committerZac Medico <zmedico@gentoo.org>2008-06-16 10:47:30 +0000
commitf8a3d769f483aa6a43b2710d6ac3500ec65d3aed (patch)
treee4630a4ffbdc343ca7ab3f788e0e0a88d8864209
parent40f6cc84c8300d048a769e16ceb0d5a4a048d525 (diff)
downloadportage-f8a3d769f483aa6a43b2710d6ac3500ec65d3aed.tar.gz
portage-f8a3d769f483aa6a43b2710d6ac3500ec65d3aed.tar.bz2
portage-f8a3d769f483aa6a43b2710d6ac3500ec65d3aed.zip
Add two new build log qa checks, suggested by Diego Pettenò:
* Detect automake "maintainer mode". See http://www.gentoo.org/proj/en/qa/autofailure.xml for more information. * Detect "Unrecognized options" messages from configure scripts. (trunk r10652) svn path=/main/branches/2.1.2/; revision=10663
-rw-r--r--pym/portage.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/pym/portage.py b/pym/portage.py
index fda8a1ec4..fbd997692 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -689,11 +689,14 @@ def elog_process(cpv, mysettings):
pass
def _eerror(settings, lines):
+ _elog("eerror", settings, lines)
+
+def _elog(func, settings, lines):
if not lines:
return
cmd = "source '%s/isolated-functions.sh' ; " % PORTAGE_BIN_PATH
for line in lines:
- cmd += "eerror %s ; " % _shell_quote(line)
+ cmd += "%s %s ; " % (func, _shell_quote(line))
portage_exec.spawn(["bash", "-c", cmd],
env=settings.environ())
@@ -4193,6 +4196,55 @@ def spawnebuild(mydo,actionmap,mysettings,debug,alwaysdep=0,logfile=None):
filemode=060, filemask=0)
if phase_retval == os.EX_OK:
+ if mydo == "install" and logfile:
+ try:
+ f = open(logfile, 'rb')
+ except EnvironmentError:
+ pass
+ else:
+ am_maintainer_mode = []
+ configure_opts_warn = []
+ configure_opts_warn_re = re.compile(
+ r'^configure: WARNING: Unrecognized options: .*')
+ am_maintainer_mode_re = re.compile(r'.*/missing --run .*')
+ try:
+ for line in f:
+ if am_maintainer_mode_re.search(line) is not None:
+ am_maintainer_mode.append(line.rstrip("\n"))
+ if configure_opts_warn_re.match(line) is not None:
+ configure_opts_warn.append(line.rstrip("\n"))
+ finally:
+ f.close()
+
+ def _eqawarn(lines):
+ _elog("eqawarn", mysettings, lines)
+ from textwrap import wrap
+ wrap_width = 70
+
+ if am_maintainer_mode:
+ msg = ["QA Notice: Automake \"maintainer mode\" detected:"]
+ msg.append("")
+ msg.extend("\t" + line for line in am_maintainer_mode)
+ msg.append("")
+ msg.extend(wrap(
+ "If you patch Makefile.am, " + \
+ "configure.in, or configure.ac then you " + \
+ "should use autotools.eclass and " + \
+ "eautomake or eautoreconf. Exceptions " + \
+ "are limited to system packages " + \
+ "for which it is impossible to run " + \
+ "autotools during stage building. " + \
+ "See http://www.gentoo.org/p" + \
+ "roj/en/qa/autofailure.xml for more information.",
+ wrap_width))
+ _eqawarn(msg)
+
+ if configure_opts_warn:
+ msg = ["QA Notice: Unrecognized configure options:"]
+ msg.append("")
+ msg.extend("\t" + line for line in configure_opts_warn)
+ _eqawarn(msg)
+
if mydo == "install":
# User and group bits that match the "portage" user or group are
# automatically mapped to PORTAGE_INST_UID and PORTAGE_INST_GID if