From 9b5f11d57461d509754a7a65a14824596280caa7 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Thu, 6 Sep 2018 22:00:38 +0000 Subject: [PATCH] Fix a configure issue with Visual Studio generators. We can't put the unittest source dir map in the configuration specific directory because VS doesn't have a configure-specific directory, instead it only knows this at runtime. So we have to remove this from the path. This in turn means that the path will be slightly different in VS configurations vs non vs configurations. In the former, the source map will be in the parent directory of the executable, and in the latter it will be in the same directory as the executable. So check both. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341590 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/modules/AddLLVM.cmake | 2 +- lib/Testing/Support/SupportHelpers.cpp | 43 +++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index dcc65d078cb..02481760bea 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -1116,7 +1116,7 @@ function(add_unittest test_suite test_name) set(LLVM_UNITTEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) configure_file( ${LLVM_MAIN_SRC_DIR}/unittests/unittest.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llvm.srcdir.txt) + ${CMAKE_CURRENT_BINARY_DIR}/llvm.srcdir.txt) add_dependencies(${test_suite} ${test_name}) get_target_property(test_suite_folder ${test_suite} FOLDER) diff --git a/lib/Testing/Support/SupportHelpers.cpp b/lib/Testing/Support/SupportHelpers.cpp index 13ff07c2e13..2b26e9e0438 100644 --- a/lib/Testing/Support/SupportHelpers.cpp +++ b/lib/Testing/Support/SupportHelpers.cpp @@ -13,22 +13,43 @@ using namespace llvm; using namespace llvm::unittest; +static std::pair> findSrcDirMap(StringRef Argv0) { + SmallString<128> BaseDir = llvm::sys::path::parent_path(Argv0); + + llvm::sys::fs::make_absolute(BaseDir); + + SmallString<128> PathInSameDir = BaseDir; + llvm::sys::path::append(PathInSameDir, "llvm.srcdir.txt"); + + if (llvm::sys::fs::is_regular_file(PathInSameDir)) + return std::make_pair(true, std::move(PathInSameDir)); + + SmallString<128> PathInParentDir = llvm::sys::path::parent_path(BaseDir); + + llvm::sys::path::append(PathInParentDir, "llvm.srcdir.txt"); + if (llvm::sys::fs::is_regular_file(PathInParentDir)) + return std::make_pair(true, std::move(PathInParentDir)); + + return std::pair>(false, ""); +} + +static bool isInParentDir(StringRef Argv0) {} + SmallString<128> llvm::unittest::getInputFileDirectory(const char *Argv0) { - llvm::SmallString<128> Result = llvm::sys::path::parent_path(Argv0); - llvm::sys::fs::make_absolute(Result); - llvm::sys::path::append(Result, "llvm.srcdir.txt"); + bool Found = false; + SmallString<128> InputFilePath; + std::tie(Found, InputFilePath) = findSrcDirMap(Argv0); - EXPECT_TRUE(llvm::sys::fs::is_regular_file(Result)) - << "Unit test source directory file does not exist."; + EXPECT_TRUE(Found) << "Unit test source directory file does not exist."; - auto File = MemoryBuffer::getFile(Result); + auto File = MemoryBuffer::getFile(InputFilePath); EXPECT_TRUE(static_cast(File)) << "Could not open unit test source directory file."; - Result.clear(); - Result.append((*File)->getBuffer().trim()); - llvm::sys::path::append(Result, "Inputs"); - llvm::sys::path::native(Result); - return Result; + InputFilePath.clear(); + InputFilePath.append((*File)->getBuffer().trim()); + llvm::sys::path::append(InputFilePath, "Inputs"); + llvm::sys::path::native(InputFilePath); + return InputFilePath; } -- 2.11.0