]> granicus.if.org Git - clang/commitdiff
clang-cc: Honor -help and -version when using new style option parsing.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 3 Dec 2009 07:01:58 +0000 (07:01 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 3 Dec 2009 07:01:58 +0000 (07:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90422 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/CC1Options.td
include/clang/Frontend/FrontendOptions.h
lib/Frontend/CompilerInvocation.cpp
tools/clang-cc/clang-cc.cpp

index b7db4b6d9429abd924994005ce2954bc6b6cbfd8..582b9c28acc34b07e86bd0499b02b64253bba381 100644 (file)
@@ -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 {
index ce60941534dfeba0447f50ef4347121038e676e7..36fea7f71337d481a2ca1d0722e4804c839fbf3f 100644 (file)
@@ -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
index 4f8ab50becdbe4df8b67304f1ec94eca2ee058da..ccf60fb9e383cf26475cbb4614736c99d4548243 100644 (file)
@@ -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;
index b189b4b51d658f6d4fbe62889e058bf2a1b24093..de8878f547b3cda0f9e98ea49b56790726219fa3 100644 (file)
@@ -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())