diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-12-03 07:01:58 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-12-03 07:01:58 +0000 |
commit | 215ca5f199ab178f36079f3352065586adeb0a57 (patch) | |
tree | 0056be6ab0bb629a1dc497948aea41d742f2e734 /clang | |
parent | be6c95273ea16379288783fb83d52d767782bb6b (diff) | |
download | bcm5719-llvm-215ca5f199ab178f36079f3352065586adeb0a57.tar.gz bcm5719-llvm-215ca5f199ab178f36079f3352065586adeb0a57.zip |
clang-cc: Honor -help and -version when using new style option parsing.
llvm-svn: 90422
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 6 | ||||
-rw-r--r-- | clang/include/clang/Frontend/FrontendOptions.h | 4 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 6 | ||||
-rw-r--r-- | clang/tools/clang-cc/clang-cc.cpp | 16 |
4 files changed, 32 insertions, 0 deletions
diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index b7db4b6d942..582b9c28acc 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -201,6 +201,9 @@ def disable_free : Flag<"-disable-free">, HelpText<"Disable freeing of memory on exit">; def empty_input_only : Flag<"-empty-input-only">, HelpText<"Force running on an empty input file">; +def help : Flag<"-help">, + HelpText<"Print this help text">; +def _help : Flag<"--help">, Alias<help>; def x : Separate<"-x">, HelpText<"Input language type">; def cxx_inheritance_view : Separate<"-cxx-inheritance-view">, MetaVarName<"<class name>">, @@ -212,6 +215,9 @@ def load : Separate<"-load">, MetaVarName<"<dsopath>">, HelpText<"Load the named plugin (dynamic shared object)">; def plugin : Separate<"-plugin">, HelpText<"Use the named plugin action (use \"help\" to list available options)">; +def version : Flag<"-version">, + HelpText<"Print the compiler version">; +def _version : Flag<"--version">, Alias<version>; def Action_Group : OptionGroup<"<action group>">; let Group = Action_Group in { diff --git a/clang/include/clang/Frontend/FrontendOptions.h b/clang/include/clang/Frontend/FrontendOptions.h index ce60941534d..36fea7f7133 100644 --- a/clang/include/clang/Frontend/FrontendOptions.h +++ b/clang/include/clang/Frontend/FrontendOptions.h @@ -77,12 +77,14 @@ public: unsigned RelocatablePCH : 1; ///< When generating PCH files, /// instruct the PCH writer to create /// relocatable PCH files. + unsigned ShowHelp : 1; ///< Show the -help text. unsigned ShowMacrosInCodeCompletion : 1; ///< Show macros in code completion /// results. unsigned ShowStats : 1; ///< Show frontend performance /// metrics and statistics. unsigned ShowTimers : 1; ///< Show timers for individual /// actions. + unsigned ShowVersion : 1; ///< Show the -version text. /// The input files and their types. std::vector<std::pair<InputKind, std::string> > Inputs; @@ -116,9 +118,11 @@ public: ProgramAction = frontend::ParseSyntaxOnly; ActionName = ""; RelocatablePCH = 0; + ShowHelp = 0; ShowMacrosInCodeCompletion = 0; ShowStats = 0; ShowTimers = 0; + ShowVersion = 0; } /// getInputKindForExtension - Return the appropriate input kind for a file diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 4f8ab50becd..ccf60fb9e38 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -296,12 +296,16 @@ static void FrontendOptsToArgs(const FrontendOptions &Opts, Res.push_back("-empty-input-only"); if (Opts.RelocatablePCH) Res.push_back("-relocatable-pch"); + if (Opts.ShowHelp) + Res.push_back("-help"); if (Opts.ShowMacrosInCodeCompletion) Res.push_back("-code-completion-macros"); if (Opts.ShowStats) Res.push_back("-print-stats"); if (Opts.ShowTimers) Res.push_back("-ftime-report"); + if (Opts.ShowVersion) + Res.push_back("-version"); bool NeedLang = false; for (unsigned i = 0, e = Opts.Inputs.size(); i != e; ++i) @@ -888,9 +892,11 @@ ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Diagnostic &Diags) { Opts.OutputFile = getLastArgValue(Args, OPT_o); Opts.Plugins = getAllArgValues(Args, OPT_load); Opts.RelocatablePCH = Args.hasArg(OPT_relocatable_pch); + Opts.ShowHelp = Args.hasArg(OPT_help); Opts.ShowMacrosInCodeCompletion = Args.hasArg(OPT_code_completion_macros); Opts.ShowStats = Args.hasArg(OPT_print_stats); Opts.ShowTimers = Args.hasArg(OPT_ftime_report); + Opts.ShowVersion = Args.hasArg(OPT_version); Opts.ViewClassInheritance = getLastArgValue(Args, OPT_cxx_inheritance_view); FrontendOptions::InputKind DashX = FrontendOptions::IK_None; diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index b189b4b51d6..de8878f547b 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/tools/clang-cc/clang-cc.cpp @@ -311,6 +311,22 @@ int main(int argc, char **argv) { (void*)(intptr_t) GetBuiltinIncludePath, Diags); + // Honor -help. + if (Clang.getInvocation().getFrontendOpts().ShowHelp) { + llvm::OwningPtr<driver::OptTable> Opts(driver::createCC1OptTable()); + Opts->PrintHelp(llvm::outs(), "clang-cc", + "LLVM 'Clang' Compiler: http://clang.llvm.org"); + return 0; + } + + // Honor -version. + // + // FIXME: Use a better -version message? + if (Clang.getInvocation().getFrontendOpts().ShowVersion) { + llvm::cl::PrintVersionMessage(); + return 0; + } + // Create the actual diagnostics engine. Clang.createDiagnostics(argc, argv); if (!Clang.hasDiagnostics()) |