[pacman-dev] [PATCH] Have configure set pactest options that it knows.

Jeremy Heiner scalaprotractor at gmail.com
Mon Dec 23 10:05:32 EST 2013


This patch is not ready for accepting into the repository.

It does not work for VPATH builds (because the paths to all the .py
tests are seen as relative to $(builddir)). Dave is working on a fix
for this VPATH issue, so a real version of this patch must wait to
incorporate his commit. This patch works fine for in-$(srcdir) builds.

The purpose of posting it is to follow up Saturday's conversation.
I think it implements all of Allan's suggestions (if I understood
correctly). The real commit message would be something like:

SCRIPTLET_SHELL and LDCONFIG can be set via args to configure, and up
'till now those options were passed to pactest by Makefile.am as
command-line args. That works fine for 'make check', but required
repeated specification when running pactest manually. This patch makes
pactest a configured file so it has direct access to those options and
they no longer need to be specified (by Makefile.am nor by hand).

Also the default for the pactest '-p' arg is changed to be the pacman
that the make builds. The '-p' arg is still available, but it should
now be very rare to have to use it when calling pactest manually.
---
 Makefile.am               |   4 --
 configure.ac              |   1 +
 test/pacman/.gitignore    |   1 +
 test/pacman/pactest.py    | 125 --------------------------------------------
 test/pacman/pactest.py.in | 128 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 130 insertions(+), 129 deletions(-)
 delete mode 100755 test/pacman/pactest.py
 create mode 100644 test/pacman/pactest.py.in

diff --git a/Makefile.am b/Makefile.am
index 4d5adae..9689992 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,10 +41,6 @@ LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
 PY_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
 								 $(top_srcdir)/build-aux/tap-driver.sh
 PY_LOG_COMPILER = $(top_srcdir)/test/pacman/pactest.py
-AM_PY_LOG_FLAGS = \
-		--scriptlet-shell $(SCRIPTLET_SHELL) \
-		--ldconfig $(LDCONFIG) \
-		-p $(top_builddir)/src/pacman/pacman
 
 # create the pacman DB and cache directories upon install
 install-data-local:
diff --git a/configure.ac b/configure.ac
index cfcc8d1..292260a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -507,6 +507,7 @@ test/util/Makefile
 contrib/Makefile
 Makefile
 ])
+AC_CONFIG_FILES([test/pacman/pactest.py],[chmod +x test/pacman/pactest.py])
 AC_OUTPUT
 
 echo "
diff --git a/test/pacman/.gitignore b/test/pacman/.gitignore
index 0d20b64..39fa72b 100644
--- a/test/pacman/.gitignore
+++ b/test/pacman/.gitignore
@@ -1 +1,2 @@
 *.pyc
