diff options
author | Arnaud A. de Grandmaison <arnaud.adegm@gmail.com> | 2012-07-10 16:56:35 +0000 |
---|---|---|
committer | Arnaud A. de Grandmaison <arnaud.adegm@gmail.com> | 2012-07-10 16:56:35 +0000 |
commit | 4187df5f7bdda66d2fbe64a3f2660ee3977f0d12 (patch) | |
tree | baedd49d77407d0b23084d24558bbdf450d8124f /lib/Tooling/CompilationDatabase.cpp | |
parent | 5ba0559f2f0ddd62de16547af514dbaf93b79585 (diff) |
Adds support for auto-detection of compilation databases, looking in a directory and all its parents.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159998 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Tooling/CompilationDatabase.cpp')
-rw-r--r-- | lib/Tooling/CompilationDatabase.cpp | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/lib/Tooling/CompilationDatabase.cpp b/lib/Tooling/CompilationDatabase.cpp index 8e911123bc..a06343ddab 100644 --- a/lib/Tooling/CompilationDatabase.cpp +++ b/lib/Tooling/CompilationDatabase.cpp @@ -122,23 +122,47 @@ CompilationDatabase::loadFromDirectory(StringRef BuildDirectory, return Database.take(); } -CompilationDatabase * -CompilationDatabase::autoDetectFromSource(StringRef SourceFile, - std::string &ErrorMessage) { - llvm::SmallString<1024> AbsolutePath(getAbsolutePath(SourceFile)); - StringRef Directory = llvm::sys::path::parent_path(AbsolutePath); +static CompilationDatabase * +findCompilationDatabaseFromDirectory(StringRef Directory) { while (!Directory.empty()) { std::string LoadErrorMessage; - if (CompilationDatabase *DB = loadFromDirectory(Directory, - LoadErrorMessage)) + + if (CompilationDatabase *DB = + CompilationDatabase::loadFromDirectory(Directory, LoadErrorMessage)) return DB; + Directory = llvm::sys::path::parent_path(Directory); } - ErrorMessage = ("Could not auto-detect compilation database for file \"" + - SourceFile + "\"").str(); return NULL; } +CompilationDatabase * +CompilationDatabase::autoDetectFromSource(StringRef SourceFile, + std::string &ErrorMessage) { + llvm::SmallString<1024> AbsolutePath(getAbsolutePath(SourceFile)); + StringRef Directory = llvm::sys::path::parent_path(AbsolutePath); + + CompilationDatabase *DB = findCompilationDatabaseFromDirectory(Directory); + + if (!DB) + ErrorMessage = ("Could not auto-detect compilation database for file \"" + + SourceFile + "\"").str(); + return DB; +} + +CompilationDatabase * +CompilationDatabase::autoDetectFromDirectory(StringRef SourceDir, + std::string &ErrorMessage) { + llvm::SmallString<1024> AbsolutePath(getAbsolutePath(SourceDir)); + + CompilationDatabase *DB = findCompilationDatabaseFromDirectory(AbsolutePath); + + if (!DB) + ErrorMessage = ("Could not auto-detect compilation database from directory \"" + + SourceDir + "\"").str(); + return DB; +} + FixedCompilationDatabase * FixedCompilationDatabase::loadFromCommandLine(int &Argc, const char **Argv, |