Try to speed up the slowest parts of the CommandLine library
[oota-llvm.git] / lib / Support / CommandLine.cpp
1 //===-- CommandLine.cpp - Command line parser implementation --------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This class implements a command line argument processor that is useful when
11 // creating a tool.  It provides a simple, minimalistic interface that is easily
12 // extensible and supports nonlocal (library) command line options.
13 //
14 // Note that rather than trying to figure out what this code does, you could try
15 // reading the library documentation located in docs/CommandLine.html
16 //
17 //===----------------------------------------------------------------------===//
18
19 #include "llvm/Support/CommandLine.h"
20 #include "llvm/Support/ErrorHandling.h"
21 #include "llvm/Support/MemoryBuffer.h"
22 #include "llvm/Support/ManagedStatic.h"
23 #include "llvm/Support/raw_ostream.h"
24 #include "llvm/Target/TargetRegistry.h"
25 #include "llvm/System/Host.h"
26 #include "llvm/System/Path.h"
27 #include "llvm/ADT/OwningPtr.h"
28 #include "llvm/ADT/StringMap.h"
29 #include "llvm/Config/config.h"
30 #include <set>
31 #include <cerrno>
32 #include <cstdlib>
33 using namespace llvm;
34 using namespace cl;
35
36 //===----------------------------------------------------------------------===//
37 // Template instantiations and anchors.
38 //
39 TEMPLATE_INSTANTIATION(class basic_parser<bool>);
40 TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
41 TEMPLATE_INSTANTIATION(class basic_parser<int>);
42 TEMPLATE_INSTANTIATION(class basic_parser<unsigned>);
43 TEMPLATE_INSTANTIATION(class basic_parser<double>);
44 TEMPLATE_INSTANTIATION(class basic_parser<float>);
45 TEMPLATE_INSTANTIATION(class basic_parser<std::string>);
46 TEMPLATE_INSTANTIATION(class basic_parser<char>);
47
48 TEMPLATE_INSTANTIATION(class opt<unsigned>);
49 TEMPLATE_INSTANTIATION(class opt<int>);
50 TEMPLATE_INSTANTIATION(class opt<std::string>);
51 TEMPLATE_INSTANTIATION(class opt<char>);
52 TEMPLATE_INSTANTIATION(class opt<bool>);
53
54 void Option::anchor() {}
55 void basic_parser_impl::anchor() {}
56 void parser<bool>::anchor() {}
57 void parser<boolOrDefault>::anchor() {}
58 void parser<int>::anchor() {}
59 void parser<unsigned>::anchor() {}
60 void parser<double>::anchor() {}
61 void parser<float>::anchor() {}
62 void parser<std::string>::anchor() {}
63 void parser<char>::anchor() {}
64
65 //===----------------------------------------------------------------------===//
66
67 // Globals for name and overview of program.  Program name is not a string to
68 // avoid static ctor/dtor issues.
69 static char ProgramName[80] = "<premain>";
70 static const char *ProgramOverview = 0;
71
72 // This collects additional help to be printed.
73 static ManagedStatic<std::vector<const char*> > MoreHelp;
74
75 extrahelp::extrahelp(const char *Help)
76   : morehelp(Help) {
77   MoreHelp->push_back(Help);
78 }
79
80 static bool OptionListChanged = false;
81
82 // MarkOptionsChanged - Internal helper function.
83 void cl::MarkOptionsChanged() {
84   OptionListChanged = true;
85 }
86
87 /// RegisteredOptionList - This is the list of the command line options that
88 /// have statically constructed themselves.
89 static Option *RegisteredOptionList = 0;
90
91 void Option::addArgument() {
92   assert(NextRegistered == 0 && "argument multiply registered!");
93
94   NextRegistered = RegisteredOptionList;
95   RegisteredOptionList = this;
96   MarkOptionsChanged();
97 }
98
99
100 //===----------------------------------------------------------------------===//
101 // Basic, shared command line option processing machinery.
102 //
103
104 /// GetOptionInfo - Scan the list of registered options, turning them into data
105 /// structures that are easier to handle.
106 static void GetOptionInfo(std::vector<Option*> &PositionalOpts,
107                           std::vector<Option*> &SinkOpts,
108                           StringMap<Option*> &OptionsMap) {
109   std::vector<const char*> OptionNames;
110   Option *CAOpt = 0;  // The ConsumeAfter option if it exists.
111   for (Option *O = RegisteredOptionList; O; O = O->getNextRegisteredOption()) {
112     // If this option wants to handle multiple option names, get the full set.
113     // This handles enum options like "-O1 -O2" etc.
114     O->getExtraOptionNames(OptionNames);
115     if (O->ArgStr[0])
116       OptionNames.push_back(O->ArgStr);
117
118     // Handle named options.
119     for (size_t i = 0, e = OptionNames.size(); i != e; ++i) {
120       // Add argument to the argument map!
121       if (OptionsMap.GetOrCreateValue(OptionNames[i], O).second != O) {
122         errs() << ProgramName << ": CommandLine Error: Argument '"
123              << OptionNames[i] << "' defined more than once!\n";
124       }
125     }
126
127     OptionNames.clear();
128
129     // Remember information about positional options.
130     if (O->getFormattingFlag() == cl::Positional)
131       PositionalOpts.push_back(O);
132     else if (O->getMiscFlags() & cl::Sink) // Remember sink options
133       SinkOpts.push_back(O);
134     else if (O->getNumOccurrencesFlag() == cl::ConsumeAfter) {
135       if (CAOpt)
136         O->error("Cannot specify more than one option with cl::ConsumeAfter!");
137       CAOpt = O;
138     }
139   }
140
141   if (CAOpt)
142     PositionalOpts.push_back(CAOpt);
143
144   // Make sure that they are in order of registration not backwards.
145   std::reverse(PositionalOpts.begin(), PositionalOpts.end());
146 }
147
148
149 /// LookupOption - Lookup the option specified by the specified option on the
150 /// command line.  If there is a value specified (after an equal sign) return
151 /// that as well.
152 static Option *LookupOption(const char *&Arg, const char *&Value,
153                             StringMap<Option*> &OptionsMap) {
154   while (*Arg == '-') ++Arg;  // Eat leading dashes
155
156   const char *ArgEnd = Arg;
157   while (*ArgEnd && *ArgEnd != '=')
158     ++ArgEnd; // Scan till end of argument name.
159
160   if (*ArgEnd == '=')  // If we have an equals sign...
161     Value = ArgEnd+1;  // Get the value, not the equals
162
163
164   if (*Arg == 0) return 0;
165
166   // Look up the option.
167   StringMap<Option*>::iterator I =
168     OptionsMap.find(llvm::StringRef(Arg, ArgEnd-Arg));
169   return I != OptionsMap.end() ? I->second : 0;
170 }
171
172 static inline bool ProvideOption(Option *Handler, const char *ArgName,
173                                  const char *Value, int argc, char **argv,
174                                  int &i) {
175   // Is this a multi-argument option?
176   unsigned NumAdditionalVals = Handler->getNumAdditionalVals();
177
178   // Enforce value requirements
179   switch (Handler->getValueExpectedFlag()) {
180   case ValueRequired:
181     if (Value == 0) {       // No value specified?
182       if (i+1 < argc) {     // Steal the next argument, like for '-o filename'
183         Value = argv[++i];
184       } else {
185         return Handler->error("requires a value!");
186       }
187     }
188     break;
189   case ValueDisallowed:
190     if (NumAdditionalVals > 0)
191       return Handler->error("multi-valued option specified"
192       " with ValueDisallowed modifier!");
193
194     if (Value)
195       return Handler->error("does not allow a value! '" +
196                             std::string(Value) + "' specified.");
197     break;
198   case ValueOptional:
199     break;
200   default:
201     errs() << ProgramName
202          << ": Bad ValueMask flag! CommandLine usage error:"
203          << Handler->getValueExpectedFlag() << "\n";
204     llvm_unreachable(0);
205   }
206
207   // If this isn't a multi-arg option, just run the handler.
208   if (NumAdditionalVals == 0) {
209     return Handler->addOccurrence(i, ArgName, Value ? Value : "");
210   }
211   // If it is, run the handle several times.
212   else {
213     bool MultiArg = false;
214
215     if (Value) {
216       if (Handler->addOccurrence(i, ArgName, Value, MultiArg))
217         return true;
218       --NumAdditionalVals;
219       MultiArg = true;
220     }
221
222     while (NumAdditionalVals > 0) {
223
224       if (i+1 < argc) {
225         Value = argv[++i];
226       } else {
227         return Handler->error("not enough values!");
228       }
229       if (Handler->addOccurrence(i, ArgName, Value, MultiArg))
230         return true;
231       MultiArg = true;
232       --NumAdditionalVals;
233     }
234     return false;
235   }
236 }
237
238 static bool ProvidePositionalOption(Option *Handler, const std::string &Arg,
239                                     int i) {
240   int Dummy = i;
241   return ProvideOption(Handler, Handler->ArgStr, Arg.c_str(), 0, 0, Dummy);
242 }
243
244
245 // Option predicates...
246 static inline bool isGrouping(const Option *O) {
247   return O->getFormattingFlag() == cl::Grouping;
248 }
249 static inline bool isPrefixedOrGrouping(const Option *O) {
250   return isGrouping(O) || O->getFormattingFlag() == cl::Prefix;
251 }
252
253 // getOptionPred - Check to see if there are any options that satisfy the
254 // specified predicate with names that are the prefixes in Name.  This is
255 // checked by progressively stripping characters off of the name, checking to
256 // see if there options that satisfy the predicate.  If we find one, return it,
257 // otherwise return null.
258 //
259 static Option *getOptionPred(std::string Name, size_t &Length,
260                              bool (*Pred)(const Option*),
261                              StringMap<Option*> &OptionsMap) {
262
263   StringMap<Option*>::iterator OMI = OptionsMap.find(Name);
264   if (OMI != OptionsMap.end() && Pred(OMI->second)) {
265     Length = Name.length();
266     return OMI->second;
267   }
268
269   if (Name.size() == 1) return 0;
270   do {
271     Name.erase(Name.end()-1, Name.end());   // Chop off the last character...
272     OMI = OptionsMap.find(Name);
273
274     // Loop while we haven't found an option and Name still has at least two
275     // characters in it (so that the next iteration will not be the empty
276     // string...
277   } while ((OMI == OptionsMap.end() || !Pred(OMI->second)) && Name.size() > 1);
278
279   if (OMI != OptionsMap.end() && Pred(OMI->second)) {
280     Length = Name.length();
281     return OMI->second;    // Found one!
282   }
283   return 0;                // No option found!
284 }
285
286 static bool RequiresValue(const Option *O) {
287   return O->getNumOccurrencesFlag() == cl::Required ||
288          O->getNumOccurrencesFlag() == cl::OneOrMore;
289 }
290
291 static bool EatsUnboundedNumberOfValues(const Option *O) {
292   return O->getNumOccurrencesFlag() == cl::ZeroOrMore ||
293          O->getNumOccurrencesFlag() == cl::OneOrMore;
294 }
295
296 /// ParseCStringVector - Break INPUT up wherever one or more
297 /// whitespace characters are found, and store the resulting tokens in
298 /// OUTPUT. The tokens stored in OUTPUT are dynamically allocated
299 /// using strdup (), so it is the caller's responsibility to free ()
300 /// them later.
301 ///
302 static void ParseCStringVector(std::vector<char *> &output,
303                                const char *input) {
304   // Characters which will be treated as token separators:
305   static const char *const delims = " \v\f\t\r\n";
306
307   std::string work (input);
308   // Skip past any delims at head of input string.
309   size_t pos = work.find_first_not_of (delims);
310   // If the string consists entirely of delims, then exit early.
311   if (pos == std::string::npos) return;
312   // Otherwise, jump forward to beginning of first word.
313   work = work.substr (pos);
314   // Find position of first delimiter.
315   pos = work.find_first_of (delims);
316
317   while (!work.empty() && pos != std::string::npos) {
318     // Everything from 0 to POS is the next word to copy.
319     output.push_back (strdup (work.substr (0,pos).c_str ()));
320     // Is there another word in the string?
321     size_t nextpos = work.find_first_not_of (delims, pos + 1);
322     if (nextpos != std::string::npos) {
323       // Yes? Then remove delims from beginning ...
324       work = work.substr (work.find_first_not_of (delims, pos + 1));
325       // and find the end of the word.
326       pos = work.find_first_of (delims);
327     } else {
328       // No? (Remainder of string is delims.) End the loop.
329       work = "";
330       pos = std::string::npos;
331     }
332   }
333
334   // If `input' ended with non-delim char, then we'll get here with
335   // the last word of `input' in `work'; copy it now.
336   if (!work.empty ()) {
337     output.push_back (strdup (work.c_str ()));
338   }
339 }
340
341 /// ParseEnvironmentOptions - An alternative entry point to the
342 /// CommandLine library, which allows you to read the program's name
343 /// from the caller (as PROGNAME) and its command-line arguments from
344 /// an environment variable (whose name is given in ENVVAR).
345 ///
346 void cl::ParseEnvironmentOptions(const char *progName, const char *envVar,
347                                  const char *Overview, bool ReadResponseFiles) {
348   // Check args.
349   assert(progName && "Program name not specified");
350   assert(envVar && "Environment variable name missing");
351
352   // Get the environment variable they want us to parse options out of.
353   const char *envValue = getenv(envVar);
354   if (!envValue)
355     return;
356
357   // Get program's "name", which we wouldn't know without the caller
358   // telling us.
359   std::vector<char*> newArgv;
360   newArgv.push_back(strdup(progName));
361
362   // Parse the value of the environment variable into a "command line"
363   // and hand it off to ParseCommandLineOptions().
364   ParseCStringVector(newArgv, envValue);
365   int newArgc = static_cast<int>(newArgv.size());
366   ParseCommandLineOptions(newArgc, &newArgv[0], Overview, ReadResponseFiles);
367
368   // Free all the strdup()ed strings.
369   for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
370        i != e; ++i)
371     free (*i);
372 }
373
374
375 /// ExpandResponseFiles - Copy the contents of argv into newArgv,
376 /// substituting the contents of the response files for the arguments
377 /// of type @file.
378 static void ExpandResponseFiles(int argc, char** argv,
379                                 std::vector<char*>& newArgv) {
380   for (int i = 1; i != argc; ++i) {
381     char* arg = argv[i];
382
383     if (arg[0] == '@') {
384
385       sys::PathWithStatus respFile(++arg);
386
387       // Check that the response file is not empty (mmap'ing empty
388       // files can be problematic).
389       const sys::FileStatus *FileStat = respFile.getFileStatus();
390       if (FileStat && FileStat->getSize() != 0) {
391
392         // Mmap the response file into memory.
393         OwningPtr<MemoryBuffer>
394           respFilePtr(MemoryBuffer::getFile(respFile.c_str()));
395
396         // If we could open the file, parse its contents, otherwise
397         // pass the @file option verbatim.
398
399         // TODO: we should also support recursive loading of response files,
400         // since this is how gcc behaves. (From their man page: "The file may
401         // itself contain additional @file options; any such options will be
402         // processed recursively.")
403
404         if (respFilePtr != 0) {
405           ParseCStringVector(newArgv, respFilePtr->getBufferStart());
406           continue;
407         }
408       }
409     }
410     newArgv.push_back(strdup(arg));
411   }
412 }
413
414 void cl::ParseCommandLineOptions(int argc, char **argv,
415                                  const char *Overview, bool ReadResponseFiles) {
416   // Process all registered options.
417   std::vector<Option*> PositionalOpts;
418   std::vector<Option*> SinkOpts;
419   StringMap<Option*> Opts;
420   GetOptionInfo(PositionalOpts, SinkOpts, Opts);
421
422   assert((!Opts.empty() || !PositionalOpts.empty()) &&
423          "No options specified!");
424
425   // Expand response files.
426   std::vector<char*> newArgv;
427   if (ReadResponseFiles) {
428     newArgv.push_back(strdup(argv[0]));
429     ExpandResponseFiles(argc, argv, newArgv);
430     argv = &newArgv[0];
431     argc = static_cast<int>(newArgv.size());
432   }
433
434   // Copy the program name into ProgName, making sure not to overflow it.
435   std::string ProgName = sys::Path(argv[0]).getLast();
436   if (ProgName.size() > 79) ProgName.resize(79);
437   strcpy(ProgramName, ProgName.c_str());
438
439   ProgramOverview = Overview;
440   bool ErrorParsing = false;
441
442   // Check out the positional arguments to collect information about them.
443   unsigned NumPositionalRequired = 0;
444
445   // Determine whether or not there are an unlimited number of positionals
446   bool HasUnlimitedPositionals = false;
447
448   Option *ConsumeAfterOpt = 0;
449   if (!PositionalOpts.empty()) {
450     if (PositionalOpts[0]->getNumOccurrencesFlag() == cl::ConsumeAfter) {
451       assert(PositionalOpts.size() > 1 &&
452              "Cannot specify cl::ConsumeAfter without a positional argument!");
453       ConsumeAfterOpt = PositionalOpts[0];
454     }
455
456     // Calculate how many positional values are _required_.
457     bool UnboundedFound = false;
458     for (size_t i = ConsumeAfterOpt != 0, e = PositionalOpts.size();
459          i != e; ++i) {
460       Option *Opt = PositionalOpts[i];
461       if (RequiresValue(Opt))
462         ++NumPositionalRequired;
463       else if (ConsumeAfterOpt) {
464         // ConsumeAfter cannot be combined with "optional" positional options
465         // unless there is only one positional argument...
466         if (PositionalOpts.size() > 2)
467           ErrorParsing |=
468             Opt->error("error - this positional option will never be matched, "
469                        "because it does not Require a value, and a "
470                        "cl::ConsumeAfter option is active!");
471       } else if (UnboundedFound && !Opt->ArgStr[0]) {
472         // This option does not "require" a value...  Make sure this option is
473         // not specified after an option that eats all extra arguments, or this
474         // one will never get any!
475         //
476         ErrorParsing |= Opt->error("error - option can never match, because "
477                                    "another positional argument will match an "
478                                    "unbounded number of values, and this option"
479                                    " does not require a value!");
480       }
481       UnboundedFound |= EatsUnboundedNumberOfValues(Opt);
482     }
483     HasUnlimitedPositionals = UnboundedFound || ConsumeAfterOpt;
484   }
485
486   // PositionalVals - A vector of "positional" arguments we accumulate into
487   // the process at the end...
488   //
489   std::vector<std::pair<std::string,unsigned> > PositionalVals;
490
491   // If the program has named positional arguments, and the name has been run
492   // across, keep track of which positional argument was named.  Otherwise put
493   // the positional args into the PositionalVals list...
494   Option *ActivePositionalArg = 0;
495
496   // Loop over all of the arguments... processing them.
497   bool DashDashFound = false;  // Have we read '--'?
498   for (int i = 1; i < argc; ++i) {
499     Option *Handler = 0;
500     const char *Value = 0;
501     const char *ArgName = "";
502
503     // If the option list changed, this means that some command line
504     // option has just been registered or deregistered.  This can occur in
505     // response to things like -load, etc.  If this happens, rescan the options.
506     if (OptionListChanged) {
507       PositionalOpts.clear();
508       SinkOpts.clear();
509       Opts.clear();
510       GetOptionInfo(PositionalOpts, SinkOpts, Opts);
511       OptionListChanged = false;
512     }
513
514     // Check to see if this is a positional argument.  This argument is
515     // considered to be positional if it doesn't start with '-', if it is "-"
516     // itself, or if we have seen "--" already.
517     //
518     if (argv[i][0] != '-' || argv[i][1] == 0 || DashDashFound) {
519       // Positional argument!
520       if (ActivePositionalArg) {
521         ProvidePositionalOption(ActivePositionalArg, argv[i], i);
522         continue;  // We are done!
523       } else if (!PositionalOpts.empty()) {
524         PositionalVals.push_back(std::make_pair(argv[i],i));
525
526         // All of the positional arguments have been fulfulled, give the rest to
527         // the consume after option... if it's specified...
528         //
529         if (PositionalVals.size() >= NumPositionalRequired &&
530             ConsumeAfterOpt != 0) {
531           for (++i; i < argc; ++i)
532             PositionalVals.push_back(std::make_pair(argv[i],i));
533           break;   // Handle outside of the argument processing loop...
534         }
535
536         // Delay processing positional arguments until the end...
537         continue;
538       }
539     } else if (argv[i][0] == '-' && argv[i][1] == '-' && argv[i][2] == 0 &&
540                !DashDashFound) {
541       DashDashFound = true;  // This is the mythical "--"?
542       continue;              // Don't try to process it as an argument itself.
543     } else if (ActivePositionalArg &&
544                (ActivePositionalArg->getMiscFlags() & PositionalEatsArgs)) {
545       // If there is a positional argument eating options, check to see if this
546       // option is another positional argument.  If so, treat it as an argument,
547       // otherwise feed it to the eating positional.
548       ArgName = argv[i]+1;
549       Handler = LookupOption(ArgName, Value, Opts);
550       if (!Handler || Handler->getFormattingFlag() != cl::Positional) {
551         ProvidePositionalOption(ActivePositionalArg, argv[i], i);
552         continue;  // We are done!
553       }
554
555     } else {     // We start with a '-', must be an argument...
556       ArgName = argv[i]+1;
557       Handler = LookupOption(ArgName, Value, Opts);
558
559       // Check to see if this "option" is really a prefixed or grouped argument.
560       if (Handler == 0) {
561         std::string RealName(ArgName);
562         if (RealName.size() > 1) {
563           size_t Length = 0;
564           Option *PGOpt = getOptionPred(RealName, Length, isPrefixedOrGrouping,
565                                         Opts);
566
567           // If the option is a prefixed option, then the value is simply the
568           // rest of the name...  so fall through to later processing, by
569           // setting up the argument name flags and value fields.
570           //
571           if (PGOpt && PGOpt->getFormattingFlag() == cl::Prefix) {
572             Value = ArgName+Length;
573             assert(Opts.find(std::string(ArgName, Value)) != Opts.end() &&
574                    Opts.find(std::string(ArgName, Value))->second == PGOpt);
575             Handler = PGOpt;
576           } else if (PGOpt) {
577             // This must be a grouped option... handle them now.
578             assert(isGrouping(PGOpt) && "Broken getOptionPred!");
579
580             do {
581               // Move current arg name out of RealName into RealArgName...
582               std::string RealArgName(RealName.begin(),
583                                       RealName.begin() + Length);
584               RealName.erase(RealName.begin(), RealName.begin() + Length);
585
586               // Because ValueRequired is an invalid flag for grouped arguments,
587               // we don't need to pass argc/argv in...
588               //
589               assert(PGOpt->getValueExpectedFlag() != cl::ValueRequired &&
590                      "Option can not be cl::Grouping AND cl::ValueRequired!");
591               int Dummy;
592               ErrorParsing |= ProvideOption(PGOpt, RealArgName.c_str(),
593                                             0, 0, 0, Dummy);
594
595               // Get the next grouping option...
596               PGOpt = getOptionPred(RealName, Length, isGrouping, Opts);
597             } while (PGOpt && Length != RealName.size());
598
599             Handler = PGOpt; // Ate all of the options.
600           }
601         }
602       }
603     }
604
605     if (Handler == 0) {
606       if (SinkOpts.empty()) {
607         errs() << ProgramName << ": Unknown command line argument '"
608              << argv[i] << "'.  Try: '" << argv[0] << " --help'\n";
609         ErrorParsing = true;
610       } else {
611         for (std::vector<Option*>::iterator I = SinkOpts.begin(),
612                E = SinkOpts.end(); I != E ; ++I)
613           (*I)->addOccurrence(i, "", argv[i]);
614       }
615       continue;
616     }
617
618     // Check to see if this option accepts a comma separated list of values.  If
619     // it does, we have to split up the value into multiple values...
620     if (Value && Handler->getMiscFlags() & CommaSeparated) {
621       std::string Val(Value);
622       std::string::size_type Pos = Val.find(',');
623
624       while (Pos != std::string::npos) {
625         // Process the portion before the comma...
626         ErrorParsing |= ProvideOption(Handler, ArgName,
627                                       std::string(Val.begin(),
628                                                   Val.begin()+Pos).c_str(),
629                                       argc, argv, i);
630         // Erase the portion before the comma, AND the comma...
631         Val.erase(Val.begin(), Val.begin()+Pos+1);
632         Value += Pos+1;  // Increment the original value pointer as well...
633
634         // Check for another comma...
635         Pos = Val.find(',');
636       }
637     }
638
639     // If this is a named positional argument, just remember that it is the
640     // active one...
641     if (Handler->getFormattingFlag() == cl::Positional)
642       ActivePositionalArg = Handler;
643     else
644       ErrorParsing |= ProvideOption(Handler, ArgName, Value, argc, argv, i);
645   }
646
647   // Check and handle positional arguments now...
648   if (NumPositionalRequired > PositionalVals.size()) {
649     errs() << ProgramName
650          << ": Not enough positional command line arguments specified!\n"
651          << "Must specify at least " << NumPositionalRequired
652          << " positional arguments: See: " << argv[0] << " --help\n";
653
654     ErrorParsing = true;
655   } else if (!HasUnlimitedPositionals
656              && PositionalVals.size() > PositionalOpts.size()) {
657     errs() << ProgramName
658          << ": Too many positional arguments specified!\n"
659          << "Can specify at most " << PositionalOpts.size()
660          << " positional arguments: See: " << argv[0] << " --help\n";
661     ErrorParsing = true;
662
663   } else if (ConsumeAfterOpt == 0) {
664     // Positional args have already been handled if ConsumeAfter is specified...
665     unsigned ValNo = 0, NumVals = static_cast<unsigned>(PositionalVals.size());
666     for (size_t i = 0, e = PositionalOpts.size(); i != e; ++i) {
667       if (RequiresValue(PositionalOpts[i])) {
668         ProvidePositionalOption(PositionalOpts[i], PositionalVals[ValNo].first,
669                                 PositionalVals[ValNo].second);
670         ValNo++;
671         --NumPositionalRequired;  // We fulfilled our duty...
672       }
673
674       // If we _can_ give this option more arguments, do so now, as long as we
675       // do not give it values that others need.  'Done' controls whether the
676       // option even _WANTS_ any more.
677       //
678       bool Done = PositionalOpts[i]->getNumOccurrencesFlag() == cl::Required;
679       while (NumVals-ValNo > NumPositionalRequired && !Done) {
680         switch (PositionalOpts[i]->getNumOccurrencesFlag()) {
681         case cl::Optional:
682           Done = true;          // Optional arguments want _at most_ one value
683           // FALL THROUGH
684         case cl::ZeroOrMore:    // Zero or more will take all they can get...
685         case cl::OneOrMore:     // One or more will take all they can get...
686           ProvidePositionalOption(PositionalOpts[i],
687                                   PositionalVals[ValNo].first,
688                                   PositionalVals[ValNo].second);
689           ValNo++;
690           break;
691         default:
692           llvm_unreachable("Internal error, unexpected NumOccurrences flag in "
693                  "positional argument processing!");
694         }
695       }
696     }
697   } else {
698     assert(ConsumeAfterOpt && NumPositionalRequired <= PositionalVals.size());
699     unsigned ValNo = 0;
700     for (size_t j = 1, e = PositionalOpts.size(); j != e; ++j)
701       if (RequiresValue(PositionalOpts[j])) {
702         ErrorParsing |= ProvidePositionalOption(PositionalOpts[j],
703                                                 PositionalVals[ValNo].first,
704                                                 PositionalVals[ValNo].second);
705         ValNo++;
706       }
707
708     // Handle the case where there is just one positional option, and it's
709     // optional.  In this case, we want to give JUST THE FIRST option to the
710     // positional option and keep the rest for the consume after.  The above
711     // loop would have assigned no values to positional options in this case.
712     //
713     if (PositionalOpts.size() == 2 && ValNo == 0 && !PositionalVals.empty()) {
714       ErrorParsing |= ProvidePositionalOption(PositionalOpts[1],
715                                               PositionalVals[ValNo].first,
716                                               PositionalVals[ValNo].second);
717       ValNo++;
718     }
719
720     // Handle over all of the rest of the arguments to the
721     // cl::ConsumeAfter command line option...
722     for (; ValNo != PositionalVals.size(); ++ValNo)
723       ErrorParsing |= ProvidePositionalOption(ConsumeAfterOpt,
724                                               PositionalVals[ValNo].first,
725                                               PositionalVals[ValNo].second);
726   }
727
728   // Loop over args and make sure all required args are specified!
729   for (StringMap<Option*>::iterator I = Opts.begin(),
730          E = Opts.end(); I != E; ++I) {
731     switch (I->second->getNumOccurrencesFlag()) {
732     case Required:
733     case OneOrMore:
734       if (I->second->getNumOccurrences() == 0) {
735         I->second->error("must be specified at least once!");
736         ErrorParsing = true;
737       }
738       // Fall through
739     default:
740       break;
741     }
742   }
743
744   // Free all of the memory allocated to the map.  Command line options may only
745   // be processed once!
746   Opts.clear();
747   PositionalOpts.clear();
748   MoreHelp->clear();
749
750   // Free the memory allocated by ExpandResponseFiles.
751   if (ReadResponseFiles) {
752     // Free all the strdup()ed strings.
753     for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
754          i != e; ++i)
755       free (*i);
756   }
757
758   // If we had an error processing our arguments, don't let the program execute
759   if (ErrorParsing) exit(1);
760 }
761
762 //===----------------------------------------------------------------------===//
763 // Option Base class implementation
764 //
765
766 bool Option::error(std::string Message, const char *ArgName) {
767   if (ArgName == 0) ArgName = ArgStr;
768   if (ArgName[0] == 0)
769     errs() << HelpStr;  // Be nice for positional arguments
770   else
771     errs() << ProgramName << ": for the -" << ArgName;
772
773   errs() << " option: " << Message << "\n";
774   return true;
775 }
776
777 bool Option::addOccurrence(unsigned pos, const char *ArgName,
778                            const std::string &Value,
779                            bool MultiArg) {
780   if (!MultiArg)
781     NumOccurrences++;   // Increment the number of times we have been seen
782
783   switch (getNumOccurrencesFlag()) {
784   case Optional:
785     if (NumOccurrences > 1)
786       return error("may only occur zero or one times!", ArgName);
787     break;
788   case Required:
789     if (NumOccurrences > 1)
790       return error("must occur exactly one time!", ArgName);
791     // Fall through
792   case OneOrMore:
793   case ZeroOrMore:
794   case ConsumeAfter: break;
795   default: return error("bad num occurrences flag value!");
796   }
797
798   return handleOccurrence(pos, ArgName, Value);
799 }
800
801
802 // getValueStr - Get the value description string, using "DefaultMsg" if nothing
803 // has been specified yet.
804 //
805 static const char *getValueStr(const Option &O, const char *DefaultMsg) {
806   if (O.ValueStr[0] == 0) return DefaultMsg;
807   return O.ValueStr;
808 }
809
810 //===----------------------------------------------------------------------===//
811 // cl::alias class implementation
812 //
813
814 // Return the width of the option tag for printing...
815 size_t alias::getOptionWidth() const {
816   return std::strlen(ArgStr)+6;
817 }
818
819 // Print out the option for the alias.
820 void alias::printOptionInfo(size_t GlobalWidth) const {
821   size_t L = std::strlen(ArgStr);
822   errs() << "  -" << ArgStr << std::string(GlobalWidth-L-6, ' ') << " - "
823          << HelpStr << "\n";
824 }
825
826
827
828 //===----------------------------------------------------------------------===//
829 // Parser Implementation code...
830 //
831
832 // basic_parser implementation
833 //
834
835 // Return the width of the option tag for printing...
836 size_t basic_parser_impl::getOptionWidth(const Option &O) const {
837   size_t Len = std::strlen(O.ArgStr);
838   if (const char *ValName = getValueName())
839     Len += std::strlen(getValueStr(O, ValName))+3;
840
841   return Len + 6;
842 }
843
844 // printOptionInfo - Print out information about this option.  The
845 // to-be-maintained width is specified.
846 //
847 void basic_parser_impl::printOptionInfo(const Option &O,
848                                         size_t GlobalWidth) const {
849   outs() << "  -" << O.ArgStr;
850
851   if (const char *ValName = getValueName())
852     outs() << "=<" << getValueStr(O, ValName) << '>';
853
854   outs().indent(GlobalWidth-getOptionWidth(O)) << " - " << O.HelpStr << '\n';
855 }
856
857
858
859
860 // parser<bool> implementation
861 //
862 bool parser<bool>::parse(Option &O, const char *ArgName,
863                          const std::string &Arg, bool &Value) {
864   if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
865       Arg == "1") {
866     Value = true;
867   } else if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
868     Value = false;
869   } else {
870     return O.error("'" + Arg +
871                    "' is invalid value for boolean argument! Try 0 or 1");
872   }
873   return false;
874 }
875
876 // parser<boolOrDefault> implementation
877 //
878 bool parser<boolOrDefault>::parse(Option &O, const char *ArgName,
879                          const std::string &Arg, boolOrDefault &Value) {
880   if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
881       Arg == "1") {
882     Value = BOU_TRUE;
883   } else if (Arg == "false" || Arg == "FALSE"
884              || Arg == "False" || Arg == "0") {
885     Value = BOU_FALSE;
886   } else {
887     return O.error("'" + Arg +
888                    "' is invalid value for boolean argument! Try 0 or 1");
889   }
890   return false;
891 }
892
893 // parser<int> implementation
894 //
895 bool parser<int>::parse(Option &O, const char *ArgName,
896                         const std::string &Arg, int &Value) {
897   char *End;
898   Value = (int)strtol(Arg.c_str(), &End, 0);
899   if (*End != 0)
900     return O.error("'" + Arg + "' value invalid for integer argument!");
901   return false;
902 }
903
904 // parser<unsigned> implementation
905 //
906 bool parser<unsigned>::parse(Option &O, const char *ArgName,
907                              const std::string &Arg, unsigned &Value) {
908   char *End;
909   errno = 0;
910   unsigned long V = strtoul(Arg.c_str(), &End, 0);
911   Value = (unsigned)V;
912   if (((V == ULONG_MAX) && (errno == ERANGE))
913       || (*End != 0)
914       || (Value != V))
915     return O.error("'" + Arg + "' value invalid for uint argument!");
916   return false;
917 }
918
919 // parser<double>/parser<float> implementation
920 //
921 static bool parseDouble(Option &O, const std::string &Arg, double &Value) {
922   const char *ArgStart = Arg.c_str();
923   char *End;
924   Value = strtod(ArgStart, &End);
925   if (*End != 0)
926     return O.error("'" + Arg + "' value invalid for floating point argument!");
927   return false;
928 }
929
930 bool parser<double>::parse(Option &O, const char *AN,
931                            const std::string &Arg, double &Val) {
932   return parseDouble(O, Arg, Val);
933 }
934
935 bool parser<float>::parse(Option &O, const char *AN,
936                           const std::string &Arg, float &Val) {
937   double dVal;
938   if (parseDouble(O, Arg, dVal))
939     return true;
940   Val = (float)dVal;
941   return false;
942 }
943
944
945
946 // generic_parser_base implementation
947 //
948
949 // findOption - Return the option number corresponding to the specified
950 // argument string.  If the option is not found, getNumOptions() is returned.
951 //
952 unsigned generic_parser_base::findOption(const char *Name) {
953   unsigned e = getNumOptions();
954
955   for (unsigned i = 0; i != e; ++i) {
956     if (strcmp(getOption(i), Name) == 0)
957       return i;
958   }
959   return e;
960 }
961
962
963 // Return the width of the option tag for printing...
964 size_t generic_parser_base::getOptionWidth(const Option &O) const {
965   if (O.hasArgStr()) {
966     size_t Size = std::strlen(O.ArgStr)+6;
967     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
968       Size = std::max(Size, std::strlen(getOption(i))+8);
969     return Size;
970   } else {
971     size_t BaseSize = 0;
972     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
973       BaseSize = std::max(BaseSize, std::strlen(getOption(i))+8);
974     return BaseSize;
975   }
976 }
977
978 // printOptionInfo - Print out information about this option.  The
979 // to-be-maintained width is specified.
980 //
981 void generic_parser_base::printOptionInfo(const Option &O,
982                                           size_t GlobalWidth) const {
983   if (O.hasArgStr()) {
984     size_t L = std::strlen(O.ArgStr);
985     outs() << "  -" << O.ArgStr << std::string(GlobalWidth-L-6, ' ')
986            << " - " << O.HelpStr << '\n';
987
988     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
989       size_t NumSpaces = GlobalWidth-strlen(getOption(i))-8;
990       outs() << "    =" << getOption(i) << std::string(NumSpaces, ' ')
991              << " -   " << getDescription(i) << '\n';
992     }
993   } else {
994     if (O.HelpStr[0])
995       outs() << "  " << O.HelpStr << "\n";
996     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
997       size_t L = std::strlen(getOption(i));
998       outs() << "    -" << getOption(i) << std::string(GlobalWidth-L-8, ' ')
999              << " - " << getDescription(i) << "\n";
1000     }
1001   }
1002 }
1003
1004
1005 //===----------------------------------------------------------------------===//
1006 // --help and --help-hidden option implementation
1007 //
1008
1009 namespace {
1010
1011 class HelpPrinter {
1012   size_t MaxArgLen;
1013   const Option *EmptyArg;
1014   const bool ShowHidden;
1015
1016   // isHidden/isReallyHidden - Predicates to be used to filter down arg lists.
1017   inline static bool isHidden(Option *Opt) {
1018     return Opt->getOptionHiddenFlag() >= Hidden;
1019   }
1020   inline static bool isReallyHidden(Option *Opt) {
1021     return Opt->getOptionHiddenFlag() == ReallyHidden;
1022   }
1023
1024 public:
1025   explicit HelpPrinter(bool showHidden) : ShowHidden(showHidden) {
1026     EmptyArg = 0;
1027   }
1028
1029   void operator=(bool Value) {
1030     if (Value == false) return;
1031
1032     // Get all the options.
1033     std::vector<Option*> PositionalOpts;
1034     std::vector<Option*> SinkOpts;
1035     StringMap<Option*> OptMap;
1036     GetOptionInfo(PositionalOpts, SinkOpts, OptMap);
1037
1038     // Copy Options into a vector so we can sort them as we like...
1039     std::vector<Option*> Opts;
1040     for (StringMap<Option*>::iterator I = OptMap.begin(), E = OptMap.end();
1041          I != E; ++I) {
1042       Opts.push_back(I->second);
1043     }
1044
1045     // Eliminate Hidden or ReallyHidden arguments, depending on ShowHidden
1046     Opts.erase(std::remove_if(Opts.begin(), Opts.end(),
1047                           std::ptr_fun(ShowHidden ? isReallyHidden : isHidden)),
1048                Opts.end());
1049
1050     // Eliminate duplicate entries in table (from enum flags options, f.e.)
1051     {  // Give OptionSet a scope
1052       std::set<Option*> OptionSet;
1053       for (unsigned i = 0; i != Opts.size(); ++i)
1054         if (OptionSet.count(Opts[i]) == 0)
1055           OptionSet.insert(Opts[i]);   // Add new entry to set
1056         else
1057           Opts.erase(Opts.begin()+i--);    // Erase duplicate
1058     }
1059
1060     if (ProgramOverview)
1061       outs() << "OVERVIEW: " << ProgramOverview << "\n";
1062
1063     outs() << "USAGE: " << ProgramName << " [options]";
1064
1065     // Print out the positional options.
1066     Option *CAOpt = 0;   // The cl::ConsumeAfter option, if it exists...
1067     if (!PositionalOpts.empty() &&
1068         PositionalOpts[0]->getNumOccurrencesFlag() == ConsumeAfter)
1069       CAOpt = PositionalOpts[0];
1070
1071     for (size_t i = CAOpt != 0, e = PositionalOpts.size(); i != e; ++i) {
1072       if (PositionalOpts[i]->ArgStr[0])
1073         outs() << " --" << PositionalOpts[i]->ArgStr;
1074       outs() << " " << PositionalOpts[i]->HelpStr;
1075     }
1076
1077     // Print the consume after option info if it exists...
1078     if (CAOpt) outs() << " " << CAOpt->HelpStr;
1079
1080     outs() << "\n\n";
1081
1082     // Compute the maximum argument length...
1083     MaxArgLen = 0;
1084     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1085       MaxArgLen = std::max(MaxArgLen, Opts[i]->getOptionWidth());
1086
1087     outs() << "OPTIONS:\n";
1088     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1089       Opts[i]->printOptionInfo(MaxArgLen);
1090
1091     // Print any extra help the user has declared.
1092     for (std::vector<const char *>::iterator I = MoreHelp->begin(),
1093           E = MoreHelp->end(); I != E; ++I)
1094       outs() << *I;
1095     MoreHelp->clear();
1096
1097     // Halt the program since help information was printed
1098     exit(1);
1099   }
1100 };
1101 } // End anonymous namespace
1102
1103 // Define the two HelpPrinter instances that are used to print out help, or
1104 // help-hidden...
1105 //
1106 static HelpPrinter NormalPrinter(false);
1107 static HelpPrinter HiddenPrinter(true);
1108
1109 static cl::opt<HelpPrinter, true, parser<bool> >
1110 HOp("help", cl::desc("Display available options (--help-hidden for more)"),
1111     cl::location(NormalPrinter), cl::ValueDisallowed);
1112
1113 static cl::opt<HelpPrinter, true, parser<bool> >
1114 HHOp("help-hidden", cl::desc("Display all available options"),
1115      cl::location(HiddenPrinter), cl::Hidden, cl::ValueDisallowed);
1116
1117 static void (*OverrideVersionPrinter)() = 0;
1118
1119 namespace {
1120 class VersionPrinter {
1121 public:
1122   void print() {
1123     outs() << "Low Level Virtual Machine (http://llvm.org/):\n"
1124            << "  " << PACKAGE_NAME << " version " << PACKAGE_VERSION;
1125 #ifdef LLVM_VERSION_INFO
1126     outs() << LLVM_VERSION_INFO;
1127 #endif
1128     outs() << "\n  ";
1129 #ifndef __OPTIMIZE__
1130     outs() << "DEBUG build";
1131 #else
1132     outs() << "Optimized build";
1133 #endif
1134 #ifndef NDEBUG
1135     outs() << " with assertions";
1136 #endif
1137     outs() << ".\n"
1138            << "  Built " << __DATE__ << " (" << __TIME__ << ").\n"
1139            << "  Host: " << sys::getHostTriple() << "\n"
1140            << "\n"
1141            << "  Registered Targets:\n";
1142
1143     std::vector<std::pair<std::string, const Target*> > Targets;
1144     size_t Width = 0;
1145     for (TargetRegistry::iterator it = TargetRegistry::begin(), 
1146            ie = TargetRegistry::end(); it != ie; ++it) {
1147       Targets.push_back(std::make_pair(it->getName(), &*it));
1148       Width = std::max(Width, Targets.back().first.length());
1149     }
1150     std::sort(Targets.begin(), Targets.end());
1151
1152     for (unsigned i = 0, e = Targets.size(); i != e; ++i) {
1153       outs() << "    " << Targets[i].first
1154              << std::string(Width - Targets[i].first.length(), ' ') << " - "
1155              << Targets[i].second->getShortDescription() << "\n";
1156     }
1157     if (Targets.empty())
1158       outs() << "    (none)\n";
1159   }
1160   void operator=(bool OptionWasSpecified) {
1161     if (OptionWasSpecified) {
1162       if (OverrideVersionPrinter == 0) {
1163         print();
1164         exit(1);
1165       } else {
1166         (*OverrideVersionPrinter)();
1167         exit(1);
1168       }
1169     }
1170   }
1171 };
1172 } // End anonymous namespace
1173
1174
1175 // Define the --version option that prints out the LLVM version for the tool
1176 static VersionPrinter VersionPrinterInstance;
1177
1178 static cl::opt<VersionPrinter, true, parser<bool> >
1179 VersOp("version", cl::desc("Display the version of this program"),
1180     cl::location(VersionPrinterInstance), cl::ValueDisallowed);
1181
1182 // Utility function for printing the help message.
1183 void cl::PrintHelpMessage() {
1184   // This looks weird, but it actually prints the help message. The
1185   // NormalPrinter variable is a HelpPrinter and the help gets printed when
1186   // its operator= is invoked. That's because the "normal" usages of the
1187   // help printer is to be assigned true/false depending on whether the
1188   // --help option was given or not. Since we're circumventing that we have
1189   // to make it look like --help was given, so we assign true.
1190   NormalPrinter = true;
1191 }
1192
1193 /// Utility function for printing version number.
1194 void cl::PrintVersionMessage() {
1195   VersionPrinterInstance.print();
1196 }
1197
1198 void cl::SetVersionPrinter(void (*func)()) {
1199   OverrideVersionPrinter = func;
1200 }