+pactest.py
diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py
deleted file mode 100755
index e21cde7..0000000
--- a/test/pacman/pactest.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#! /usr/bin/python2
-#
-#  pactest : run automated testing on the pacman binary
-#
-#  Copyright (c) 2006 by Aurelien Foret <orelien at chez.com>
-#  Copyright (c) 2006-2013 Pacman Development Team <pacman-dev at archlinux.org>
-#
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 2 of the License, or
-#  (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import glob
-from optparse import OptionParser
-import os
-import shutil
-import sys
-import tempfile
-
-import pmenv
-import tap
-import util
-
-__author__ = "Aurelien FORET"
-__version__ = "0.4"
-
-def resolve_binary_path(option, opt_str, value, parser):
-    setattr(parser.values, option.dest, os.path.abspath(value))
-
-def create_parser():
-    usage = "usage: %prog [options] <path/to/testfile.py>..."
-    description = "Runs automated tests on the pacman binary. Tests are " \
-            "described using an easy python syntax, and several can be " \
-            "ran at once."
-    parser = OptionParser(usage = usage, description = description)
-
-    parser.add_option("-v", "--verbose", action = "count",
-                      dest = "verbose", default = 0,
-                      help = "print verbose output")
-    parser.add_option("-d", "--debug", type = "int",
-                      dest = "debug", default = 0,
-                      help = "set debug level for pacman")
-    parser.add_option("-p", "--pacman", action = "callback",
-                      callback = resolve_binary_path, type = "string",
-                      dest = "bin", default = "pacman",
-                      help = "specify location of the pacman binary")
-    parser.add_option("--keep-root", action = "store_true",
-                      dest = "keeproot", default = False,
-                      help = "don't remove the generated pacman root filesystem")
-    parser.add_option("--nolog", action = "store_true",
-                      dest = "nolog", default = False,
-                      help = "do not log pacman messages")
-    parser.add_option("--gdb", action = "store_true",
-                      dest = "gdb", default = False,
-                      help = "use gdb while calling pacman")
-    parser.add_option("--valgrind", action = "store_true",
-                      dest = "valgrind", default = False,
-                      help = "use valgrind while calling pacman")
-    parser.add_option("--manual-confirm", action = "store_true",
-                      dest = "manualconfirm", default = False,
-                      help = "do not use --noconfirm for pacman calls")
-    parser.add_option("--scriptlet-shell", type = "string",
-                      dest = "scriptletshell", default = "/bin/sh",
-                      help = "specify path to shell used for install scriptlets")
-    parser.add_option("--ldconfig", type = "string",
-                      dest = "ldconfig", default = "/sbin/ldconfig",
-                      help = "specify path to ldconfig")
-    return parser
-
-
-if __name__ == "__main__":
-
-    if sys.hexversion < 0x02070000:
-        # bailing now with clear message better than mid-run with unhelpful one
-        tap.bail("Python versions before 2.7 are not supported.")
-        sys.exit(1)
-
-    # instantiate env and parser objects
-    root_path = tempfile.mkdtemp()
-    env = pmenv.pmenv(root=root_path)
-    opt_parser = create_parser()
-    (opts, args) = opt_parser.parse_args()
-
-    # add parsed options to env object
-    util.verbose = opts.verbose
-    env.pacman["debug"] = opts.debug
-    env.pacman["bin"] = opts.bin
-    env.pacman["nolog"] = opts.nolog
-    env.pacman["gdb"] = opts.gdb
-    env.pacman["valgrind"] = opts.valgrind
-    env.pacman["manual-confirm"] = opts.manualconfirm
-    env.pacman["scriptlet-shell"] = opts.scriptletshell
-    env.pacman["ldconfig"] = opts.ldconfig
-
-    opts.testcases = []
-    for path in args:
-        opts.testcases += glob.glob(path)
-    if opts.testcases is None or len(opts.testcases) == 0:
-        tap.bail("no tests defined, nothing to do")
-        os.rmdir(root_path)
-        sys.exit(2)
-
-    for i in opts.testcases:
-        env.addtest(i)
-
-    # run tests
-    env.run()
-
-    if not opts.keeproot:
-        shutil.rmtree(root_path)
-    else:
-        tap.diag("pacman testing root saved: %s" % root_path)
-
-    if env.failed > 0:
-        sys.exit(1)
-
-# vim: set ts=4 sw=4 et:
diff --git a/test/pacman/pactest.py.in b/test/pacman/pactest.py.in
new file mode 100644
index 0000000..0d9e1f7
--- /dev/null
+++ b/test/pacman/pactest.py.in
@@ -0,0 +1,128 @@
+#! /usr/bin/python2
+#
+#  @configure_input@
+#
+#  pactest : run automated testing on the pacman binary
+#
+#  Copyright (c) 2006 by Aurelien Foret <orelien at chez.com>
+#  Copyright (c) 2006-2013 Pacman Development Team <pacman-dev at archlinux.org>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import glob
+from optparse import OptionParser
+import os
+import shutil
+import sys
+import tempfile
+
+BUILDDIR = os.path.dirname(os.path.realpath(__file__))
+SRCDIR = os.path.realpath(os.path.join(BUILDDIR, "@srcdir@"))
+if BUILDDIR != SRCDIR: sys.path.insert(0, SRCDIR)
+TOP_BUILDDIR = os.path.realpath(os.path.join(BUILDDIR, "@top_builddir@"))
+BUILT_EXE = os.path.realpath(os.path.join(TOP_BUILDDIR, "src/pacman/pacman"))
+
+import pmenv
+import tap
+import util
+
+__author__ = "Aurelien FORET"
+__version__ = "0.4"
+
+def resolve_binary_path(option, opt_str, value, parser):
+    setattr(parser.values, option.dest, os.path.abspath(value))
+
+def create_parser():
+    usage = "usage: %prog [options] <path/to/testfile.py>..."
+    description = "Runs automated tests on the pacman binary. Tests are " \
+            "described using an easy python syntax, and several can be " \
+            "ran at once."
+    parser = OptionParser(usage = usage, description = description)
+
+    parser.add_option("-v", "--verbose", action = "count",
+                      dest = "verbose", default = 0,
+                      help = "print verbose output")
+    parser.add_option("-d", "--debug", type = "int",
+                      dest = "debug", default = 0,
+                      help = "set debug level for pacman")
+    parser.add_option("-p", "--pacman", action = "callback",
+                      callback = resolve_binary_path, type = "string",
+                      dest = "bin", default = BUILT_EXE,
+                      help = "specify location of the pacman binary")
+    parser.add_option("--keep-root", action = "store_true",
+                      dest = "keeproot", default = False,
+                      help = "don't remove the generated pacman root filesystem")
+    parser.add_option("--nolog", action = "store_true",
+                      dest = "nolog", default = False,
+                      help = "do not log pacman messages")
+    parser.add_option("--gdb", action = "store_true",
+                      dest = "gdb", default = False,
+                      help = "use gdb while calling pacman")
+    parser.add_option("--valgrind", action = "store_true",
+                      dest = "valgrind", default = False,
+                      help = "use valgrind while calling pacman")
+    parser.add_option("--manual-confirm", action = "store_true",
+                      dest = "manualconfirm", default = False,
+                      help = "do not use --noconfirm for pacman calls")
+    return parser
+
+
+if __name__ == "__main__":
+
+    if sys.hexversion < 0x02070000:
+        # bailing now with clear message better than mid-run with unhelpful one
+        tap.bail("Python versions before 2.7 are not supported.")
+        sys.exit(1)
+
+    # instantiate env and parser objects
+    root_path = tempfile.mkdtemp()
+    env = pmenv.pmenv(root=root_path)
+    opt_parser = create_parser()
+    (opts, args) = opt_parser.parse_args()
+
+    # add parsed options to env object
+    util.verbose = opts.verbose
+    env.pacman["debug"] = opts.debug
+    env.pacman["bin"] = opts.bin
+    env.pacman["nolog"] = opts.nolog
+    env.pacman["gdb"] = opts.gdb
+    env.pacman["valgrind"] = opts.valgrind
+    env.pacman["manual-confirm"] = opts.manualconfirm
+    # and add configured options
+    env.pacman["scriptlet-shell"] = "@SCRIPTLET_SHELL@"
+    env.pacman["ldconfig"] = "@LDCONFIG@"
+
+    opts.testcases = []
+    for path in args:
+        opts.testcases += glob.glob(path)
+    if opts.testcases is None or len(opts.testcases) == 0:
+        tap.bail("no tests defined, nothing to do")
+        os.rmdir(root_path)
+        sys.exit(2)
+
+    for i in opts.testcases:
+        env.addtest(i)
+
+    # run tests
+    env.run()
+
+    if not opts.keeproot:
+        shutil.rmtree(root_path)
+    else:
+        tap.diag("pacman testing root saved: %s" % root_path)
+
+    if env.failed > 0:
+        sys.exit(1)
+
+# vim: set ts=4 sw=4 et:
-- 
1.8.5.2



More information about the pacman-dev mailing list