diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-07-31 00:58:32 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-07-31 00:58:32 +0000 |
commit | c56419ed008706801749b151672ed88bfab855f2 (patch) | |
tree | c4a2083d284ca681444560ee64c514e2c91eddd8 /clang/lib/Basic/FileManager.cpp | |
parent | 532a13691c97c60387e6b0d0e1e88a6d92dbc555 (diff) | |
download | llvm-c56419ed008706801749b151672ed88bfab855f2.zip llvm-c56419ed008706801749b151672ed88bfab855f2.tar.gz llvm-c56419ed008706801749b151672ed88bfab855f2.tar.bz2 |
[modules] Fix issue where building a module from a relative path when -working-directory option is set, results in error.
The error was "module '<name>' was built in directory '<path>' but now resides in directory '<path>'
rdar://21330027
llvm-svn: 243718
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r-- | clang/lib/Basic/FileManager.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 4c84f1b..034ebc5 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -389,16 +389,28 @@ FileManager::getVirtualFile(StringRef Filename, off_t Size, return UFE; } -void FileManager::FixupRelativePath(SmallVectorImpl<char> &path) const { +bool FileManager::FixupRelativePath(SmallVectorImpl<char> &path) const { StringRef pathRef(path.data(), path.size()); if (FileSystemOpts.WorkingDir.empty() || llvm::sys::path::is_absolute(pathRef)) - return; + return false; SmallString<128> NewPath(FileSystemOpts.WorkingDir); llvm::sys::path::append(NewPath, pathRef); path = NewPath; + return true; +} + +bool FileManager::makeAbsolutePath(SmallVectorImpl<char> &Path) const { + bool Changed = FixupRelativePath(Path); + + if (!llvm::sys::path::is_absolute(StringRef(Path.data(), Path.size()))) { + llvm::sys::fs::make_absolute(Path); + Changed = true; + } + + return Changed; } llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> |