]> granicus.if.org Git - llvm/commitdiff
[lit] Make lit support config files with .py extension.
authorZachary Turner <zturner@google.com>
Thu, 21 Sep 2017 00:24:52 +0000 (00:24 +0000)
committerZachary Turner <zturner@google.com>
Thu, 21 Sep 2017 00:24:52 +0000 (00:24 +0000)
Many editors and Python-related diagnostics tools such as
debuggers break or fail in mysterious ways when python files
don't end in .py.  This is especially true on Windows, but
still exists on other platforms.  I don't want to be too heavy
handed in changing everything across the board, but I do want
to at least *allow* lit configs to have .py extensions.  This
patch makes the discovery process first look for a config file
with a .py extension, and if one is not found, then looks for
a config file using the old method.  So for existing users, there
should be no functional change.

Differential Revision: https://reviews.llvm.org/D37838

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313849 91177308-0d34-0410-b5e6-96231b3b80d8

cmake/modules/AddLLVM.cmake
test/CMakeLists.txt
test/Unit/lit.cfg.py [moved from test/Unit/lit.cfg with 100% similarity]
test/Unit/lit.site.cfg.py.in [moved from test/Unit/lit.site.cfg.in with 98% similarity]
test/lit.cfg.py [moved from test/lit.cfg with 100% similarity]
test/lit.site.cfg.py.in [moved from test/lit.site.cfg.in with 97% similarity]
utils/lit/lit/LitConfig.py
utils/lit/lit/discovery.py
utils/lit/tests/Inputs/py-config-discovery/lit.site.cfg.py [new file with mode: 0644]
utils/lit/tests/discovery.py

index 7c26e396cafc827ff561dc3ab0b16c1c26d2e99f..f328e049764b86b5391d67bb747155be45511216 100644 (file)
@@ -1112,7 +1112,13 @@ endfunction(llvm_canonicalize_cmake_booleans)
 # variables needed for the 'lit.site.cfg' files. This function bundles the
 # common variables that any Lit instance is likely to need, and custom
 # variables can be passed in.
-function(configure_lit_site_cfg input output)
+function(configure_lit_site_cfg site_in site_out)
+  cmake_parse_arguments(ARG "" "" "MAIN_CONFIG" ${ARGN})
+
+  if ("${ARG_MAIN_CONFIG}" STREQUAL "")
+    set(ARG_MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg")
+  endif()
+
   foreach(c ${LLVM_TARGETS_TO_BUILD})
     set(TARGETS_BUILT "${TARGETS_BUILT} ${c}")
   endforeach(c)
@@ -1158,7 +1164,7 @@ function(configure_lit_site_cfg input output)
   set(HOST_CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}")
   set(HOST_LDFLAGS "${CMAKE_EXE_LINKER_FLAGS}")
 
-  set(LIT_SITE_CFG_IN_HEADER  "## Autogenerated from ${input}\n## Do not edit!")
+  set(LIT_SITE_CFG_IN_HEADER  "## Autogenerated from ${site_in}\n## Do not edit!")
 
   # Override config_target_triple (and the env)
   if(LLVM_TARGET_TRIPLE_ENV)
@@ -1177,10 +1183,10 @@ function(configure_lit_site_cfg input output)
      "import lit.llvm\n"
      "lit.llvm.initialize(lit_config, config)\n")
 
-  configure_file(${input} ${output} @ONLY)
-  get_filename_component(INPUT_DIR ${input} DIRECTORY)
-  if (EXISTS "${INPUT_DIR}/lit.cfg")
-    set(PYTHON_STATEMENT "map_config('${INPUT_DIR}/lit.cfg', '${output}')")
+  configure_file(${site_in} ${site_out} @ONLY)
+  get_filename_component(INPUT_DIR ${site_in} DIRECTORY)
+  if (EXISTS "${ARG_MAIN_CONFIG}")
+    set(PYTHON_STATEMENT "map_config('${ARG_MAIN_CONFIG}', '${site_out}')")
     get_property(LLVM_LIT_CONFIG_MAP GLOBAL PROPERTY LLVM_LIT_CONFIG_MAP)
     set(LLVM_LIT_CONFIG_MAP "${LLVM_LIT_CONFIG_MAP}\n${PYTHON_STATEMENT}")
     set_property(GLOBAL PROPERTY LLVM_LIT_CONFIG_MAP ${LLVM_LIT_CONFIG_MAP})
