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