[tests] Add a 'use_system_lib' parameter.
- This controls whether to execute against the locally built library or
not. The default is currently True which maps to what was already being done
by default.
- I'd appreciate it if someone can implement the proper handling of this flag
on linux, I no longer remember the details of its .so handling.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@174404 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/lit.cfg b/test/lit.cfg
index dc843ac..89d8493 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -21,10 +21,11 @@
FOO.fail.cpp - Negative test case which is expected to fail compilation.
"""
- def __init__(self, cxx_under_test, cpp_flags, ld_flags):
+ def __init__(self, cxx_under_test, cpp_flags, ld_flags, exec_env):
self.cxx_under_test = cxx_under_test
self.cpp_flags = list(cpp_flags)
self.ld_flags = list(ld_flags)
+ self.exec_env = dict(exec_env)
def execute_command(self, command, in_dir=None):
kwargs = {
@@ -100,7 +101,12 @@
report += "\n\nCompilation failed unexpectedly!"
return lit.Test.FAIL, report
- cmd = [exec_path]
+ cmd = []
+ if self.exec_env:
+ cmd.append('env')
+ cmd.extend('%s=%s' % (name, value)
+ for name,value in self.exec_env.items())
+ cmd.append(exec_path)
if lit_config.useValgrind:
cmd = lit_config.valgrindArgs + cmd
out, err, exitCode = self.execute_command(cmd, source_dir)
@@ -154,34 +160,54 @@
cxx_has_stdcxx0x_flag_str = lit.params.get('cxx_has_stdcxx0x_flag', None)
if cxx_has_stdcxx0x_flag_str is not None:
- if cxx_has_stdcxx0x_flag_str in ('1', 'True'):
+ if cxx_has_stdcxx0x_flag_str.lower() in ('1', 'true'):
cxx_has_stdcxx0x_flag = True
- elif cxx_has_stdcxx0x_flag_str in ('', '0', 'False'):
+ elif cxx_has_stdcxx0x_flag_str.lower() in ('', '0', 'false'):
cxx_has_stdcxx0x_flag = False
else:
lit.fatal('user parameter cxx_has_stdcxx0x_flag_str should be 0 or 1')
else:
cxx_has_stdcxx0x_flag = getattr(config, 'cxx_has_stdcxx0x_flag', True)
+# This test suite supports testing against either the system library or the
+# locally built one; the former mode is useful for testing ABI compatibility
+# between the current headers and a shipping dynamic library. We require the
+# user to explicitly pick one of the two modes.
+use_system_lib_str = lit.params.get('use_system_lib', None)
+if use_system_lib_str is not None:
+ if use_system_lib_str.lower() in ('1', 'true'):
+ use_system_lib = True
+ elif use_system_lib_str.lower() in ('', '0', 'false'):
+ use_system_lib = False
+ else:
+ lit.fatal('user parameter use_system_lib should be 0 or 1')
+else:
+ use_system_lib = True
+
# Configure extra compiler flags.
include_paths = ['-I' + libcxx_src_root + '/include', '-I' + libcxx_src_root + '/test/support']
library_paths = ['-L' + libcxx_obj_root + '/lib']
compile_flags = []
if cxx_has_stdcxx0x_flag:
- compile_flags += ['-std=c++0x']
+ compile_flags += ['-std=c++0x']
# Configure extra libraries.
+exec_env = {}
libraries = []
if sys.platform == 'darwin':
- libraries += ['-lSystem']
-if sys.platform == 'linux2':
- libraries += ['-lsupc++', '-lgcc_eh', '-lc', '-lm', '-lpthread', '-lrt', '-lgcc_s']
- libraries += ['-Wl,-R', libcxx_obj_root + '/lib']
- compile_flags += ['-D__STDC_FORMAT_MACROS', '-D__STDC_LIMIT_MACROS', '-D__STDC_CONSTANT_MACROS']
+ libraries += ['-lSystem']
+ if not use_system_lib:
+ exec_env['DYLD_LIBRARY_PATH'] = os.path.join(libcxx_obj_root, 'lib')
+elif sys.platform == 'linux2':
+ libraries += ['-lsupc++', '-lgcc_eh', '-lc', '-lm', '-lpthread', '-lrt', '-lgcc_s']
+ libraries += ['-Wl,-R', libcxx_obj_root + '/lib']
+else:
+ lit.fatal("unrecognized system")
config.test_format = LibcxxTestFormat(
cxx_under_test,
cpp_flags = ['-nostdinc++'] + compile_flags + include_paths,
- ld_flags = ['-nodefaultlibs'] + library_paths + ['-lc++'] + libraries)
+ ld_flags = ['-nodefaultlibs'] + library_paths + ['-lc++'] + libraries,
+ exec_env = exec_env)
config.target_triple = None