26 #include "llvm/Config/config.h"
45 namespace llvm {
namespace cl {
64 void GenericOptionValue::anchor() {}
67 void Option::anchor() {}
78 void StringSaver::anchor() {}
107 assert(NextRegistered == 0 &&
"argument multiply registered!");
121 void OptionCategory::registerCategory()
145 for (
size_t i = 0, e = OptionNames.
size(); i != e; ++i) {
149 << OptionNames[i] <<
"' defined more than once!\n";
158 else if (O->getMiscFlags() &
cl::Sink)
162 O->error(
"Cannot specify more than one option with cl::ConsumeAfter!");
171 std::reverse(PositionalOpts.
begin(), PositionalOpts.
end());
181 if (Arg.
empty())
return 0;
183 size_t EqualPos = Arg.
find(
'=');
189 return I != OptionsMap.
end() ? I->
second : 0;
196 if (I == OptionsMap.
end())
return 0;
198 Value = Arg.
substr(EqualPos+1);
199 Arg = Arg.
substr(0, EqualPos);
209 std::string &NearestString) {
211 if (Arg.
empty())
return 0;
214 std::pair<StringRef, StringRef> SplitArg = Arg.
split(
'=');
220 unsigned BestDistance = 0;
222 ie = OptionsMap.
end(); it != ie; ++it) {
230 StringRef Flag = PermitValue ? LHS : Arg;
231 for (
size_t i = 0, e = OptionNames.
size(); i != e; ++i) {
234 Flag,
true, BestDistance);
235 if (!Best || Distance < BestDistance) {
237 BestDistance = Distance;
238 if (RHS.
empty() || !PermitValue)
239 NearestString = OptionNames[i];
241 NearestString = std::string(OptionNames[i]) +
"=" + RHS.
str();
286 const char *
const *argv,
int &i) {
293 if (Value.
data() == 0) {
295 return Handler->
error(
"requires a value!");
301 if (NumAdditionalVals > 0)
302 return Handler->
error(
"multi-valued option specified"
303 " with ValueDisallowed modifier!");
306 return Handler->
error(
"does not allow a value! '" +
307 Twine(Value) +
"' specified.");
314 if (NumAdditionalVals == 0)
318 bool MultiArg =
false;
327 while (NumAdditionalVals > 0) {
329 return Handler->
error(
"not enough values!");
361 bool (*Pred)(
const Option*),
369 while (OMI == OptionsMap.
end() && Name.
size() > 1) {
371 OMI = OptionsMap.
find(Name);
374 if (OMI != OptionsMap.
end() && Pred(OMI->
second)) {
375 Length = Name.
size();
388 if (Arg.
size() == 1)
return 0;
393 if (PGOpt == 0)
return 0;
399 Value = Arg.
substr(Length);
400 Arg = Arg.
substr(0, Length);
401 assert(OptionsMap.
count(Arg) && OptionsMap.
find(Arg)->second == PGOpt);
407 assert(
isGrouping(PGOpt) &&
"Broken getOptionPred!");
417 "Option can not be cl::Grouping AND cl::ValueRequired!");
424 }
while (PGOpt && Length != Arg.
size());
443 return strchr(
" \t\n\r\f\v", C);
447 return C ==
'\"' || C ==
'\'';
451 return strchr(
"\\\"\' ", C);
457 for (
size_t I = 0, E = Src.
size();
I != E; ++
I) {
475 char Quote = Src[I++];
476 while (I != E && Src[I] != Quote) {
478 if (Src[I] ==
'\\' && I + 1 != E &&
isGNUSpecial(Src[I + 1]))
522 size_t E = Src.
size();
523 int BackslashCount = 0;
528 }
while (I != E && Src[I] ==
'\\');
530 bool FollowedByDoubleQuote = (I != E && Src[
I] ==
'"');
531 if (FollowedByDoubleQuote) {
532 Token.
append(BackslashCount / 2,
'\\');
533 if (BackslashCount % 2 == 0)
538 Token.
append(BackslashCount,
'\\');
548 enum {
INIT, UNQUOTED, QUOTED } State =
INIT;
549 for (
size_t I = 0, E = Src.
size();
I != E; ++
I) {
559 if (Src[I] ==
'\\') {
571 if (State == UNQUOTED) {
583 if (Src[I] ==
'\\') {
592 if (State == QUOTED) {
597 if (Src[
I] ==
'\\') {
627 Tokenizer(Str, Saver, NewArgv);
636 unsigned RspFiles = 0;
637 bool AllExpanded =
false;
640 for (
unsigned I = 0;
I != Argv.
size(); ) {
641 const char *Arg = Argv[
I];
669 std::vector<char*> Dups;
672 for (std::vector<char *>::iterator
I = Dups.begin(), E = Dups.end();
692 const char *Overview) {
694 assert(progName &&
"Program name not specified");
695 assert(envVar &&
"Environment variable name missing");
698 const char *envValue =
getenv(envVar);
706 newArgv.
push_back(Saver.SaveString(progName));
711 int newArgc =
static_cast<int>(newArgv.
size());
716 const char *Overview) {
723 assert((!Opts.
empty() || !PositionalOpts.
empty()) &&
724 "No options specified!");
728 for (
int i = 0; i != argc; ++i)
733 argc =
static_cast<int>(newArgv.
size());
737 size_t Len = std::min(ProgName.size(), size_t(79));
742 bool ErrorParsing =
false;
745 unsigned NumPositionalRequired = 0;
748 bool HasUnlimitedPositionals =
false;
750 Option *ConsumeAfterOpt = 0;
751 if (!PositionalOpts.
empty()) {
753 assert(PositionalOpts.
size() > 1 &&
754 "Cannot specify cl::ConsumeAfter without a positional argument!");
755 ConsumeAfterOpt = PositionalOpts[0];
759 bool UnboundedFound =
false;
760 for (
size_t i = ConsumeAfterOpt != 0, e = PositionalOpts.
size();
762 Option *Opt = PositionalOpts[i];
764 ++NumPositionalRequired;
765 else if (ConsumeAfterOpt) {
768 if (PositionalOpts.
size() > 2)
770 Opt->
error(
"error - this positional option will never be matched, "
771 "because it does not Require a value, and a "
772 "cl::ConsumeAfter option is active!");
773 }
else if (UnboundedFound && !Opt->
ArgStr[0]) {
778 ErrorParsing |= Opt->
error(
"error - option can never match, because "
779 "another positional argument will match an "
780 "unbounded number of values, and this option"
781 " does not require a value!");
785 HasUnlimitedPositionals = UnboundedFound || ConsumeAfterOpt;
796 Option *ActivePositionalArg = 0;
799 bool DashDashFound =
false;
800 for (
int i = 1; i < argc; ++i) {
802 Option *NearestHandler = 0;
803 std::string NearestHandlerString;
811 PositionalOpts.
clear();
822 if (argv[i][0] !=
'-' || argv[i][1] == 0 || DashDashFound) {
824 if (ActivePositionalArg) {
829 if (!PositionalOpts.
empty()) {
830 PositionalVals.
push_back(std::make_pair(argv[i],i));
835 if (PositionalVals.
size() >= NumPositionalRequired &&
836 ConsumeAfterOpt != 0) {
837 for (++i; i < argc; ++i)
838 PositionalVals.
push_back(std::make_pair(argv[i],i));
845 }
else if (argv[i][0] ==
'-' && argv[i][1] ==
'-' && argv[i][2] == 0 &&
847 DashDashFound =
true;
849 }
else if (ActivePositionalArg &&
856 while (!ArgName.
empty() && ArgName[0] ==
'-')
857 ArgName = ArgName.
substr(1);
868 while (!ArgName.
empty() && ArgName[0] ==
'-')
869 ArgName = ArgName.
substr(1);
880 if (Handler == 0 && SinkOpts.
empty())
882 NearestHandlerString);
886 if (SinkOpts.
empty()) {
887 errs() << ProgramName <<
": Unknown command line argument '"
888 << argv[i] <<
"'. Try: '" << argv[0] <<
" -help'\n";
890 if (NearestHandler) {
892 errs() << ProgramName <<
": Did you mean '-"
893 << NearestHandlerString <<
"'?\n";
899 E = SinkOpts.
end();
I != E ; ++
I)
900 (*I)->addOccurrence(i,
"", argv[i]);
908 ActivePositionalArg = Handler;
910 ErrorParsing |=
ProvideOption(Handler, ArgName, Value, argc, argv, i);
914 if (NumPositionalRequired > PositionalVals.
size()) {
915 errs() << ProgramName
916 <<
": Not enough positional command line arguments specified!\n"
917 <<
"Must specify at least " << NumPositionalRequired
918 <<
" positional arguments: See: " << argv[0] <<
" -help\n";
921 }
else if (!HasUnlimitedPositionals &&
922 PositionalVals.
size() > PositionalOpts.
size()) {
923 errs() << ProgramName
924 <<
": Too many positional arguments specified!\n"
925 <<
"Can specify at most " << PositionalOpts.
size()
926 <<
" positional arguments: See: " << argv[0] <<
" -help\n";
929 }
else if (ConsumeAfterOpt == 0) {
931 unsigned ValNo = 0, NumVals =
static_cast<unsigned>(PositionalVals.
size());
932 for (
size_t i = 0, e = PositionalOpts.
size(); i != e; ++i) {
935 PositionalVals[ValNo].second);
937 --NumPositionalRequired;
944 bool Done = PositionalOpts[i]->getNumOccurrencesFlag() ==
cl::Required;
945 while (NumVals-ValNo > NumPositionalRequired && !Done) {
946 switch (PositionalOpts[i]->getNumOccurrencesFlag()) {
953 PositionalVals[ValNo].first,
954 PositionalVals[ValNo].second);
959 "positional argument processing!");
964 assert(ConsumeAfterOpt && NumPositionalRequired <= PositionalVals.
size());
966 for (
size_t j = 1, e = PositionalOpts.
size(); j != e; ++j)
969 PositionalVals[ValNo].first,
970 PositionalVals[ValNo].second);
979 if (PositionalOpts.
size() == 2 && ValNo == 0 && !PositionalVals.
empty()) {
981 PositionalVals[ValNo].first,
982 PositionalVals[ValNo].second);
988 for (; ValNo != PositionalVals.
size(); ++ValNo)
990 PositionalVals[ValNo].first,
991 PositionalVals[ValNo].second);
996 E = Opts.
end();
I != E; ++
I) {
997 switch (
I->second->getNumOccurrencesFlag()) {
1000 if (
I->second->getNumOccurrences() == 0) {
1001 I->second->error(
"must be specified at least once!");
1002 ErrorParsing =
true;
1014 for (
int i = 0; i < argc; ++i)
1015 dbgs() << argv[i] <<
' ';
1022 PositionalOpts.
clear();
1026 if (ErrorParsing) exit(1);
1035 if (ArgName.
empty())
1040 errs() <<
" option: " << Message <<
"\n";
1051 if (NumOccurrences > 1)
1052 return error(
"may only occur zero or one times!", ArgName);
1055 if (NumOccurrences > 1)
1056 return error(
"must occur exactly one time!", ArgName);
1063 return handleOccurrence(pos, ArgName, Value);
1071 if (O.
ValueStr[0] == 0)
return DefaultMsg;
1080 size_t alias::getOptionWidth()
const {
1085 size_t FirstLineIndentedBy) {
1086 std::pair<StringRef, StringRef>
Split = HelpStr.
split(
'\n');
1087 outs().
indent(Indent - FirstLineIndentedBy) <<
" - " << Split.first <<
"\n";
1088 while (!Split.second.empty()) {
1089 Split = Split.second.split(
'\n');
1090 outs().
indent(Indent) << Split.first <<
"\n";
1095 void alias::printOptionInfo(
size_t GlobalWidth)
const {
1120 size_t GlobalWidth)
const {
1130 size_t GlobalWidth)
const {
1140 if (Arg ==
"" || Arg ==
"true" || Arg ==
"TRUE" || Arg ==
"True" ||
1146 if (Arg ==
"false" || Arg ==
"FALSE" || Arg ==
"False" || Arg ==
"0") {
1150 return O.
error(
"'" + Arg +
1151 "' is invalid value for boolean argument! Try 0 or 1");
1158 if (Arg ==
"" || Arg ==
"true" || Arg ==
"TRUE" || Arg ==
"True" ||
1163 if (Arg ==
"false" || Arg ==
"FALSE" || Arg ==
"False" || Arg ==
"0") {
1168 return O.
error(
"'" + Arg +
1169 "' is invalid value for boolean argument! Try 0 or 1");
1177 return O.
error(
"'" + Arg +
"' value invalid for integer argument!");
1187 return O.
error(
"'" + Arg +
"' value invalid for uint argument!");
1194 StringRef Arg,
unsigned long long &Value){
1197 return O.
error(
"'" + Arg +
"' value invalid for uint argument!");
1205 const char *ArgStart = TmpStr.
c_str();
1207 Value =
strtod(ArgStart, &End);
1209 return O.
error(
"'" + Arg +
"' value invalid for floating point argument!");
1238 for (
unsigned i = 0; i != e; ++i) {
1254 size_t BaseSize = 0;
1265 size_t GlobalWidth)
const {
1280 outs() <<
" -" << Option;
1294 size_t GlobalWidth)
const {
1299 for (
unsigned i = 0; i != NumOpts; ++i) {
1307 for (
unsigned j = 0; j != NumOpts; ++j) {
1316 outs() <<
"= *unknown option value*\n";
1321 #define PRINT_OPT_DIFF(T) \
1323 printOptionDiff(const Option &O, T V, OptionValue<T> D, \
1324 size_t GlobalWidth) const { \
1325 printOptionName(O, GlobalWidth); \
1328 raw_string_ostream SS(Str); \
1331 outs() << "= " << Str; \
1332 size_t NumSpaces = MaxOptWidth > Str.size() ? MaxOptWidth - Str.size() : 0;\
1333 outs().indent(NumSpaces) << " (default: "; \
1335 outs() << D.getValue(); \
1337 outs() << "*no default*"; \
1350 void parser<std::
string>::
1352 size_t GlobalWidth)
const {
1353 printOptionName(O, GlobalWidth);
1354 outs() <<
"= " << V;
1358 outs() << D.getValue();
1360 outs() <<
"*no default*";
1368 outs() <<
"= *cannot print option value*\n";
1376 typedef std::pair<const char *, Option*> pair_ty;
1378 return strcmp(((
const pair_ty*)LHS)->first, ((
const pair_ty*)RHS)->first);
1395 if (
I->second->getOptionHiddenFlag() ==
Hidden && !ShowHidden)
1399 if (!OptionSet.
insert(
I->second))
1402 Opts.push_back(std::pair<const char *, Option*>(
I->getKey().data(),
1414 const bool ShowHidden;
1417 virtual void printOptions(StrOptionPairVector &Opts,
size_t MaxArgLen) {
1418 for (
size_t i = 0, e = Opts.size(); i != e; ++i)
1419 Opts[i].second->printOptionInfo(MaxArgLen);
1423 explicit HelpPrinter(
bool showHidden) : ShowHidden(showHidden) {}
1424 virtual ~HelpPrinter() {}
1427 void operator=(
bool Value) {
1428 if (Value ==
false)
return;
1436 StrOptionPairVector Opts;
1437 sortOpts(OptMap, Opts, ShowHidden);
1446 if (!PositionalOpts.
empty() &&
1447 PositionalOpts[0]->getNumOccurrencesFlag() ==
ConsumeAfter)
1448 CAOpt = PositionalOpts[0];
1450 for (
size_t i = CAOpt != 0, e = PositionalOpts.
size(); i != e; ++i) {
1451 if (PositionalOpts[i]->ArgStr[0])
1452 outs() <<
" --" << PositionalOpts[i]->ArgStr;
1453 outs() <<
" " << PositionalOpts[i]->HelpStr;
1462 size_t MaxArgLen = 0;
1463 for (
size_t i = 0, e = Opts.size(); i != e; ++i)
1464 MaxArgLen = std::max(MaxArgLen, Opts[i].second->getOptionWidth());
1466 outs() <<
"OPTIONS:\n";
1467 printOptions(Opts, MaxArgLen);
1470 for (std::vector<const char *>::iterator
I =
MoreHelp->begin(),
1481 class CategorizedHelpPrinter :
public HelpPrinter {
1483 explicit CategorizedHelpPrinter(
bool showHidden) : HelpPrinter(showHidden) {}
1490 assert(Length != 0 &&
"Duplicate option categories");
1495 using HelpPrinter::operator= ;
1498 virtual void printOptions(StrOptionPairVector &Opts,
size_t MaxArgLen) {
1499 std::vector<OptionCategory *> SortedCategories;
1500 std::map<OptionCategory *, std::vector<Option *> > CategorizedOptions;
1507 SortedCategories.push_back(*
I);
1510 assert(SortedCategories.size() > 0 &&
"No option categories registered!");
1511 std::sort(SortedCategories.begin(), SortedCategories.end(),
1512 OptionCategoryCompare);
1515 for (std::vector<OptionCategory *>::const_iterator
1516 I = SortedCategories.begin(),
1517 E = SortedCategories.end();
1519 CategorizedOptions[*
I] = std::vector<Option *>();
1524 for (
size_t I = 0, E = Opts.size();
I != E; ++
I) {
1526 assert(CategorizedOptions.count(Opt->
Category) > 0 &&
1527 "Option has an unregistered category");
1528 CategorizedOptions[Opt->
Category].push_back(Opt);
1532 for (std::vector<OptionCategory *>::const_iterator
1533 Category = SortedCategories.begin(),
1534 E = SortedCategories.end();
1535 Category != E; ++Category) {
1537 bool IsEmptyCategory = CategorizedOptions[*Category].size() == 0;
1538 if (!ShowHidden && IsEmptyCategory)
1543 outs() << (*Category)->getName() <<
":\n";
1546 if ((*Category)->getDescription() != 0)
1547 outs() << (*Category)->getDescription() <<
"\n\n";
1553 if (IsEmptyCategory) {
1554 outs() <<
" This option category has no options.\n";
1558 for (std::vector<Option *>::const_iterator
1559 Opt = CategorizedOptions[*Category].
begin(),
1560 E = CategorizedOptions[*Category].
end();
1562 (*Opt)->printOptionInfo(MaxArgLen);
1569 class HelpPrinterWrapper {
1571 HelpPrinter &UncategorizedPrinter;
1572 CategorizedHelpPrinter &CategorizedPrinter;
1575 explicit HelpPrinterWrapper(HelpPrinter &UncategorizedPrinter,
1576 CategorizedHelpPrinter &CategorizedPrinter) :
1577 UncategorizedPrinter(UncategorizedPrinter),
1578 CategorizedPrinter(CategorizedPrinter) { }
1581 void operator=(
bool Value);
1606 cl::desc(
"Display list of available options (-help-list-hidden for more)"),
1610 HLHOp(
"help-list-hidden",
1611 cl::desc(
"Display list of all available options"),
1618 HOp(
"help",
cl::desc(
"Display available options (-help-hidden for more)"),
1622 HHOp(
"help-hidden",
cl::desc(
"Display all available options"),
1629 cl::desc(
"Print non-default options after command line parsing"),
1634 cl::desc(
"Print all option values after command line parsing"),
1637 void HelpPrinterWrapper::operator=(
bool Value) {
1649 CategorizedPrinter =
true;
1652 UncategorizedPrinter =
true;
1669 size_t MaxArgLen = 0;
1670 for (
size_t i = 0, e = Opts.
size(); i != e; ++i)
1671 MaxArgLen = std::max(MaxArgLen, Opts[i].second->getOptionWidth());
1673 for (
size_t i = 0, e = Opts.
size(); i != e; ++i)
1682 class VersionPrinter {
1686 OS <<
"LLVM (http://llvm.org/):\n"
1687 <<
" " << PACKAGE_NAME <<
" version " << PACKAGE_VERSION;
1688 #ifdef LLVM_VERSION_INFO
1689 OS << LLVM_VERSION_INFO;
1692 #ifndef __OPTIMIZE__
1693 OS <<
"DEBUG build";
1695 OS <<
"Optimized build";
1698 OS <<
" with assertions";
1701 if (CPU ==
"generic") CPU =
"(unknown)";
1703 #if (ENABLE_TIMESTAMPS == 1)
1704 <<
" Built " << __DATE__ <<
" (" << __TIME__ <<
").\n"
1707 <<
" Host CPU: " << CPU <<
'\n';
1709 void operator=(
bool OptionWasSpecified) {
1710 if (!OptionWasSpecified)
return;
1713 (*OverrideVersionPrinter)();
1738 VersOp(
"version",
cl::desc(
"Display the version of this program"),
1750 if (!Hidden && !Categorized)
1752 else if (!Hidden && Categorized)
1754 else if (Hidden && !Categorized)
1781 assert(Map.
size() == 0 &&
"StringMap must be empty");
static void Help(const SubtargetFeatureKV *CPUTable, size_t CPUTableSize, const SubtargetFeatureKV *FeatTable, size_t FeatTableSize)
int strcmp(const char *s1, const char *s2);
void push_back(const T &Elt)
const_iterator end(StringRef path)
Get end iterator over path.
Saves strings in the inheritor's stable storage and returns a stable raw character pointer...
static bool isQuote(char C)
OptionCategory GeneralCategory
Option * getNextRegisteredOption() const
static Option * HandlePrefixedOrGroupedOption(StringRef &Arg, StringRef &Value, bool &ErrorParsing, const StringMap< Option * > &OptionsMap)
static bool isPrefixedOrGrouping(const Option *O)
static bool parseDouble(Option &O, StringRef Arg, double &Value)
size_t size() const
size - Get the string size.
const char * getBufferStart() const
static bool isGrouping(const Option *O)
virtual const GenericOptionValue & getOptionValue(unsigned N) const =0
void PrintVersionMessage()
Utility function for printing version number.
size_t find(char C, size_t From=0) const
static void printHelpStr(StringRef HelpStr, size_t Indent, size_t FirstLineIndentedBy)
static const char * ProgramOverview
static ManagedStatic< std::vector< const char * > > MoreHelp
std::string getDefaultTargetTriple()
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
void(* TokenizerCallback)(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
String tokenization function type. Should be compatible with either Windows or Unix command line toke...
std::pair< StringRef, StringRef > split(char Separator) const
#define PRINT_OPT_DIFF(T)
StringRef substr(size_t Start, size_t N=npos) const
iterator find(StringRef Key)
iterator insert(iterator I, const T &Elt)
unsigned findOption(const char *Name)
static void sortOpts(StringMap< Option * > &OptMap, SmallVectorImpl< std::pair< const char *, Option * > > &Opts, bool ShowHidden)
void printOptionName(const Option &O, size_t GlobalWidth) const
std::string str() const
str - Get the contents as an std::string.
const_iterator begin(StringRef path)
Get begin iterator over path.
void SetVersionPrinter(void(*func)())
static HelpPrinter UncategorizedHiddenPrinter(true)
static void(* OverrideVersionPrinter)()=0
double strtod(const char *nptr, char **endptr);
virtual void printOptionInfo(const Option &O, size_t GlobalWidth) const
#define llvm_unreachable(msg)
static const size_t MaxOptWidth
void printOptionDiff(const Option &O, const generic_parser_base &P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
static VersionPrinter VersionPrinterInstance
char *strchr(const char *s, int c);
size_type count(StringRef Key) const
static cl::opt< HelpPrinter, true, parser< bool > > HLOp("help-list", cl::desc("Display list of available options (-help-list-hidden for more)"), cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed)
virtual bool compare(const GenericOptionValue &V) const =0
bool addOccurrence(unsigned pos, StringRef ArgName, StringRef Value, bool MultiArg=false)
void printOptionInfo(const Option &O, size_t GlobalWidth) const
void AddExtraVersionPrinter(void(*func)())
static size_t parseBackslash(StringRef Src, size_t I, SmallString< 128 > &Token)
static HelpPrinter UncategorizedNormalPrinter(false)
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
static cl::opt< HelpPrinter, true, parser< bool > > HLHOp("help-list-hidden", cl::desc("Display list of all available options"), cl::location(UncategorizedHiddenPrinter), cl::Hidden, cl::ValueDisallowed)
const char * data() const
TEMPLATE_INSTANTIATION(class basic_parser< bool >)
void ParseEnvironmentOptions(const char *progName, const char *envvar, const char *Overview=0)
static bool ProvidePositionalOption(Option *Handler, StringRef Arg, int i)
void append(in_iter S, in_iter E)
Append from an iterator pair.
static ManagedStatic< OptionCatSet > RegisteredOptionCategories
initializer< Ty > init(const Ty &Val)
void ParseCommandLineOptions(int argc, const char *const *argv, const char *Overview=0)
size_t getOptionWidth(const Option &O) const
static cl::opt< VersionPrinter, true, parser< bool > > VersOp("version", cl::desc("Display the version of this program"), cl::location(VersionPrinterInstance), cl::ValueDisallowed)
bool parse(Option &O, StringRef ArgName, StringRef Arg, DataType &V)
void getRegisteredOptions(StringMap< Option * > &Map)
Use this to get a StringMap to all registered named options (e.g. -help). Note Map Should be an empty...
enum NumOccurrencesFlag getNumOccurrencesFlag() const
void TokenizeWindowsCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
Tokenizes a Windows command line which may contain quotes and escaped quotes.
void PrintHelpMessage(bool Hidden=false, bool Categorized=false)
std::string getHostCPUName()
virtual const char * SaveString(const char *Str)=0
virtual unsigned getNumOptions() const =0
static Option * LookupNearestOption(StringRef Arg, const StringMap< Option * > &OptionsMap, std::string &NearestString)
OptionCategory * Category
static bool EatsUnboundedNumberOfValues(const Option *O)
static bool OptionListChanged
void MarkOptionsChanged()
enable_if_c< std::numeric_limits< T >::is_signed, bool >::type getAsInteger(unsigned Radix, T &Result) const
void TokenizeGNUCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
Tokenizes a command line that can contain escapes and quotes.
iterator erase(iterator I)
void printGenericOptionDiff(const Option &O, const GenericOptionValue &V, const GenericOptionValue &Default, size_t GlobalWidth) const
unsigned edit_distance(StringRef Other, bool AllowReplacements=true, unsigned MaxEditDistance=0) const
Determine the edit distance between this string and another string.
char *strdup(const char *s1);
SmallPtrSetIterator - This implements a const_iterator for SmallPtrSet.
void printOptionNoValue(const Option &O, size_t GlobalWidth) const
static cl::opt< bool > PrintOptions("print-options", cl::desc("Print non-default options after command line parsing"), cl::Hidden, cl::init(false))
static error_code getFile(Twine Filename, OwningPtr< MemoryBuffer > &result, int64_t FileSize=-1, bool RequiresNullTerminator=true)
static void Split(std::vector< std::string > &V, const StringRef S)
SmallPtrSet< OptionCategory *, 16 > OptionCatSet
enum FormattingFlags getFormattingFlag() const
virtual const char * getOption(unsigned N) const =0
static HelpPrinterWrapper WrappedNormalPrinter(UncategorizedNormalPrinter, CategorizedNormalPrinter)
static bool CommaSeparateAndAddOccurence(Option *Handler, unsigned pos, StringRef ArgName, StringRef Value, bool MultiArg=false)
static const char * getValueStr(const Option &O, const char *DefaultMsg)
static void GetOptionInfo(SmallVectorImpl< Option * > &PositionalOpts, SmallVectorImpl< Option * > &SinkOpts, StringMap< Option * > &OptionsMap)
static bool ProvideOption(Option *Handler, StringRef ArgName, StringRef Value, int argc, const char *const *argv, int &i)
virtual void getExtraOptionNames(SmallVectorImpl< const char * > &)
size_t strlen(const char *s);
virtual size_t getOptionWidth(const Option &O) const
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
static cl::opt< bool > PrintAllOptions("print-all-options", cl::desc("Print all option values after command line parsing"), cl::Hidden, cl::init(false))
static bool isWhitespace(char C)
static bool isGNUSpecial(char C)
static bool RequiresValue(const Option *O)
size_t getBufferSize() const
bool convertUTF16ToUTF8String(ArrayRef< char > SrcBytes, std::string &Out)
static int OptNameCompare(const void *LHS, const void *RHS)
unsigned getNumAdditionalVals() const
MapEntryTy & GetOrCreateValue(StringRef Key, InitTy Val)
enum ValueExpected getValueExpectedFlag() const
static bool ExpandResponseFile(const char *FName, StringSaver &Saver, TokenizerCallback Tokenizer, SmallVectorImpl< const char * > &NewArgv)
static CategorizedHelpPrinter CategorizedNormalPrinter(false)
static Option * RegisteredOptionList
static char ProgramName[80]
virtual const char * getValueName() const
virtual const char * getDescription(unsigned N) const =0
const char * getBufferEnd() const
LLVM Value Representation.
static Option * LookupOption(StringRef &Arg, StringRef &Value, const StringMap< Option * > &OptionsMap)
bool hasUTF16ByteOrderMark(ArrayRef< char > S)
bool ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer, SmallVectorImpl< const char * > &Argv)
Expand response files on a command line recursively using the given StringSaver and tokenization stra...
static cl::opt< HelpPrinterWrapper, true, parser< bool > > HOp("help", cl::desc("Display available options (-help-hidden for more)"), cl::location(WrappedNormalPrinter), cl::ValueDisallowed)
static Option * getOptionPred(StringRef Name, size_t &Length, bool(*Pred)(const Option *), const StringMap< Option * > &OptionsMap)
static CategorizedHelpPrinter CategorizedHiddenPrinter(true)
static std::vector< void(*)()> * ExtraVersionPrinters
bool error(const Twine &Message, StringRef ArgName=StringRef())
const StringRef filename(StringRef path)
Get filename.
static cl::opt< HelpPrinterWrapper, true, parser< bool > > HHOp("help-hidden", cl::desc("Display all available options"), cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed)
char *getenv(const char *name);
static HelpPrinterWrapper WrappedHiddenPrinter(UncategorizedHiddenPrinter, CategorizedHiddenPrinter)
LocationClass< Ty > location(Ty &L)
unsigned getMiscFlags() const
bool empty() const
empty - Check if the string is empty.