[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