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