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