From: Daniel Dunbar Date: Thu, 3 Dec 2009 07:01:58 +0000 (+0000) Subject: clang-cc: Honor -help and -version when using new style option parsing. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9b5e9ae08defd14441acca1d7d4502b933bf6c5a;p=clang clang-cc: Honor -help and -version when using new style option parsing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90422 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/CC1Options.td b/include/clang/Driver/CC1Options.td index b7db4b6d94..582b9c28ac 100644 --- a/include/clang/Driver/CC1Options.td +++ b/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; def x : Separate<"-x">, HelpText<"Input language type">; def cxx_inheritance_view : Separate<"-cxx-inheritance-view">, MetaVarName<"">, @@ -212,6 +215,9 @@ def load : Separate<"-load">, MetaVarName<"">, 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; def Action_Group : OptionGroup<"">; let Group = Action_Group in { diff --git a/include/clang/Frontend/FrontendOptions.h b/include/clang/Frontend/FrontendOptions.h index ce60941534..36fea7f713 100644 --- a/include/clang/Frontend/FrontendOptions.h +++ b/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 > 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/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 4f8ab50bec..ccf60fb9e3 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/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/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index b189b4b51d..de8878f547 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/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 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())