diff --git a/libcxx/utils/libcxx/compiler.py b/libcxx/utils/libcxx/compiler.py --- a/libcxx/utils/libcxx/compiler.py +++ b/libcxx/utils/libcxx/compiler.py @@ -29,6 +29,7 @@ self.flags = list(flags or []) self.compile_flags = list(compile_flags or []) self.link_flags = list(link_flags or []) + self.link_libcxxabi_flag = '-lc++abi' self.warning_flags = list(warning_flags or []) self.verify_supported = verify_supported self.use_verify = use_verify diff --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py --- a/libcxx/utils/libcxx/test/config.py +++ b/libcxx/utils/libcxx/test/config.py @@ -822,6 +822,7 @@ if cxxabi_library_root: libname = self.make_static_lib_name('c++abi') abs_path = os.path.join(cxxabi_library_root, libname) + self.cxx.link_libcxxabi_flag = abs_path self.cxx.link_flags += [abs_path] else: self.cxx.link_flags += ['-lc++abi'] @@ -1025,6 +1026,7 @@ 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)))) + sub.append(('%{link_libcxxabi}', pipes.quote(self.cxx.link_libcxxabi_flag))) if self.cxx.isVerifySupported(): sub.append(('%{verify}', ' '.join(self.cxx.verify_flags))) # Add compile and build shortcuts diff --git a/libcxx/utils/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py --- a/libcxx/utils/libcxx/test/format.py +++ b/libcxx/utils/libcxx/test/format.py @@ -125,8 +125,8 @@ lit_config.fatal('Unsupported RUN line found in test %s' % name) tmpDir, tmpBase = lit.TestRunner.getTempPaths(test) - substitutions = lit.TestRunner.getDefaultSubstitutions(test, tmpDir, - tmpBase) + substitutions = lit.TestRunner.getDefaultSubstitutions( + test, tmpDir, tmpBase, normalize_slashes=self.execute_external) # Apply substitutions in FILE_DEPENDENCIES markup data_files = lit.TestRunner.applySubstitutions(test.file_dependencies, substitutions, diff --git a/libcxx/utils/ssh.py b/libcxx/utils/ssh.py --- a/libcxx/utils/ssh.py +++ b/libcxx/utils/ssh.py @@ -15,6 +15,7 @@ import argparse import os +import posixpath import subprocess import sys @@ -53,7 +54,7 @@ scp = lambda src, dst: ['scp', '-oBatchMode=yes', '-r', src, '{}:{}'.format(args.host, dst)] # Create a temporary directory where the test will be run - tmp = subprocess.check_output(ssh('mktemp -d /tmp/libcxx.XXXXXXXXXX')).strip() + tmp = subprocess.check_output(ssh('mktemp -d /tmp/libcxx.XXXXXXXXXX'), universal_newlines=True).strip() # Ensure the test dependencies exist and scp them to the temporary directory. # Test dependencies can be either files or directories, so the `scp` command @@ -68,7 +69,7 @@ # We know it has been copied to the remote host when we handled the test # dependencies above. if exe: - exe = os.path.join(tmp, os.path.basename(exe)) + exe = posixpath.join(tmp, os.path.basename(exe)) # If there's an executable, make sure it has 'execute' permissions on the # remote host. The host that compiled the executable might not have a notion diff --git a/libcxxabi/test/incomplete_type.sh.cpp b/libcxxabi/test/incomplete_type.sh.cpp --- a/libcxxabi/test/incomplete_type.sh.cpp +++ b/libcxxabi/test/incomplete_type.sh.cpp @@ -15,14 +15,15 @@ // UNSUPPORTED: libcxxabi-no-exceptions -// NOTE: Pass -lc++abi explicitly and before -lc++ so that -lc++ doesn't drag +// NOTE: Link libc++abi explicitly and before libc++ so that libc++ doesn't drag // in the system libc++abi installation on OS X. (DYLD_LIBRARY_PATH is ignored // for shell tests because of Apple security features). +// FILE_DEPENDENCIES: %t.exe // RUN: %{cxx} %{flags} %{compile_flags} -c %s -o %t.one.o // RUN: %{cxx} %{flags} %{compile_flags} -c %s -o %t.two.o -DTU_ONE -// RUN: %{cxx} %{flags} %t.one.o %t.two.o -lc++abi %{link_flags} -o %t.exe -// RUN: %t.exe +// RUN: %{cxx} %{flags} %t.one.o %t.two.o %{link_libcxxabi} %{link_flags} -o %t.exe +// RUN: %{exec} %t.exe #include #include