aboutsummaryrefslogtreecommitdiff
path: root/tools/clang-cc/Options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/clang-cc/Options.cpp')
-rw-r--r--tools/clang-cc/Options.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
index a18598ef7c..c97d4ca8c9 100644
--- a/tools/clang-cc/Options.cpp
+++ b/tools/clang-cc/Options.cpp
@@ -673,6 +673,10 @@ static llvm::cl::opt<bool>
UndefMacros("undef", llvm::cl::value_desc("macro"),
llvm::cl::desc("undef all system defines"));
+static llvm::cl::list<std::string>
+RemappedFiles("remap-file", llvm::cl::value_desc("<from>;<to>"),
+ llvm::cl::desc("replace the contents of the <from> file with the contents of the <to> file"));
+
}
//===----------------------------------------------------------------------===//
@@ -1071,6 +1075,20 @@ void clang::InitializePreprocessorOptions(PreprocessorOptions &Opts) {
for (unsigned i = 0, e = OrderedPaths.size(); i != e; ++i)
Opts.Includes.push_back(*OrderedPaths[i].second);
+
+ // Handle file remapping.
+ for (unsigned i = 0, e = RemappedFiles.size(); i != e; ++i) {
+ std::string::size_type Semi = RemappedFiles[i].find(';');
+ if (Semi == std::string::npos) {
+ // FIXME: Don't fail like this.
+ fprintf(stderr,
+ "error: -remap-file not of the form <from-file>;<to-file>\n");
+ continue;
+ }
+
+ Opts.addRemappedFile(llvm::StringRef(RemappedFiles[i].c_str(), Semi),
+ llvm::StringRef(RemappedFiles[i].c_str() + Semi + 1));
+ }
}
void clang::InitializeLangOptions(LangOptions &Options,