[Piglit] [PATCH 3/3] piglit: Add piglit command
Jordan Justen
jordan.l.justen at intel.com
Wed Apr 30 10:28:57 PDT 2014
The piglit command is a wrapper command for the
piglit-<command>.py scripts.
For example, running 'piglit run' is equivalent to piglit-run.py.
It is installed to $PREFIX/bin/piglit, and will launch the
sub-commands either at their installed location in
$PREFIX/lib/piglit, or in the source tree.
'piglit help <command>' will run 'piglit-<command>.py --help'
as expected.
'piglit', 'piglit help' or 'piglit --help' will show the list
of possible sub-commands.
Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
CMakeLists.txt | 14 +++++++++
piglit.in | 42 +++++++++++++++++++++++++
piglit_cmd.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 152 insertions(+)
create mode 100755 piglit.in
create mode 100755 piglit_cmd.py
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a9a602c..7561788 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,9 @@ INCLUDE (FindPkgConfig)
project (piglit)
+set(PythonInterp_FIND_VERSION 2)
+find_package(PythonInterp REQUIRED)
+
find_package(Threads)
find_package(X11)
if(X11_FOUND)
@@ -398,6 +401,11 @@ configure_file(
"${piglit_BINARY_DIR}/tests/util/config.h"
)
+configure_file(
+ "${piglit_SOURCE_DIR}/piglit.in"
+ "${piglit_BINARY_DIR}/piglit${PIGLIT_INSTALL_VERSION_SUFFIX}"
+)
+
include(cmake/piglit_util.cmake)
include(cmake/piglit_glapi.cmake)
include(cmake/piglit_dispatch.cmake)
@@ -420,6 +428,7 @@ install (
install (
PROGRAMS
+ piglit_cmd.py
piglit-merge-results.py
piglit-print-commands.py
piglit-run.py
@@ -455,6 +464,11 @@ install (
REGEX "CMakeFiles|CMakeLists" EXCLUDE
)
+install (
+ PROGRAMS piglit${PIGLIT_INSTALL_VERSION_SUFFIX}
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
set (CPACK_PACKAGE_VERSION_MAJOR "1")
set (CPACK_PACKAGE_VERSION_MINOR "0")
diff --git a/piglit.in b/piglit.in
new file mode 100755
index 0000000..1290d9f
--- /dev/null
+++ b/piglit.in
@@ -0,0 +1,42 @@
+#!@PYTHON_EXECUTABLE@
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# This permission notice shall be included in all copies or
+# substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR(S) BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+import sys
+import os
+
+piglit_source = '@piglit_SOURCE_DIR@'
+piglit_install_full_libdir = '@PIGLIT_INSTALL_FULL_LIBDIR@'
+
+piglit_cmd_source_path = \
+ os.path.realpath(os.path.join(piglit_source, 'piglit'))
+piglit_cmd_in_source = \
+ piglit_cmd_source_path == os.path.realpath(sys.argv[0])
+
+if piglit_cmd_in_source:
+ piglit_run_dir = piglit_source
+else:
+ piglit_run_dir = piglit_install_full_libdir
+
+sys.path.insert(0, piglit_run_dir)
+import piglit_cmd
+piglit_cmd.run(piglit_run_dir, piglit_cmd_in_source)
diff --git a/piglit_cmd.py b/piglit_cmd.py
new file mode 100755
index 0000000..50916ab
--- /dev/null
+++ b/piglit_cmd.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# This permission notice shall be included in all copies or
+# substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR(S) BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+import os
+import subprocess
+import sys
+
+class piglit_cmd:
+ def __init__(self, base_dir, from_source):
+ self.base_dir = base_dir
+ self.from_source = from_source
+ self.get_sub_commands()
+
+ def run(self):
+ generic_help = False
+ unknown_command_help = None
+ command_help = None
+ if len(sys.argv) <= 1:
+ generic_help = True
+ elif sys.argv[1] in ('help', '--help'):
+ if len(sys.argv) > 2 and sys.argv[2] in self.cmds:
+ command_help = sys.argv[2]
+ else:
+ generic_help = True
+ elif not sys.argv[1] in self.cmds:
+ unknown_command_help = sys.argv[1]
+
+ if command_help:
+ return self.command_help(command_help)
+ elif unknown_command_help:
+ return self.unknown_command_help(unknown_command_help)
+ elif generic_help:
+ return self.generic_help()
+ else:
+ return self.run_command(sys.argv[1], sys.argv[2:])
+
+ def run_command(self, command, args):
+ script = os.path.join(self.base_dir, 'piglit-' + command + '.py')
+ return self.run_python(script, args)
+
+ def run_python(self, script, args):
+ pargs = [ sys.executable, script ]
+ pargs += args
+ return subprocess.call(executable=pargs[0], args=pargs)
+
+ def command_help(self, command):
+ return self.run_command(command, ('--help',))
+
+ def unknown_command_help(self, command):
+ print("piglit: '%s' is not a piglit command. See 'piglit --help'." %
+ command)
+ return -1
+
+ def generic_help(self):
+ print("usage: piglit <command> [<args>]\n")
+
+ print("Commands are:")
+ for cmd in self.cmds:
+ print(" " + cmd)
+
+ print("\nUse 'piglit help <command>' for subcommand help.")
+
+ def get_sub_commands(self):
+ cmds = os.listdir(self.base_dir)
+ cmds = filter(lambda p: p.endswith('.py'), cmds)
+ cmds = map(os.path.basename, cmds)
+ cmds = filter(lambda p: p.startswith('piglit-'), cmds)
+ self.cmds = map(lambda p: p[7:-3], cmds)
+ self.cmds.sort()
+
+def run(base_dir, from_source=True):
+ return piglit_cmd(base_dir, from_source).run()
+
+if __name__ == "__main__":
+ print("Use the 'piglit' command to run piglit")
+ sys.exit(-1)
--
1.9.2
More information about the Piglit
mailing list