Add a hook to supply a custom CompilationDatabase. To add a custom CompilationDatabase, make it implement findCompilationDatabaseForDirectory in CustomCompilationDatabase.h and set USE_COSTUM_COMPILATION_DATABASE.

Differential Revision: http://llvm-reviews.chandlerc.com/D4

llvm-svn: 160061
This commit is contained in:
Daniel Jasper 2012-07-11 19:13:13 +00:00
parent 4dce73af05
commit bb89ae9392
2 changed files with 46 additions and 0 deletions

View File

@ -18,6 +18,10 @@
#include "llvm/Support/Path.h"
#include "llvm/Support/system_error.h"
#ifdef USE_CUSTOM_COMPILATION_DATABASE
#include "CustomCompilationDatabase.h"
#endif
namespace clang {
namespace tooling {
@ -124,6 +128,11 @@ CompilationDatabase::loadFromDirectory(StringRef BuildDirectory,
static CompilationDatabase *
findCompilationDatabaseFromDirectory(StringRef Directory) {
#ifdef USE_CUSTOM_COMPILATION_DATABASE
if (CompilationDatabase *DB =
::findCompilationDatabaseForDirectory(Directory))
return DB;
#endif
while (!Directory.empty()) {
std::string LoadErrorMessage;

View File

@ -0,0 +1,37 @@
//===--- CustomCompilationDatabase.h --------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains a hook to supply a custom \c CompilationDatabase
// implementation.
//
// The mechanism can be used by IDEs or non-public code bases to integrate with
// their build system. Currently we support statically linking in an
// implementation of \c findCompilationDatabaseForDirectory and enabling it
// with -DUSE_CUSTOM_COMPILATION_DATABASE when compiling the Tooling library.
//
// FIXME: The strategy forward is to provide a plugin system that can load
// custom compilation databases and make enabling that a build option.
//
//===----------------------------------------------------------------------===//
#include "llvm/ADT/StringRef.h"
namespace clang {
namespace tooling {
class CompilationDatabase;
}
}
/// \brief Returns a CompilationDatabase for the given \c Directory.
///
/// \c Directory can be any directory within a project. This methods will
/// then try to find compilation database files in \c Directory or any of its
/// parents. If a compilation database cannot be found or loaded, returns NULL.
clang::tooling::CompilationDatabase *findCompilationDatabaseForDirectory(
llvm::StringRef Directory);