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 <[email protected]>
-#  Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
-#
-#  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 <[email protected]>
+#  Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
+#
+#  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


Reply via email to