forked from OSchip/llvm-project
clang-check: Enable specification of additional compiler arguments
Summary: This adds two command-line parameters: -extra-arg and -extra-arg-before, which enable the user to pass additional parameters to the compiler command. Reviewers: klimek CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D919 llvm-svn: 183320
This commit is contained in:
parent
2773f1deb4
commit
951ad647a0
|
@ -0,0 +1,5 @@
|
|||
// RUN: clang-check "%s" -extra-arg=-Wunimplemented-warning -extra-arg-before=-Wunimplemented-warning-before -- -c 2>&1 | FileCheck %s
|
||||
|
||||
// CHECK: unknown warning option '-Wunimplemented-warning-before'
|
||||
// CHECK: unknown warning option '-Wunimplemented-warning'
|
||||
int a(){}
|
|
@ -70,6 +70,11 @@ static cl::opt<bool> FixWhatYouCan(
|
|||
"fix-what-you-can",
|
||||
cl::desc(Options->getOptionHelpText(options::OPT_fix_what_you_can)));
|
||||
|
||||
static cl::list<std::string> ArgsAfter("extra-arg",
|
||||
cl::desc("Additional argument to append to the compiler command line"));
|
||||
static cl::list<std::string> ArgsBefore("extra-arg-before",
|
||||
cl::desc("Additional argument to prepend to the compiler command line"));
|
||||
|
||||
namespace {
|
||||
|
||||
// FIXME: Move FixItRewriteInPlace from lib/Rewrite/Frontend/FrontendActions.cpp
|
||||
|
@ -123,6 +128,35 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class InsertAdjuster: public clang::tooling::ArgumentsAdjuster {
|
||||
public:
|
||||
enum Position { BEGIN, END };
|
||||
|
||||
InsertAdjuster(const CommandLineArguments &Extra, Position Pos)
|
||||
: Extra(Extra), Pos(Pos) {
|
||||
}
|
||||
|
||||
virtual CommandLineArguments
|
||||
Adjust(const CommandLineArguments &Args) LLVM_OVERRIDE {
|
||||
CommandLineArguments Return(Args);
|
||||
|
||||
CommandLineArguments::iterator I;
|
||||
if (Pos == END) {
|
||||
I = Return.end();
|
||||
} else {
|
||||
I = Return.begin();
|
||||
++I; // To leave the program name in place
|
||||
}
|
||||
|
||||
Return.insert(I, Extra.begin(), Extra.end());
|
||||
return Return;
|
||||
}
|
||||
|
||||
private:
|
||||
const CommandLineArguments Extra;
|
||||
const Position Pos;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
// Anonymous namespace here causes problems with gcc <= 4.4 on MacOS 10.6.
|
||||
|
@ -147,6 +181,12 @@ int main(int argc, const char **argv) {
|
|||
CommonOptionsParser OptionsParser(argc, argv);
|
||||
ClangTool Tool(OptionsParser.getCompilations(),
|
||||
OptionsParser.getSourcePathList());
|
||||
|
||||
if (ArgsAfter.size() > 0)
|
||||
Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsAfter, InsertAdjuster::END));
|
||||
if (ArgsBefore.size() > 0)
|
||||
Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsBefore, InsertAdjuster::BEGIN));
|
||||
|
||||
if (Fixit)
|
||||
return Tool.run(newFrontendActionFactory<FixItAction>());
|
||||
clang_check::ClangCheckActionFactory Factory;
|
||||
|
|
Loading…
Reference in New Issue