
Add support for a CLANG_NO_DEFAULT_CONFIG envvar that works like the --no-default-config option when set to a non-empty value. Use it to disable loading system configuration files during the test suite runs. Configuration files can change the driver behavior in extensive ways, and it is neither really possible nor feasible to account for or undo the effects of even the most common configuration uses. Therefore, the most reasonable option seems to be to ignore configuration files while running the majority of tests (with the notable exception of tests for configuration file support). Due to the diversity of ways that %clang is used in the test suite, including using it to copy or symlink the clang executable, as well to call -cc1 and -cc1as modes, it is not feasible to pass the explicit options to disable config loading either. Using an environment variable has the advantage of being easily applied across the test suite and easily unset for default configuration file loading tests. Differential Revision: https://reviews.llvm.org/D134905
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
# -*- Python -*-
|
|
|
|
# Configuration file for the 'lit' test runner.
|
|
|
|
import os
|
|
import platform
|
|
import subprocess
|
|
|
|
import lit.formats
|
|
import lit.util
|
|
|
|
# name: The name of this test suite.
|
|
config.name = 'Clang-Unit'
|
|
|
|
# suffixes: A list of file extensions to treat as test files.
|
|
config.suffixes = []
|
|
|
|
# test_source_root: The root path where tests are located.
|
|
# test_exec_root: The root path where tests should be run.
|
|
config.test_exec_root = os.path.join(config.clang_obj_root, 'unittests')
|
|
config.test_source_root = config.test_exec_root
|
|
|
|
# testFormat: The test format to use to interpret tests.
|
|
config.test_format = lit.formats.GoogleTest(config.llvm_build_mode, 'Tests')
|
|
|
|
# Propagate the temp directory. Windows requires this because it uses \Windows\
|
|
# if none of these are present.
|
|
if 'TMP' in os.environ:
|
|
config.environment['TMP'] = os.environ['TMP']
|
|
if 'TEMP' in os.environ:
|
|
config.environment['TEMP'] = os.environ['TEMP']
|
|
|
|
if 'HOME' in os.environ:
|
|
config.environment['HOME'] = os.environ['HOME']
|
|
|
|
# Propagate sanitizer options.
|
|
for var in [
|
|
'ASAN_SYMBOLIZER_PATH',
|
|
'HWASAN_SYMBOLIZER_PATH',
|
|
'MSAN_SYMBOLIZER_PATH',
|
|
'TSAN_SYMBOLIZER_PATH',
|
|
'UBSAN_SYMBOLIZER_PATH',
|
|
'ASAN_OPTIONS',
|
|
'HWASAN_OPTIONS',
|
|
'MSAN_OPTIONS',
|
|
'TSAN_OPTIONS',
|
|
'UBSAN_OPTIONS',
|
|
]:
|
|
if var in os.environ:
|
|
config.environment[var] = os.environ[var]
|
|
|
|
def find_shlibpath_var():
|
|
if platform.system() in ['Linux', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS']:
|
|
yield 'LD_LIBRARY_PATH'
|
|
elif platform.system() == 'Darwin':
|
|
yield 'DYLD_LIBRARY_PATH'
|
|
elif platform.system() == 'Windows':
|
|
yield 'PATH'
|
|
elif platform.system() == 'AIX':
|
|
yield 'LIBPATH'
|
|
|
|
for shlibpath_var in find_shlibpath_var():
|
|
# in stand-alone builds, shlibdir is clang's build tree
|
|
# while llvm_libs_dir is installed LLVM (and possibly older clang)
|
|
shlibpath = os.path.pathsep.join(
|
|
(config.shlibdir,
|
|
config.llvm_libs_dir,
|
|
config.environment.get(shlibpath_var, '')))
|
|
config.environment[shlibpath_var] = shlibpath
|
|
break
|
|
else:
|
|
lit_config.warning("unable to inject shared library path on '{}'"
|
|
.format(platform.system()))
|
|
|
|
# It is not realistically possible to account for all options that could
|
|
# possibly be present in system and user configuration files, so disable
|
|
# default configs for the test runs.
|
|
config.environment["CLANG_NO_DEFAULT_CONFIG"] = "1"
|