index 28bec84989ffebf6446f7263160b2b02e477b5c5..33e5da0eb1bb288eace18544453823783da23275 100644 (file)
@@ -11,12 +11,16 @@ llvm_canonicalize_cmake_booleans(
   BUILD_SHARED_LIBS)
 
 configure_lit_site_cfg(
-  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
-  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
+  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
+  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
+  MAIN_CONFIG
+  ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
   )
 configure_lit_site_cfg(
-  ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
-  ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
+  ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.py.in
+  ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg.py
+  MAIN_CONFIG
+  ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py
   )
 
 # Don't include check-llvm into check-all without LLVM_BUILD_TOOLS.
@@ -148,15 +152,11 @@ set_target_properties(llvm-test-depends PROPERTIES FOLDER "Tests")
 
 add_lit_testsuite(check-llvm "Running the LLVM regression tests"
   ${CMAKE_CURRENT_BINARY_DIR}
-  PARAMS llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
-         llvm_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
   DEPENDS ${LLVM_TEST_DEPENDS}
   )
 set_target_properties(check-llvm PROPERTIES FOLDER "Tests")
 
 add_lit_testsuites(LLVM ${CMAKE_CURRENT_SOURCE_DIR}
-  PARAMS llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
-         llvm_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
   DEPENDS ${LLVM_TEST_DEPENDS}
   )
 
similarity index 100%
rename from test/Unit/lit.cfg
rename to test/Unit/lit.cfg.py
similarity index 98%
rename from test/Unit/lit.site.cfg.in
rename to test/Unit/lit.site.cfg.py.in
index 9d736f473cecdc8a0523bed106f77d28421b2d3b..1fef001be62715ce3efda84f2b9d49da6b7a3fc0 100644 (file)
@@ -20,4 +20,4 @@ except KeyError:
     lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))
 
 # Let the main config do the real work.
-lit_config.load_config(config, "@LLVM_SOURCE_DIR@/test/Unit/lit.cfg")
+lit_config.load_config(config, "@LLVM_SOURCE_DIR@/test/Unit/lit.cfg.py")
similarity index 100%
rename from test/lit.cfg
rename to test/lit.cfg.py
similarity index 97%
rename from test/lit.site.cfg.in
rename to test/lit.site.cfg.py.in
index a45a000624cc39242dd63cd5873a1dc147648c00..45f265afb97b8e5c2e4cf36000e7f26f6e610a59 100644 (file)
@@ -55,4 +55,4 @@ except KeyError:
 @LIT_SITE_CFG_IN_FOOTER@
 
 # Let the main config do the real work.
-lit_config.load_config(config, "@LLVM_SOURCE_DIR@/test/lit.cfg")
+lit_config.load_config(config, "@LLVM_SOURCE_DIR@/test/lit.cfg.py")
index fbb04dc4e6f5af02113a5b58bc3677e79f072e52..389e5652e9beb2179e2c0e5de071e3b9c6116bbd 100644 (file)
@@ -44,9 +44,10 @@ class LitConfig(object):
 
         # Configuration files to look for when discovering test suites.
         self.config_prefix = config_prefix or 'lit'
-        self.config_name = '%s.cfg' % (self.config_prefix,)
-        self.site_config_name = '%s.site.cfg' % (self.config_prefix,)
-        self.local_config_name = '%s.local.cfg' % (self.config_prefix,)
+        self.suffixes = ['cfg.py', 'cfg']
+        self.config_names = ['%s.%s' % (self.config_prefix,x) for x in self.suffixes]
+        self.site_config_names = ['%s.site.%s' % (self.config_prefix,x) for x in self.suffixes]
+        self.local_config_names = ['%s.local.%s' % (self.config_prefix,x) for x in self.suffixes]
 
         self.numErrors = 0
         self.numWarnings = 0
index e276829db39d1b6841349084948cd1d53d1a7502..66c1181017ae9b8bef48b42cfbaeb3dd8fe348d9 100644 (file)
@@ -10,13 +10,18 @@ import lit.run
 from lit.TestingConfig import TestingConfig
 from lit import LitConfig, Test
 
+def chooseConfigFileFromDir(dir, config_names):
+    for name in config_names:
+        p = os.path.join(dir, name)
+        if os.path.exists(p):
+            return p
+    return None
+
 def dirContainsTestSuite(path, lit_config):
