mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-21 01:06:46 +00:00
[lit] Make lit support config files with .py extension.
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
This commit is contained in:
parent
8d6f84c7d5
commit
1e4a125226
@ -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})
|
||||
|
@ -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}
|
||||
)
|
||||
|
||||
|
@ -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")
|
@ -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")
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"))
|
@ -38,6 +38,34 @@
|
||||
# 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.
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user