Author: labath Date: Wed Jun 5 11:23:30 2013 New Revision: 183320 URL: http://llvm.org/viewvc/llvm-project?rev=183320&view=rev Log: 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 Added: cfe/trunk/test/Tooling/clang-check-extra-arg.cpp Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp Added: cfe/trunk/test/Tooling/clang-check-extra-arg.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-extra-arg.cpp?rev=183320&view=auto ============================================================================== --- cfe/trunk/test/Tooling/clang-check-extra-arg.cpp (added) +++ cfe/trunk/test/Tooling/clang-check-extra-arg.cpp Wed Jun 5 11:23:30 2013 @@ -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(){} Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=183320&r1=183319&r2=183320&view=diff ============================================================================== --- cfe/trunk/tools/clang-check/ClangCheck.cpp (original) +++ cfe/trunk/tools/clang-check/ClangCheck.cpp Wed Jun 5 11:23:30 2013 @@ -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; _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