-    cfgpath = os.path.join(path, lit_config.site_config_name)
-    if os.path.exists(cfgpath):
-        return cfgpath
-    cfgpath = os.path.join(path, lit_config.config_name)
-    if os.path.exists(cfgpath):
-        return cfgpath
+    cfgpath = chooseConfigFileFromDir(path, lit_config.site_config_names)
+    if not cfgpath:
+        cfgpath = chooseConfigFileFromDir(path, lit_config.config_names)
+    return cfgpath
 
 def getTestSuite(item, litConfig, cache):
     """getTestSuite(item, litConfig, cache) -> (suite, relative_path)
@@ -99,10 +104,10 @@ def getLocalConfig(ts, path_in_suite, litConfig, cache):
 
         # Check if there is a local configuration file.
         source_path = ts.getSourcePath(path_in_suite)
-        cfgpath = os.path.join(source_path, litConfig.local_config_name)
+        cfgpath = chooseConfigFileFromDir(source_path, litConfig.local_config_names)
 
         # If not, just reuse the parent config.
-        if not os.path.exists(cfgpath):
+        if not cfgpath:
             return parent
 
         # Otherwise, copy the current config and load the local configuration
diff --git a/utils/lit/tests/Inputs/py-config-discovery/lit.site.cfg.py b/utils/lit/tests/Inputs/py-config-discovery/lit.site.cfg.py
new file mode 100644 (file)
index 0000000..ac273c7
--- /dev/null
@@ -0,0 +1,5 @@
+# Load the discovery suite, but with a separate exec root.
+import os
+config.test_exec_root = os.path.dirname(__file__)
+config.test_source_root = os.path.join(os.path.dirname(config.test_exec_root), "discovery")
+lit_config.load_config(config, os.path.join(config.test_source_root, "lit.cfg"))
index 7d71436b0fe7396e0ca63a3a4f905c07d6a3436a..ba5247337a8b0f50ff7eea4802c9ba3eb7feb306 100644 (file)
 # CHECK-EXACT-TEST: sub-suite :: test-one
 # CHECK-EXACT-TEST: top-level-suite :: subdir/test-three
 
+# Check discovery when config files end in .py
+# RUN: %{lit} %{inputs}/py-config-discovery \
+# RUN:   -j 1 --debug --show-tests --show-suites \
+# RUN:   -v > %t.out 2> %t.err
+# RUN: FileCheck --check-prefix=CHECK-PYCONFIG-OUT < %t.out %s
+# RUN: FileCheck --check-prefix=CHECK-PYCONFIG-ERR < %t.err %s
+#
+# CHECK-PYCONFIG-ERR: loading suite config '{{.*(/|\\\\)py-config-discovery(/|\\\\)lit.site.cfg.py}}'
+# CHECK-PYCONFIG-ERR: load_config from '{{.*(/|\\\\)discovery(/|\\\\)lit.cfg}}'
+# CHECK-PYCONFIG-ERR: loaded config '{{.*(/|\\\\)discovery(/|\\\\)lit.cfg}}'
+# CHECK-PYCONFIG-ERR: loaded config '{{.*(/|\\\\)py-config-discovery(/|\\\\)lit.site.cfg.py}}'
+# CHECK-PYCONFIG-ERR-DAG: loading suite config '{{.*(/|\\\\)discovery(/|\\\\)subsuite(/|\\\\)lit.cfg}}'
+# CHECK-PYCONFIG-ERR-DAG: loading local config '{{.*(/|\\\\)discovery(/|\\\\)subdir(/|\\\\)lit.local.cfg}}'
+#
+# CHECK-PYCONFIG-OUT: -- Test Suites --
+# CHECK-PYCONFIG-OUT:   sub-suite - 2 tests
+# CHECK-PYCONFIG-OUT:     Source Root: {{.*[/\\]discovery[/\\]subsuite$}}
+# CHECK-PYCONFIG-OUT:     Exec Root  : {{.*[/\\]discovery[/\\]subsuite$}}
+# CHECK-PYCONFIG-OUT:   top-level-suite - 3 tests
+# CHECK-PYCONFIG-OUT:     Source Root: {{.*[/\\]discovery$}}
+# CHECK-PYCONFIG-OUT:     Exec Root  : {{.*[/\\]py-config-discovery$}}
+#
+# CHECK-PYCONFIG-OUT: -- Available Tests --
+# CHECK-PYCONFIG-OUT: sub-suite :: test-one
+# CHECK-PYCONFIG-OUT: sub-suite :: test-two
+# CHECK-PYCONFIG-OUT: top-level-suite :: subdir/test-three
+# CHECK-PYCONFIG-OUT: top-level-suite :: test-one
+# CHECK-PYCONFIG-OUT: top-level-suite :: test-two
 
 # Check discovery when using an exec path.
 #