Preparation for turning lldbsuite into a Python package.
authorZachary Turner <zturner@google.com>
Tue, 27 Oct 2015 22:33:47 +0000 (22:33 +0000)
committerZachary Turner <zturner@google.com>
Tue, 27 Oct 2015 22:33:47 +0000 (22:33 +0000)
The idea behind this patch is to expose the meat of
LLDB's Python infrastructure (test suite, scripts, etc)
as a single package.  This makes reusability and code
sharing among sub-packages easy.

Differential Revision: http://reviews.llvm.org/D14131

llvm-svn: 251460

lldb/packages/Python/lldbsuite/__init__.py [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/__init__.py [new file with mode: 0644]
lldb/test/dosep.py
lldb/test/dotest.py
lldb/test/use_lldb_suite.py
lldb/third_party/Python/module/progress/progress.py [moved from lldb/test/progress.py with 100% similarity, mode: 0644]
lldb/use_lldb_suite_root.py

diff --git a/lldb/packages/Python/lldbsuite/__init__.py b/lldb/packages/Python/lldbsuite/__init__.py
new file mode 100644 (file)
index 0000000..3258a17
--- /dev/null
@@ -0,0 +1,20 @@
+# Module level initialization for the `lldbsuite` module.\r
+\r
+import inspect\r
+import os\r
+import sys\r
+\r
+def find_lldb_root():\r
+    lldb_root = os.path.dirname(inspect.getfile(inspect.currentframe()))\r
+    while True:\r
+        lldb_root = os.path.dirname(lldb_root)\r
+        if lldb_root is None:\r
+            return None\r
+\r
+        test_path = os.path.join(lldb_root, "lldb.root")\r
+        if os.path.isfile(test_path):\r
+            return lldb_root\r
+    return None\r
+\r
+# lldbsuite.lldb_root refers to the root of the git/svn source checkout\r
+lldb_root = find_lldb_root()\r
diff --git a/lldb/packages/Python/lldbsuite/test/__init__.py b/lldb/packages/Python/lldbsuite/test/__init__.py
new file mode 100644 (file)
index 0000000..5ae1a7e
--- /dev/null
@@ -0,0 +1 @@
+# Module level initialization for the `lldbsuite.test` module.\r
index 716adbc..0342d7e 100755 (executable)
@@ -1205,7 +1205,7 @@ def adjust_inferior_options(dotest_argv):
         # every dotest invocation from creating its own directory
         import datetime
         # The windows platforms don't like ':' in the pathname.
-        timestamp_started = datetime.datetime.now().strftime("%F-%H_%M_%S")
+        timestamp_started = datetime.datetime.now().strftime("%Y-%m-%d-%H_%M_%S")
         dotest_argv.append('-s')
         dotest_argv.append(timestamp_started)
         dotest_options.s = timestamp_started
index 7524ee4..2571af2 100755 (executable)
@@ -1048,6 +1048,8 @@ def setupSysPath():
 
     # Set up the LLDB_SRC environment variable, so that the tests can locate
     # the LLDB source code.
+    # When this changes over to a package instead of a standalone script, this
+    # will be `lldbsuite.lldb_root`
     os.environ["LLDB_SRC"] = os.path.join(scriptPath, os.pardir)
 
     pluginPath = os.path.join(scriptPath, 'plugins')
@@ -1063,6 +1065,8 @@ def setupSysPath():
                                              # to "import lldbgdbserverutils" from the lldb-server tests
 
     # This is the root of the lldb git/svn checkout
+    # When this changes over to a package instead of a standalone script, this
+    # will be `lldbsuite.lldb_root`
     lldbRootDirectory = os.path.abspath(os.path.join(scriptPath, os.pardir))
 
     # Some of the tests can invoke the 'lldb' command directly.
@@ -1294,6 +1298,7 @@ def visit(prefix, dir, names):
 
 
 def disabledynamics():
+    import lldb
     ci = lldb.DBG.GetCommandInterpreter()
     res = lldb.SBCommandReturnObject()
     ci.HandleCommand("setting set target.prefer-dynamic-value no-dynamic-values", res, False)    
@@ -1301,6 +1306,7 @@ def disabledynamics():
         raise Exception('disabling dynamic type support failed')
 
 def lldbLoggings():
+    import lldb
     """Check and do lldb loggings if necessary."""
 
     # Turn on logging for debugging purposes if ${LLDB_LOG} environment variable is
@@ -1366,6 +1372,7 @@ def checkDsymForUUIDIsNotOn():
         sys.exit(0)
 
 def exitTestSuite(exitCode = None):
+    import lldb
     lldb.SBDebugger.Terminate()
     if exitCode:
         sys.exit(exitCode)
@@ -1378,7 +1385,58 @@ def isMultiprocessTestRunner():
     # test runner
     return not (is_inferior_test_runner or no_multiprocess_test_runner)
 
-if __name__ == "__main__":
+def run_suite():
+    global just_do_benchmarks_test
+    global dont_do_dsym_test
+    global dont_do_dwarf_test
+    global dont_do_dwo_test
+    global blacklist
+    global blacklistConfig
+    global categoriesList
+    global validCategories
+    global useCategories
+    global skipCategories
+    global lldbFrameworkPath
+    global configFile
+    global archs
+    global compilers
+    global count
+    global dumpSysPath
+    global bmExecutable
+    global bmBreakpointSpec
+    global bmIterationCount
+    global failed
+    global failfast
+    global filters
+    global fs4all
+    global ignore
+    global progress_bar
+    global runHooks
+    global skip_build_and_cleanup
+    global skip_long_running_test
+    global noHeaders
+    global parsable
+    global regexp
+    global rdir
+    global sdir_name
+    global svn_silent
+    global verbose
+    global testdirs
+    global lldb_platform_name
+    global lldb_platform_url
+    global lldb_platform_working_dir
+    global setCrashInfoHook
+    global is_inferior_test_runner
+    global multiprocess_test_subdir
+    global num_threads
+    global output_on_success
+    global no_multiprocess_test_runner
+    global test_runner_name
+    global results_filename
+    global results_formatter_name
+    global results_formatter_options
+    global results_port
+
     # On MacOS X, check to make sure that domain for com.apple.DebugSymbols defaults
     # does not exist before proceeding to running the test suite.
     if sys.platform.startswith("darwin"):
@@ -1976,3 +2034,6 @@ if __name__ == "__main__":
 
     # Exiting.
     exitTestSuite(failed)
+
+if __name__ == "__main__":
+    run_suite()
\ No newline at end of file
index daeafe8..3dbcbb9 100644 (file)
@@ -19,4 +19,4 @@ if lldb_root is not None:
     import imp
     module = imp.find_module("use_lldb_suite_root", [lldb_root])
     if module is not None:
-        imp.load_module("use_lldb_suite_root", *module)
\ No newline at end of file
+        imp.load_module("use_lldb_suite_root", *module)
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from lldb/test/progress.py
rename to lldb/third_party/Python/module/progress/progress.py
index 466de5d..5492d40 100644 (file)
@@ -11,5 +11,12 @@ def add_third_party_module_dirs(lldb_root):
     for module_dir in module_dirs:
         module_dir = os.path.join(third_party_modules_dir, module_dir)
         sys.path.insert(0, module_dir)
+
+def add_lldbsuite_packages_dir(lldb_root):
+    packages_dir = os.path.join(lldb_root, "packages", "Python")
+    sys.path.insert(0, packages_dir)
+
 lldb_root = os.path.dirname(inspect.getfile(inspect.currentframe()))
+
 add_third_party_module_dirs(lldb_root)
+add_lldbsuite_packages_dir(lldb_root)