clean up #includes.
[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/Path.h"
26 #include "llvm/ADT/OwningPtr.h"
27 #include "llvm/Config/config.h"
28 #include <map>
29 #include <set>
30 #include <cerrno>
31 #include <cstdlib>
32 using namespace llvm;
33 using namespace cl;
34
35 //===----------------------------------------------------------------------===//
36 // Template instantiations and anchors.
37 //
38 TEMPLATE_INSTANTIATION(class basic_parser<bool>);
39 TEMPLATE_INSTANTIATION(class basic_parser<boolOrDefault>);
40 TEMPLATE_INSTANTIATION(class basic_parser<int>);
41 TEMPLATE_INSTANTIATION(class basic_parser<unsigned>);
42 TEMPLATE_INSTANTIATION(class basic_parser<double>);
43 TEMPLATE_INSTANTIATION(class basic_parser<float>);
44 TEMPLATE_INSTANTIATION(class basic_parser<std::string>);
45 TEMPLATE_INSTANTIATION(class basic_parser<char>);
46
47 TEMPLATE_INSTANTIATION(class opt<unsigned>);
48 TEMPLATE_INSTANTIATION(class opt<int>);
49 TEMPLATE_INSTANTIATION(class opt<std::string>);
50 TEMPLATE_INSTANTIATION(class opt<char>);
51 TEMPLATE_INSTANTIATION(class opt<bool>);
52
53 void Option::anchor() {}
54 void basic_parser_impl::anchor() {}
55 void parser<bool>::anchor() {}
56 void parser<boolOrDefault>::anchor() {}
57 void parser<int>::anchor() {}
58 void parser<unsigned>::anchor() {}
59 void parser<double>::anchor() {}
60 void parser<float>::anchor() {}
61 void parser<std::string>::anchor() {}
62 void parser<char>::anchor() {}
63
64 //===----------------------------------------------------------------------===//
65
66 // Globals for name and overview of program.  Program name is not a string to
67 // avoid static ctor/dtor issues.
68 static char ProgramName[80] = "<premain>";
69 static const char *ProgramOverview = 0;
70
71 // This collects additional help to be printed.
72 static ManagedStatic<std::vector<const char*> > MoreHelp;
73
74 extrahelp::extrahelp(const char *Help)
75   : morehelp(Help) {
76   MoreHelp->push_back(Help);
77 }
78
79 static bool OptionListChanged = false;
80
81 // MarkOptionsChanged - Internal helper function.
82 void cl::MarkOptionsChanged() {
83   OptionListChanged = true;
84 }
85
86 /// RegisteredOptionList - This is the list of the command line options that
87 /// have statically constructed themselves.
88 static Option *RegisteredOptionList = 0;
89
90 void Option::addArgument() {
91   assert(NextRegistered == 0 && "argument multiply registered!");
92
93   NextRegistered = RegisteredOptionList;
94   RegisteredOptionList = this;
95   MarkOptionsChanged();
96 }
97
98
99 //===----------------------------------------------------------------------===//
100 // Basic, shared command line option processing machinery.
101 //
102
103 /// GetOptionInfo - Scan the list of registered options, turning them into data
104 /// structures that are easier to handle.
105 static void GetOptionInfo(std::vector<Option*> &PositionalOpts,
106                           std::vector<Option*> &SinkOpts,
107                           std::map<std::string, Option*> &OptionsMap) {
108   std::vector<const char*> OptionNames;
109   Option *CAOpt = 0;  // The ConsumeAfter option if it exists.
110   for (Option *O = RegisteredOptionList; O; O = O->getNextRegisteredOption()) {
111     // If this option wants to handle multiple option names, get the full set.
112     // This handles enum options like "-O1 -O2" etc.
113     O->getExtraOptionNames(OptionNames);
114     if (O->ArgStr[0])
115       OptionNames.push_back(O->ArgStr);
116
117     // Handle named options.
118     for (size_t i = 0, e = OptionNames.size(); i != e; ++i) {
119       // Add argument to the argument map!
120       if (!OptionsMap.insert(std::pair<std::string,Option*>(OptionNames[i],
121                                                             O)).second) {
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                             std::map<std::string, 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   std::map<std::string, Option*>::iterator I =
168     OptionsMap.find(std::string(Arg, ArgEnd));
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                              std::map<std::string, Option*> &OptionsMap) {
262
263   std::map<std::string, 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   std::map<std::string, 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 (std::map<std::string, 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 i = 0, e = getNumOptions();
954   std::string N(Name);
955
956   while (i != e)
957     if (getOption(i) == N)
958       return i;
959     else
960       ++i;
961   return e;
962 }
963
964
965 // Return the width of the option tag for printing...
966 size_t generic_parser_base::getOptionWidth(const Option &O) const {
967   if (O.hasArgStr()) {
968     size_t Size = std::strlen(O.ArgStr)+6;
969     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
970       Size = std::max(Size, std::strlen(getOption(i))+8);
971     return Size;
972   } else {
973     size_t BaseSize = 0;
974     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
975       BaseSize = std::max(BaseSize, std::strlen(getOption(i))+8);
976     return BaseSize;
977   }
978 }
979
980 // printOptionInfo - Print out information about this option.  The
981 // to-be-maintained width is specified.
982 //
983 void generic_parser_base::printOptionInfo(const Option &O,
984                                           size_t GlobalWidth) const {
985   if (O.hasArgStr()) {
986     size_t L = std::strlen(O.ArgStr);
987     outs() << "  -" << O.ArgStr << std::string(GlobalWidth-L-6, ' ')
988            << " - " << O.HelpStr << '\n';
989
990     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
991       size_t NumSpaces = GlobalWidth-strlen(getOption(i))-8;
992       outs() << "    =" << getOption(i) << std::string(NumSpaces, ' ')
993              << " -   " << getDescription(i) << '\n';
994     }
995   } else {
996     if (O.HelpStr[0])
997       outs() << "  " << O.HelpStr << "\n";
998     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
999       size_t L = std::strlen(getOption(i));
1000       outs() << "    -" << getOption(i) << std::string(GlobalWidth-L-8, ' ')
1001              << " - " << getDescription(i) << "\n";
1002     }
1003   }
1004 }
1005
1006
1007 //===----------------------------------------------------------------------===//
1008 // --help and --help-hidden option implementation
1009 //
1010
1011 namespace {
1012
1013 class HelpPrinter {
1014   size_t MaxArgLen;
1015   const Option *EmptyArg;
1016   const bool ShowHidden;
1017
1018   // isHidden/isReallyHidden - Predicates to be used to filter down arg lists.
1019   inline static bool isHidden(std::pair<std::string, Option *> &OptPair) {
1020     return OptPair.second->getOptionHiddenFlag() >= Hidden;
1021   }
1022   inline static bool isReallyHidden(std::pair<std::string, Option *> &OptPair) {
1023     return OptPair.second->getOptionHiddenFlag() == ReallyHidden;
1024   }
1025
1026 public:
1027   explicit HelpPrinter(bool showHidden) : ShowHidden(showHidden) {
1028     EmptyArg = 0;
1029   }
1030
1031   void operator=(bool Value) {
1032     if (Value == false) return;
1033
1034     // Get all the options.
1035     std::vector<Option*> PositionalOpts;
1036     std::vector<Option*> SinkOpts;
1037     std::map<std::string, Option*> OptMap;
1038     GetOptionInfo(PositionalOpts, SinkOpts, OptMap);
1039
1040     // Copy Options into a vector so we can sort them as we like...
1041     std::vector<std::pair<std::string, Option*> > Opts;
1042     copy(OptMap.begin(), OptMap.end(), std::back_inserter(Opts));
1043
1044     // Eliminate Hidden or ReallyHidden arguments, depending on ShowHidden
1045     Opts.erase(std::remove_if(Opts.begin(), Opts.end(),
1046                           std::ptr_fun(ShowHidden ? isReallyHidden : isHidden)),
1047                Opts.end());
1048
1049     // Eliminate duplicate entries in table (from enum flags options, f.e.)
1050     {  // Give OptionSet a scope
1051       std::set<Option*> OptionSet;
1052       for (unsigned i = 0; i != Opts.size(); ++i)
1053         if (OptionSet.count(Opts[i].second) == 0)
1054           OptionSet.insert(Opts[i].second);   // Add new entry to set
1055         else
1056           Opts.erase(Opts.begin()+i--);    // Erase duplicate
1057     }
1058
1059     if (ProgramOverview)
1060       outs() << "OVERVIEW: " << ProgramOverview << "\n";
1061
1062     outs() << "USAGE: " << ProgramName << " [options]";
1063
1064     // Print out the positional options.
1065     Option *CAOpt = 0;   // The cl::ConsumeAfter option, if it exists...
1066     if (!PositionalOpts.empty() &&
1067         PositionalOpts[0]->getNumOccurrencesFlag() == ConsumeAfter)
1068       CAOpt = PositionalOpts[0];
1069
1070     for (size_t i = CAOpt != 0, e = PositionalOpts.size(); i != e; ++i) {
1071       if (PositionalOpts[i]->ArgStr[0])
1072         outs() << " --" << PositionalOpts[i]->ArgStr;
1073       outs() << " " << PositionalOpts[i]->HelpStr;
1074     }
1075
1076     // Print the consume after option info if it exists...
1077     if (CAOpt) outs() << " " << CAOpt->HelpStr;
1078
1079     outs() << "\n\n";
1080
1081     // Compute the maximum argument length...
1082     MaxArgLen = 0;
1083     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1084       MaxArgLen = std::max(MaxArgLen, Opts[i].second->getOptionWidth());
1085
1086     outs() << "OPTIONS:\n";
1087     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1088       Opts[i].second->printOptionInfo(MaxArgLen);
1089
1090     // Print any extra help the user has declared.
1091     for (std::vector<const char *>::iterator I = MoreHelp->begin(),
1092           E = MoreHelp->end(); I != E; ++I)
1093       outs() << *I;
1094     MoreHelp->clear();
1095
1096     // Halt the program since help information was printed
1097     exit(1);
1098   }
1099 };
1100 } // End anonymous namespace
1101
1102 // Define the two HelpPrinter instances that are used to print out help, or
1103 // help-hidden...
1104 //
1105 static HelpPrinter NormalPrinter(false);
1106 static HelpPrinter HiddenPrinter(true);
1107
1108 static cl::opt<HelpPrinter, true, parser<bool> >
1109 HOp("help", cl::desc("Display available options (--help-hidden for more)"),
1110     cl::location(NormalPrinter), cl::ValueDisallowed);
1111
1112 static cl::opt<HelpPrinter, true, parser<bool> >
1113 HHOp("help-hidden", cl::desc("Display all available options"),
1114      cl::location(HiddenPrinter), cl::Hidden, cl::ValueDisallowed);
1115
1116 static void (*OverrideVersionPrinter)() = 0;
1117
1118 namespace {
1119 class VersionPrinter {
1120 public:
1121   void print() {
1122     outs() << "Low Level Virtual Machine (http://llvm.org/):\n"
1123            << "  " << PACKAGE_NAME << " version " << PACKAGE_VERSION;
1124 #ifdef LLVM_VERSION_INFO
1125     outs() << LLVM_VERSION_INFO;
1126 #endif
1127     outs() << "\n  ";
1128 #ifndef __OPTIMIZE__
1129     outs() << "DEBUG build";
1130 #else
1131     outs() << "Optimized build";
1132 #endif
1133 #ifndef NDEBUG
1134     outs() << " with assertions";
1135 #endif
1136     outs() << ".\n"
1137            << "  Built " << __DATE__ << " (" << __TIME__ << ").\n"
1138            << "\n"
1139            << "  Registered Targets:\n";
1140
1141     std::vector<std::pair<std::string, const Target*> > Targets;
1142     size_t Width = 0;
1143     for (TargetRegistry::iterator it = TargetRegistry::begin(), 
1144            ie = TargetRegistry::end(); it != ie; ++it) {
1145       Targets.push_back(std::make_pair(it->getName(), &*it));
1146       Width = std::max(Width, Targets.back().first.length());
1147     }
1148     std::sort(Targets.begin(), Targets.end());
1149
1150     for (unsigned i = 0, e = Targets.size(); i != e; ++i) {
1151       outs() << "    " << Targets[i].first
1152              << std::string(Width - Targets[i].first.length(), ' ') << " - "
1153              << Targets[i].second->getShortDescription() << "\n";
1154     }
1155     if (Targets.empty())
1156       outs() << "    (none)\n";
1157   }
1158   void operator=(bool OptionWasSpecified) {
1159     if (OptionWasSpecified) {
1160       if (OverrideVersionPrinter == 0) {
1161         print();
1162         exit(1);
1163       } else {
1164         (*OverrideVersionPrinter)();
1165         exit(1);
1166       }
1167     }
1168   }
1169 };
1170 } // End anonymous namespace
1171
1172
1173 // Define the --version option that prints out the LLVM version for the tool
1174 static VersionPrinter VersionPrinterInstance;
1175
1176 static cl::opt<VersionPrinter, true, parser<bool> >
1177 VersOp("version", cl::desc("Display the version of this program"),
1178     cl::location(VersionPrinterInstance), cl::ValueDisallowed);
1179
1180 // Utility function for printing the help message.
1181 void cl::PrintHelpMessage() {
1182   // This looks weird, but it actually prints the help message. The
1183   // NormalPrinter variable is a HelpPrinter and the help gets printed when
1184   // its operator= is invoked. That's because the "normal" usages of the
1185   // help printer is to be assigned true/false depending on whether the
1186   // --help option was given or not. Since we're circumventing that we have
1187   // to make it look like --help was given, so we assign true.
1188   NormalPrinter = true;
1189 }
1190
1191 /// Utility function for printing version number.
1192 void cl::PrintVersionMessage() {
1193   VersionPrinterInstance.print();
1194 }
1195
1196 void cl::SetVersionPrinter(void (*func)()) {
1197   OverrideVersionPrinter = func;
1198 }