2 #include "llvm/Testing/Support/SupportHelpers.h"
4 #include "llvm/ADT/SmallString.h"
5 #include "llvm/ADT/Twine.h"
6 #include "llvm/Support/Error.h"
7 #include "llvm/Support/FileSystem.h"
8 #include "llvm/Support/MemoryBuffer.h"
9 #include "llvm/Support/Path.h"
11 #include "gtest/gtest.h"
14 using namespace llvm::unittest
;
16 static std::pair
<bool, SmallString
<128>> findSrcDirMap(StringRef Argv0
) {
17 SmallString
<128> BaseDir
= llvm::sys::path::parent_path(Argv0
);
19 llvm::sys::fs::make_absolute(BaseDir
);
21 SmallString
<128> PathInSameDir
= BaseDir
;
22 llvm::sys::path::append(PathInSameDir
, "llvm.srcdir.txt");
24 if (llvm::sys::fs::is_regular_file(PathInSameDir
))
25 return std::make_pair(true, std::move(PathInSameDir
));
27 SmallString
<128> PathInParentDir
= llvm::sys::path::parent_path(BaseDir
);
29 llvm::sys::path::append(PathInParentDir
, "llvm.srcdir.txt");
30 if (llvm::sys::fs::is_regular_file(PathInParentDir
))
31 return std::make_pair(true, std::move(PathInParentDir
));
33 return std::pair
<bool, SmallString
<128>>(false, {});
36 SmallString
<128> llvm::unittest::getInputFileDirectory(const char *Argv0
) {
38 SmallString
<128> InputFilePath
;
39 std::tie(Found
, InputFilePath
) = findSrcDirMap(Argv0
);
41 EXPECT_TRUE(Found
) << "Unit test source directory file does not exist.";
43 auto File
= MemoryBuffer::getFile(InputFilePath
);
45 EXPECT_TRUE(static_cast<bool>(File
))
46 << "Could not open unit test source directory file.";
48 InputFilePath
.clear();
49 InputFilePath
.append((*File
)->getBuffer().trim());
50 llvm::sys::path::append(InputFilePath
, "Inputs");
51 llvm::sys::path::native(InputFilePath
);