From 05b04c685c9c5a5abc2ab9bd160a40c58c684b23 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 30 Mar 2020 18:00:47 -0400 Subject: [PATCH] Recommit "[libc++] NFC: Simplify substitutions by using lit recursive substitutions" This re-commits cd7f9751c300, which was reverted in 12f6b024f9f5 because it broke the LLVM `check-all` target. This commit addresses the underlying issue by not setting the lit_config.recursiveExpansionLimit parameter of the libc++ test suite, which is otherwise picked up by other test suites in LLVM. Once we've settled on a fix for the underlying issue with lit_config.recursiveExpansionLimit, we can start using it again in libc++, but for now we can just work around it. --- libcxx/utils/libcxx/test/config.py | 39 +++++++++++------------------- libcxx/utils/libcxx/test/format.py | 3 ++- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py index 7a157bb21689..d53bd6cbeb36 100644 --- a/libcxx/utils/libcxx/test/config.py +++ b/libcxx/utils/libcxx/test/config.py @@ -1039,35 +1039,26 @@ class Configuration(object): if self.target_info.is_darwin(): # Do not pass DYLD_LIBRARY_PATH to the compiler, linker, etc. as # these tools are not meant to exercise the just-built libraries. - tool_env += 'env DYLD_LIBRARY_PATH="" ' + tool_env += 'env DYLD_LIBRARY_PATH=""' sub = self.config.substitutions - cxx_path = tool_env + pipes.quote(self.cxx.path) # Configure compiler substitutions - sub.append(('%{cxx}', cxx_path)) + sub.append(('%{cxx}', '{} {}'.format(tool_env, pipes.quote(self.cxx.path)))) sub.append(('%{libcxx_src_root}', self.libcxx_src_root)) # Configure flags substitutions - flags_str = ' '.join([pipes.quote(f) for f in self.cxx.flags]) - compile_flags_str = ' '.join([pipes.quote(f) for f in self.cxx.compile_flags]) - link_flags_str = ' '.join([pipes.quote(f) for f in self.cxx.link_flags]) - all_flags = '%s %s %s' % (flags_str, compile_flags_str, link_flags_str) - sub.append(('%{flags}', flags_str)) - sub.append(('%{compile_flags}', compile_flags_str)) - sub.append(('%{link_flags}', link_flags_str)) + sub.append(('%{flags}', ' '.join(map(pipes.quote, self.cxx.flags)))) + sub.append(('%{compile_flags}', ' '.join(map(pipes.quote, self.cxx.compile_flags)))) + sub.append(('%{link_flags}', ' '.join(map(pipes.quote, self.cxx.link_flags)))) if self.cxx.isVerifySupported(): - verify_str = ' ' + ' '.join(self.cxx.verify_flags) + ' ' - sub.append(('%{verify}', verify_str)) - # Add compile and link shortcuts - compile_str = (cxx_path + ' -o %t.o %s -c ' + flags_str - + ' ' + compile_flags_str) - build_str = cxx_path + ' -o %t.exe %s ' + all_flags + sub.append(('%{verify}', ' '.join(self.cxx.verify_flags))) + # Add compile and build shortcuts + sub.append(('%{compile}', '%{cxx} -o %t.o %s -c %{flags} %{compile_flags}')) + sub.append(('%{build}', '%{cxx} -o %t.exe %s %{flags} %{compile_flags} %{link_flags}')) if self.cxx.use_modules: - sub.append(('%{build_module}', build_str)) + sub.append(('%{build_module}', '%{build}')) elif self.cxx.modules_flags is not None: - modules_str = ' '.join(self.cxx.modules_flags) + ' ' - sub.append(('%{build_module}', build_str + ' ' + modules_str)) - sub.append(('%{compile}', compile_str)) - sub.append(('%{build}', build_str)) + sub.append(('%{build_module}', '%{{build}} {}'.format(' '.join(self.cxx.modules_flags)))) + # Configure exec prefix substitutions. # Configure run env substitution. codesign_ident = self.get_lit_conf('llvm_codesign_identity', '') @@ -1077,13 +1068,11 @@ class Configuration(object): '--dependencies %%{file_dependencies} --env %s -- ' % \ (pipes.quote(sys.executable), pipes.quote(run_py), codesign_ident, env_vars) - run_str = exec_str + '%t.exe' sub.append(('%{exec}', exec_str)) - sub.append(('%{run}', run_str)) + sub.append(('%{run}', '%{exec} %t.exe')) # Configure not program substitutions not_py = os.path.join(self.libcxx_src_root, 'utils', 'not.py') - not_str = '%s %s ' % (pipes.quote(sys.executable), pipes.quote(not_py)) - sub.append(('%{not} ', not_str)) + sub.append(('%{not}', '{} {}'.format(pipes.quote(sys.executable), pipes.quote(not_py)))) if self.get_lit_conf('libcxx_gdb'): sub.append(('%{libcxx_gdb}', self.get_lit_conf('libcxx_gdb'))) diff --git a/libcxx/utils/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py index e29d58fbf400..4199ddd7f80b 100644 --- a/libcxx/utils/libcxx/test/format.py +++ b/libcxx/utils/libcxx/test/format.py @@ -124,7 +124,8 @@ class LibcxxTestFormat(object): substitutions = lit.TestRunner.getDefaultSubstitutions(test, tmpDir, tmpBase) substitutions.append(('%{file_dependencies}', ' '.join(data_files))) - script = lit.TestRunner.applySubstitutions(script, substitutions) + script = lit.TestRunner.applySubstitutions(script, substitutions, + recursion_limit=10) test_cxx = copy.deepcopy(self.cxx) if is_fail_test: