Mimic gcc behaviour with regard to response files.
[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         // TODO: support recursion.
400         if (respFilePtr != 0) {
401           ParseCStringVector(newArgv, respFilePtr->getBufferStart());
402           continue;
403         }
404       }
405     }
406     newArgv.push_back(strdup(arg));
407   }
408 }
409
410 void cl::ParseCommandLineOptions(int argc, char **argv,
411                                  const char *Overview, bool ReadResponseFiles) {
412   // Process all registered options.
413   std::vector<Option*> PositionalOpts;
414   std::vector<Option*> SinkOpts;
415   std::map<std::string, Option*> Opts;
416   GetOptionInfo(PositionalOpts, SinkOpts, Opts);
417
418   assert((!Opts.empty() || !PositionalOpts.empty()) &&
419          "No options specified!");
420
421   // Expand response files.
422   std::vector<char*> newArgv;
423   if (ReadResponseFiles) {
424     newArgv.push_back(strdup(argv[0]));
425     ExpandResponseFiles(argc, argv, newArgv);
426     argv = &newArgv[0];
427     argc = static_cast<int>(newArgv.size());
428   }
429
430   // Copy the program name into ProgName, making sure not to overflow it.
431   std::string ProgName = sys::Path(argv[0]).getLast();
432   if (ProgName.size() > 79) ProgName.resize(79);
433   strcpy(ProgramName, ProgName.c_str());
434
435   ProgramOverview = Overview;
436   bool ErrorParsing = false;
437
438   // Check out the positional arguments to collect information about them.
439   unsigned NumPositionalRequired = 0;
440
441   // Determine whether or not there are an unlimited number of positionals
442   bool HasUnlimitedPositionals = false;
443
444   Option *ConsumeAfterOpt = 0;
445   if (!PositionalOpts.empty()) {
446     if (PositionalOpts[0]->getNumOccurrencesFlag() == cl::ConsumeAfter) {
447       assert(PositionalOpts.size() > 1 &&
448              "Cannot specify cl::ConsumeAfter without a positional argument!");
449       ConsumeAfterOpt = PositionalOpts[0];
450     }
451
452     // Calculate how many positional values are _required_.
453     bool UnboundedFound = false;
454     for (size_t i = ConsumeAfterOpt != 0, e = PositionalOpts.size();
455          i != e; ++i) {
456       Option *Opt = PositionalOpts[i];
457       if (RequiresValue(Opt))
458         ++NumPositionalRequired;
459       else if (ConsumeAfterOpt) {
460         // ConsumeAfter cannot be combined with "optional" positional options
461         // unless there is only one positional argument...
462         if (PositionalOpts.size() > 2)
463           ErrorParsing |=
464             Opt->error(" error - this positional option will never be matched, "
465                        "because it does not Require a value, and a "
466                        "cl::ConsumeAfter option is active!");
467       } else if (UnboundedFound && !Opt->ArgStr[0]) {
468         // This option does not "require" a value...  Make sure this option is
469         // not specified after an option that eats all extra arguments, or this
470         // one will never get any!
471         //
472         ErrorParsing |= Opt->error(" error - option can never match, because "
473                                    "another positional argument will match an "
474                                    "unbounded number of values, and this option"
475                                    " does not require a value!");
476       }
477       UnboundedFound |= EatsUnboundedNumberOfValues(Opt);
478     }
479     HasUnlimitedPositionals = UnboundedFound || ConsumeAfterOpt;
480   }
481
482   // PositionalVals - A vector of "positional" arguments we accumulate into
483   // the process at the end...
484   //
485   std::vector<std::pair<std::string,unsigned> > PositionalVals;
486
487   // If the program has named positional arguments, and the name has been run
488   // across, keep track of which positional argument was named.  Otherwise put
489   // the positional args into the PositionalVals list...
490   Option *ActivePositionalArg = 0;
491
492   // Loop over all of the arguments... processing them.
493   bool DashDashFound = false;  // Have we read '--'?
494   for (int i = 1; i < argc; ++i) {
495     Option *Handler = 0;
496     const char *Value = 0;
497     const char *ArgName = "";
498
499     // If the option list changed, this means that some command line
500     // option has just been registered or deregistered.  This can occur in
501     // response to things like -load, etc.  If this happens, rescan the options.
502     if (OptionListChanged) {
503       PositionalOpts.clear();
504       SinkOpts.clear();
505       Opts.clear();
506       GetOptionInfo(PositionalOpts, SinkOpts, Opts);
507       OptionListChanged = false;
508     }
509
510     // Check to see if this is a positional argument.  This argument is
511     // considered to be positional if it doesn't start with '-', if it is "-"
512     // itself, or if we have seen "--" already.
513     //
514     if (argv[i][0] != '-' || argv[i][1] == 0 || DashDashFound) {
515       // Positional argument!
516       if (ActivePositionalArg) {
517         ProvidePositionalOption(ActivePositionalArg, argv[i], i);
518         continue;  // We are done!
519       } else if (!PositionalOpts.empty()) {
520         PositionalVals.push_back(std::make_pair(argv[i],i));
521
522         // All of the positional arguments have been fulfulled, give the rest to
523         // the consume after option... if it's specified...
524         //
525         if (PositionalVals.size() >= NumPositionalRequired &&
526             ConsumeAfterOpt != 0) {
527           for (++i; i < argc; ++i)
528             PositionalVals.push_back(std::make_pair(argv[i],i));
529           break;   // Handle outside of the argument processing loop...
530         }
531
532         // Delay processing positional arguments until the end...
533         continue;
534       }
535     } else if (argv[i][0] == '-' && argv[i][1] == '-' && argv[i][2] == 0 &&
536                !DashDashFound) {
537       DashDashFound = true;  // This is the mythical "--"?
538       continue;              // Don't try to process it as an argument itself.
539     } else if (ActivePositionalArg &&
540                (ActivePositionalArg->getMiscFlags() & PositionalEatsArgs)) {
541       // If there is a positional argument eating options, check to see if this
542       // option is another positional argument.  If so, treat it as an argument,
543       // otherwise feed it to the eating positional.
544       ArgName = argv[i]+1;
545       Handler = LookupOption(ArgName, Value, Opts);
546       if (!Handler || Handler->getFormattingFlag() != cl::Positional) {
547         ProvidePositionalOption(ActivePositionalArg, argv[i], i);
548         continue;  // We are done!
549       }
550
551     } else {     // We start with a '-', must be an argument...
552       ArgName = argv[i]+1;
553       Handler = LookupOption(ArgName, Value, Opts);
554
555       // Check to see if this "option" is really a prefixed or grouped argument.
556       if (Handler == 0) {
557         std::string RealName(ArgName);
558         if (RealName.size() > 1) {
559           size_t Length = 0;
560           Option *PGOpt = getOptionPred(RealName, Length, isPrefixedOrGrouping,
561                                         Opts);
562
563           // If the option is a prefixed option, then the value is simply the
564           // rest of the name...  so fall through to later processing, by
565           // setting up the argument name flags and value fields.
566           //
567           if (PGOpt && PGOpt->getFormattingFlag() == cl::Prefix) {
568             Value = ArgName+Length;
569             assert(Opts.find(std::string(ArgName, Value)) != Opts.end() &&
570                    Opts.find(std::string(ArgName, Value))->second == PGOpt);
571             Handler = PGOpt;
572           } else if (PGOpt) {
573             // This must be a grouped option... handle them now.
574             assert(isGrouping(PGOpt) && "Broken getOptionPred!");
575
576             do {
577               // Move current arg name out of RealName into RealArgName...
578               std::string RealArgName(RealName.begin(),
579                                       RealName.begin() + Length);
580               RealName.erase(RealName.begin(), RealName.begin() + Length);
581
582               // Because ValueRequired is an invalid flag for grouped arguments,
583               // we don't need to pass argc/argv in...
584               //
585               assert(PGOpt->getValueExpectedFlag() != cl::ValueRequired &&
586                      "Option can not be cl::Grouping AND cl::ValueRequired!");
587               int Dummy;
588               ErrorParsing |= ProvideOption(PGOpt, RealArgName.c_str(),
589                                             0, 0, 0, Dummy);
590
591               // Get the next grouping option...
592               PGOpt = getOptionPred(RealName, Length, isGrouping, Opts);
593             } while (PGOpt && Length != RealName.size());
594
595             Handler = PGOpt; // Ate all of the options.
596           }
597         }
598       }
599     }
600
601     if (Handler == 0) {
602       if (SinkOpts.empty()) {
603         cerr << ProgramName << ": Unknown command line argument '"
604              << argv[i] << "'.  Try: '" << argv[0] << " --help'\n";
605         ErrorParsing = true;
606       } else {
607         for (std::vector<Option*>::iterator I = SinkOpts.begin(),
608                E = SinkOpts.end(); I != E ; ++I)
609           (*I)->addOccurrence(i, "", argv[i]);
610       }
611       continue;
612     }
613
614     // Check to see if this option accepts a comma separated list of values.  If
615     // it does, we have to split up the value into multiple values...
616     if (Value && Handler->getMiscFlags() & CommaSeparated) {
617       std::string Val(Value);
618       std::string::size_type Pos = Val.find(',');
619
620       while (Pos != std::string::npos) {
621         // Process the portion before the comma...
622         ErrorParsing |= ProvideOption(Handler, ArgName,
623                                       std::string(Val.begin(),
624                                                   Val.begin()+Pos).c_str(),
625                                       argc, argv, i);
626         // Erase the portion before the comma, AND the comma...
627         Val.erase(Val.begin(), Val.begin()+Pos+1);
628         Value += Pos+1;  // Increment the original value pointer as well...
629
630         // Check for another comma...
631         Pos = Val.find(',');
632       }
633     }
634
635     // If this is a named positional argument, just remember that it is the
636     // active one...
637     if (Handler->getFormattingFlag() == cl::Positional)
638       ActivePositionalArg = Handler;
639     else
640       ErrorParsing |= ProvideOption(Handler, ArgName, Value, argc, argv, i);
641   }
642
643   // Check and handle positional arguments now...
644   if (NumPositionalRequired > PositionalVals.size()) {
645     cerr << ProgramName
646          << ": Not enough positional command line arguments specified!\n"
647          << "Must specify at least " << NumPositionalRequired
648          << " positional arguments: See: " << argv[0] << " --help\n";
649
650     ErrorParsing = true;
651   } else if (!HasUnlimitedPositionals
652              && PositionalVals.size() > PositionalOpts.size()) {
653     cerr << ProgramName
654          << ": Too many positional arguments specified!\n"
655          << "Can specify at most " << PositionalOpts.size()
656          << " positional arguments: See: " << argv[0] << " --help\n";
657     ErrorParsing = true;
658
659   } else if (ConsumeAfterOpt == 0) {
660     // Positional args have already been handled if ConsumeAfter is specified...
661     unsigned ValNo = 0, NumVals = static_cast<unsigned>(PositionalVals.size());
662     for (size_t i = 0, e = PositionalOpts.size(); i != e; ++i) {
663       if (RequiresValue(PositionalOpts[i])) {
664         ProvidePositionalOption(PositionalOpts[i], PositionalVals[ValNo].first,
665                                 PositionalVals[ValNo].second);
666         ValNo++;
667         --NumPositionalRequired;  // We fulfilled our duty...
668       }
669
670       // If we _can_ give this option more arguments, do so now, as long as we
671       // do not give it values that others need.  'Done' controls whether the
672       // option even _WANTS_ any more.
673       //
674       bool Done = PositionalOpts[i]->getNumOccurrencesFlag() == cl::Required;
675       while (NumVals-ValNo > NumPositionalRequired && !Done) {
676         switch (PositionalOpts[i]->getNumOccurrencesFlag()) {
677         case cl::Optional:
678           Done = true;          // Optional arguments want _at most_ one value
679           // FALL THROUGH
680         case cl::ZeroOrMore:    // Zero or more will take all they can get...
681         case cl::OneOrMore:     // One or more will take all they can get...
682           ProvidePositionalOption(PositionalOpts[i],
683                                   PositionalVals[ValNo].first,
684                                   PositionalVals[ValNo].second);
685           ValNo++;
686           break;
687         default:
688           assert(0 && "Internal error, unexpected NumOccurrences flag in "
689                  "positional argument processing!");
690         }
691       }
692     }
693   } else {
694     assert(ConsumeAfterOpt && NumPositionalRequired <= PositionalVals.size());
695     unsigned ValNo = 0;
696     for (size_t j = 1, e = PositionalOpts.size(); j != e; ++j)
697       if (RequiresValue(PositionalOpts[j])) {
698         ErrorParsing |= ProvidePositionalOption(PositionalOpts[j],
699                                                 PositionalVals[ValNo].first,
700                                                 PositionalVals[ValNo].second);
701         ValNo++;
702       }
703
704     // Handle the case where there is just one positional option, and it's
705     // optional.  In this case, we want to give JUST THE FIRST option to the
706     // positional option and keep the rest for the consume after.  The above
707     // loop would have assigned no values to positional options in this case.
708     //
709     if (PositionalOpts.size() == 2 && ValNo == 0 && !PositionalVals.empty()) {
710       ErrorParsing |= ProvidePositionalOption(PositionalOpts[1],
711                                               PositionalVals[ValNo].first,
712                                               PositionalVals[ValNo].second);
713       ValNo++;
714     }
715
716     // Handle over all of the rest of the arguments to the
717     // cl::ConsumeAfter command line option...
718     for (; ValNo != PositionalVals.size(); ++ValNo)
719       ErrorParsing |= ProvidePositionalOption(ConsumeAfterOpt,
720                                               PositionalVals[ValNo].first,
721                                               PositionalVals[ValNo].second);
722   }
723
724   // Loop over args and make sure all required args are specified!
725   for (std::map<std::string, Option*>::iterator I = Opts.begin(),
726          E = Opts.end(); I != E; ++I) {
727     switch (I->second->getNumOccurrencesFlag()) {
728     case Required:
729     case OneOrMore:
730       if (I->second->getNumOccurrences() == 0) {
731         I->second->error(" must be specified at least once!");
732         ErrorParsing = true;
733       }
734       // Fall through
735     default:
736       break;
737     }
738   }
739
740   // Free all of the memory allocated to the map.  Command line options may only
741   // be processed once!
742   Opts.clear();
743   PositionalOpts.clear();
744   MoreHelp->clear();
745
746   // Free the memory allocated by ExpandResponseFiles.
747   if (ReadResponseFiles) {
748     // Free all the strdup()ed strings.
749     for (std::vector<char*>::iterator i = newArgv.begin(), e = newArgv.end();
750          i != e; ++i)
751       free (*i);
752   }
753
754   // If we had an error processing our arguments, don't let the program execute
755   if (ErrorParsing) exit(1);
756 }
757
758 //===----------------------------------------------------------------------===//
759 // Option Base class implementation
760 //
761
762 bool Option::error(std::string Message, const char *ArgName) {
763   if (ArgName == 0) ArgName = ArgStr;
764   if (ArgName[0] == 0)
765     cerr << HelpStr;  // Be nice for positional arguments
766   else
767     cerr << ProgramName << ": for the -" << ArgName;
768
769   cerr << " option: " << Message << "\n";
770   return true;
771 }
772
773 bool Option::addOccurrence(unsigned pos, const char *ArgName,
774                            const std::string &Value,
775                            bool MultiArg) {
776   if (!MultiArg)
777     NumOccurrences++;   // Increment the number of times we have been seen
778
779   switch (getNumOccurrencesFlag()) {
780   case Optional:
781     if (NumOccurrences > 1)
782       return error(": may only occur zero or one times!", ArgName);
783     break;
784   case Required:
785     if (NumOccurrences > 1)
786       return error(": must occur exactly one time!", ArgName);
787     // Fall through
788   case OneOrMore:
789   case ZeroOrMore:
790   case ConsumeAfter: break;
791   default: return error(": bad num occurrences flag value!");
792   }
793
794   return handleOccurrence(pos, ArgName, Value);
795 }
796
797
798 // getValueStr - Get the value description string, using "DefaultMsg" if nothing
799 // has been specified yet.
800 //
801 static const char *getValueStr(const Option &O, const char *DefaultMsg) {
802   if (O.ValueStr[0] == 0) return DefaultMsg;
803   return O.ValueStr;
804 }
805
806 //===----------------------------------------------------------------------===//
807 // cl::alias class implementation
808 //
809
810 // Return the width of the option tag for printing...
811 size_t alias::getOptionWidth() const {
812   return std::strlen(ArgStr)+6;
813 }
814
815 // Print out the option for the alias.
816 void alias::printOptionInfo(size_t GlobalWidth) const {
817   size_t L = std::strlen(ArgStr);
818   cout << "  -" << ArgStr << std::string(GlobalWidth-L-6, ' ') << " - "
819        << HelpStr << "\n";
820 }
821
822
823
824 //===----------------------------------------------------------------------===//
825 // Parser Implementation code...
826 //
827
828 // basic_parser implementation
829 //
830
831 // Return the width of the option tag for printing...
832 size_t basic_parser_impl::getOptionWidth(const Option &O) const {
833   size_t Len = std::strlen(O.ArgStr);
834   if (const char *ValName = getValueName())
835     Len += std::strlen(getValueStr(O, ValName))+3;
836
837   return Len + 6;
838 }
839
840 // printOptionInfo - Print out information about this option.  The
841 // to-be-maintained width is specified.
842 //
843 void basic_parser_impl::printOptionInfo(const Option &O,
844                                         size_t GlobalWidth) const {
845   cout << "  -" << O.ArgStr;
846
847   if (const char *ValName = getValueName())
848     cout << "=<" << getValueStr(O, ValName) << ">";
849
850   cout << std::string(GlobalWidth-getOptionWidth(O), ' ') << " - "
851        << O.HelpStr << "\n";
852 }
853
854
855
856
857 // parser<bool> implementation
858 //
859 bool parser<bool>::parse(Option &O, const char *ArgName,
860                          const std::string &Arg, bool &Value) {
861   if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
862       Arg == "1") {
863     Value = true;
864   } else if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
865     Value = false;
866   } else {
867     return O.error(": '" + Arg +
868                    "' is invalid value for boolean argument! Try 0 or 1");
869   }
870   return false;
871 }
872
873 // parser<boolOrDefault> implementation
874 //
875 bool parser<boolOrDefault>::parse(Option &O, const char *ArgName,
876                          const std::string &Arg, boolOrDefault &Value) {
877   if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
878       Arg == "1") {
879     Value = BOU_TRUE;
880   } else if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
881     Value = BOU_FALSE;
882   } else {
883     return O.error(": '" + Arg +
884                    "' is invalid value for boolean argument! Try 0 or 1");
885   }
886   return false;
887 }
888
889 // parser<int> implementation
890 //
891 bool parser<int>::parse(Option &O, const char *ArgName,
892                         const std::string &Arg, int &Value) {
893   char *End;
894   Value = (int)strtol(Arg.c_str(), &End, 0);
895   if (*End != 0)
896     return O.error(": '" + Arg + "' value invalid for integer argument!");
897   return false;
898 }
899
900 // parser<unsigned> implementation
901 //
902 bool parser<unsigned>::parse(Option &O, const char *ArgName,
903                              const std::string &Arg, unsigned &Value) {
904   char *End;
905   errno = 0;
906   unsigned long V = strtoul(Arg.c_str(), &End, 0);
907   Value = (unsigned)V;
908   if (((V == ULONG_MAX) && (errno == ERANGE))
909       || (*End != 0)
910       || (Value != V))
911     return O.error(": '" + Arg + "' value invalid for uint argument!");
912   return false;
913 }
914
915 // parser<double>/parser<float> implementation
916 //
917 static bool parseDouble(Option &O, const std::string &Arg, double &Value) {
918   const char *ArgStart = Arg.c_str();
919   char *End;
920   Value = strtod(ArgStart, &End);
921   if (*End != 0)
922     return O.error(": '" +Arg+ "' value invalid for floating point argument!");
923   return false;
924 }
925
926 bool parser<double>::parse(Option &O, const char *AN,
927                            const std::string &Arg, double &Val) {
928   return parseDouble(O, Arg, Val);
929 }
930
931 bool parser<float>::parse(Option &O, const char *AN,
932                           const std::string &Arg, float &Val) {
933   double dVal;
934   if (parseDouble(O, Arg, dVal))
935     return true;
936   Val = (float)dVal;
937   return false;
938 }
939
940
941
942 // generic_parser_base implementation
943 //
944
945 // findOption - Return the option number corresponding to the specified
946 // argument string.  If the option is not found, getNumOptions() is returned.
947 //
948 unsigned generic_parser_base::findOption(const char *Name) {
949   unsigned i = 0, e = getNumOptions();
950   std::string N(Name);
951
952   while (i != e)
953     if (getOption(i) == N)
954       return i;
955     else
956       ++i;
957   return e;
958 }
959
960
961 // Return the width of the option tag for printing...
962 size_t generic_parser_base::getOptionWidth(const Option &O) const {
963   if (O.hasArgStr()) {
964     size_t Size = std::strlen(O.ArgStr)+6;
965     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
966       Size = std::max(Size, std::strlen(getOption(i))+8);
967     return Size;
968   } else {
969     size_t BaseSize = 0;
970     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
971       BaseSize = std::max(BaseSize, std::strlen(getOption(i))+8);
972     return BaseSize;
973   }
974 }
975
976 // printOptionInfo - Print out information about this option.  The
977 // to-be-maintained width is specified.
978 //
979 void generic_parser_base::printOptionInfo(const Option &O,
980                                           size_t GlobalWidth) const {
981   if (O.hasArgStr()) {
982     size_t L = std::strlen(O.ArgStr);
983     cout << "  -" << O.ArgStr << std::string(GlobalWidth-L-6, ' ')
984          << " - " << O.HelpStr << "\n";
985
986     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
987       size_t NumSpaces = GlobalWidth-strlen(getOption(i))-8;
988       cout << "    =" << getOption(i) << std::string(NumSpaces, ' ')
989            << " -   " << getDescription(i) << "\n";
990     }
991   } else {
992     if (O.HelpStr[0])
993       cout << "  " << O.HelpStr << "\n";
994     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
995       size_t L = std::strlen(getOption(i));
996       cout << "    -" << getOption(i) << std::string(GlobalWidth-L-8, ' ')
997            << " - " << getDescription(i) << "\n";
998     }
999   }
1000 }
1001
1002
1003 //===----------------------------------------------------------------------===//
1004 // --help and --help-hidden option implementation
1005 //
1006
1007 namespace {
1008
1009 class HelpPrinter {
1010   size_t MaxArgLen;
1011   const Option *EmptyArg;
1012   const bool ShowHidden;
1013
1014   // isHidden/isReallyHidden - Predicates to be used to filter down arg lists.
1015   inline static bool isHidden(std::pair<std::string, Option *> &OptPair) {
1016     return OptPair.second->getOptionHiddenFlag() >= Hidden;
1017   }
1018   inline static bool isReallyHidden(std::pair<std::string, Option *> &OptPair) {
1019     return OptPair.second->getOptionHiddenFlag() == ReallyHidden;
1020   }
1021
1022 public:
1023   explicit HelpPrinter(bool showHidden) : ShowHidden(showHidden) {
1024     EmptyArg = 0;
1025   }
1026
1027   void operator=(bool Value) {
1028     if (Value == false) return;
1029
1030     // Get all the options.
1031     std::vector<Option*> PositionalOpts;
1032     std::vector<Option*> SinkOpts;
1033     std::map<std::string, Option*> OptMap;
1034     GetOptionInfo(PositionalOpts, SinkOpts, OptMap);
1035
1036     // Copy Options into a vector so we can sort them as we like...
1037     std::vector<std::pair<std::string, Option*> > Opts;
1038     copy(OptMap.begin(), OptMap.end(), std::back_inserter(Opts));
1039
1040     // Eliminate Hidden or ReallyHidden arguments, depending on ShowHidden
1041     Opts.erase(std::remove_if(Opts.begin(), Opts.end(),
1042                           std::ptr_fun(ShowHidden ? isReallyHidden : isHidden)),
1043                Opts.end());
1044
1045     // Eliminate duplicate entries in table (from enum flags options, f.e.)
1046     {  // Give OptionSet a scope
1047       std::set<Option*> OptionSet;
1048       for (unsigned i = 0; i != Opts.size(); ++i)
1049         if (OptionSet.count(Opts[i].second) == 0)
1050           OptionSet.insert(Opts[i].second);   // Add new entry to set
1051         else
1052           Opts.erase(Opts.begin()+i--);    // Erase duplicate
1053     }
1054
1055     if (ProgramOverview)
1056       cout << "OVERVIEW: " << ProgramOverview << "\n";
1057
1058     cout << "USAGE: " << ProgramName << " [options]";
1059
1060     // Print out the positional options.
1061     Option *CAOpt = 0;   // The cl::ConsumeAfter option, if it exists...
1062     if (!PositionalOpts.empty() &&
1063         PositionalOpts[0]->getNumOccurrencesFlag() == ConsumeAfter)
1064       CAOpt = PositionalOpts[0];
1065
1066     for (size_t i = CAOpt != 0, e = PositionalOpts.size(); i != e; ++i) {
1067       if (PositionalOpts[i]->ArgStr[0])
1068         cout << " --" << PositionalOpts[i]->ArgStr;
1069       cout << " " << PositionalOpts[i]->HelpStr;
1070     }
1071
1072     // Print the consume after option info if it exists...
1073     if (CAOpt) cout << " " << CAOpt->HelpStr;
1074
1075     cout << "\n\n";
1076
1077     // Compute the maximum argument length...
1078     MaxArgLen = 0;
1079     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1080       MaxArgLen = std::max(MaxArgLen, Opts[i].second->getOptionWidth());
1081
1082     cout << "OPTIONS:\n";
1083     for (size_t i = 0, e = Opts.size(); i != e; ++i)
1084       Opts[i].second->printOptionInfo(MaxArgLen);
1085
1086     // Print any extra help the user has declared.
1087     for (std::vector<const char *>::iterator I = MoreHelp->begin(),
1088           E = MoreHelp->end(); I != E; ++I)
1089       cout << *I;
1090     MoreHelp->clear();
1091
1092     // Halt the program since help information was printed
1093     exit(1);
1094   }
1095 };
1096 } // End anonymous namespace
1097
1098 // Define the two HelpPrinter instances that are used to print out help, or
1099 // help-hidden...
1100 //
1101 static HelpPrinter NormalPrinter(false);
1102 static HelpPrinter HiddenPrinter(true);
1103
1104 static cl::opt<HelpPrinter, true, parser<bool> >
1105 HOp("help", cl::desc("Display available options (--help-hidden for more)"),
1106     cl::location(NormalPrinter), cl::ValueDisallowed);
1107
1108 static cl::opt<HelpPrinter, true, parser<bool> >
1109 HHOp("help-hidden", cl::desc("Display all available options"),
1110      cl::location(HiddenPrinter), cl::Hidden, cl::ValueDisallowed);
1111
1112 static void (*OverrideVersionPrinter)() = 0;
1113
1114 namespace {
1115 class VersionPrinter {
1116 public:
1117   void print() {
1118         cout << "Low Level Virtual Machine (http://llvm.org/):\n";
1119         cout << "  " << PACKAGE_NAME << " version " << PACKAGE_VERSION;
1120 #ifdef LLVM_VERSION_INFO
1121         cout << LLVM_VERSION_INFO;
1122 #endif
1123         cout << "\n  ";
1124 #ifndef __OPTIMIZE__
1125         cout << "DEBUG build";
1126 #else
1127         cout << "Optimized build";
1128 #endif
1129 #ifndef NDEBUG
1130         cout << " with assertions";
1131 #endif
1132         cout << ".\n";
1133         cout << "  Built " << __DATE__ << "(" << __TIME__ << ").\n";
1134   }
1135   void operator=(bool OptionWasSpecified) {
1136     if (OptionWasSpecified) {
1137       if (OverrideVersionPrinter == 0) {
1138         print();
1139         exit(1);
1140       } else {
1141         (*OverrideVersionPrinter)();
1142         exit(1);
1143       }
1144     }
1145   }
1146 };
1147 } // End anonymous namespace
1148
1149
1150 // Define the --version option that prints out the LLVM version for the tool
1151 static VersionPrinter VersionPrinterInstance;
1152
1153 static cl::opt<VersionPrinter, true, parser<bool> >
1154 VersOp("version", cl::desc("Display the version of this program"),
1155     cl::location(VersionPrinterInstance), cl::ValueDisallowed);
1156
1157 // Utility function for printing the help message.
1158 void cl::PrintHelpMessage() {
1159   // This looks weird, but it actually prints the help message. The
1160   // NormalPrinter variable is a HelpPrinter and the help gets printed when
1161   // its operator= is invoked. That's because the "normal" usages of the
1162   // help printer is to be assigned true/false depending on whether the
1163   // --help option was given or not. Since we're circumventing that we have
1164   // to make it look like --help was given, so we assign true.
1165   NormalPrinter = true;
1166 }
1167
1168 /// Utility function for printing version number.
1169 void cl::PrintVersionMessage() {
1170   VersionPrinterInstance.print();
1171 }
1172
1173 void cl::SetVersionPrinter(void (*func)()) {
1174   OverrideVersionPrinter = func;
1175 }