diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h index 19b5f29fb7f..8517032fefe 100644 --- a/include/llvm/Support/CommandLine.h +++ b/include/llvm/Support/CommandLine.h @@ -48,6 +48,13 @@ void ParseCommandLineOptions(int &argc, char **argv, void ParseEnvironmentOptions(const char *progName, const char *envvar, const char *Overview = 0); +///===---------------------------------------------------------------------===// +/// SetVersionPrinter - Override the default (LLVM specific) version printer +/// used to print out the version when --version is given +/// on the command line. This gives other systems using the +/// CommandLine utilities to print their own version string. +void SetVersionPrinter(void (*func)()); + //===----------------------------------------------------------------------===// // Flags permitted to be passed to command line arguments // diff --git a/lib/Support/CommandLine.cpp b/lib/Support/CommandLine.cpp index 90867e7da71..4b3a1d8f7d2 100644 --- a/lib/Support/CommandLine.cpp +++ b/lib/Support/CommandLine.cpp @@ -951,24 +951,6 @@ public: } }; -class VersionPrinter { -public: - void operator=(bool OptionWasSpecified) { - if (OptionWasSpecified) { - std::cout << "Low Level Virtual Machine (" << PACKAGE_NAME << ") " - << PACKAGE_VERSION << " (see http://llvm.org/)"; -#ifndef NDEBUG - std::cout << " ASSERTIONS ENABLED\n"; -#else - std::cout << "\n"; -#endif - getOpts().clear(); // Don't bother making option dtors remove from map. - exit(1); - } - } -}; - - // Define the two HelpPrinter instances that are used to print out help, or // help-hidden... // @@ -983,6 +965,31 @@ cl::opt > HHOp("help-hidden", cl::desc("Display all available options"), cl::location(HiddenPrinter), cl::Hidden, cl::ValueDisallowed); +void (*OverrideVersionPrinter)() = 0; + +class VersionPrinter { +public: + void operator=(bool OptionWasSpecified) { + if (OptionWasSpecified) { + if (OverrideVersionPrinter == 0) { + std::cout << "Low Level Virtual Machine (" << PACKAGE_NAME << ") " + << PACKAGE_VERSION << " (see http://llvm.org/)"; +#ifndef NDEBUG + std::cout << " ASSERTIONS ENABLED\n"; +#else + std::cout << "\n"; +#endif + getOpts().clear(); // Don't bother making option dtors remove from map. + exit(1); + } else { + (*OverrideVersionPrinter)(); + exit(1); + } + } + } +}; + + // Define the --version option that prints out the LLVM version for the tool VersionPrinter VersionPrinterInstance; cl::opt > @@ -1002,3 +1009,7 @@ void cl::PrintHelpMessage() { // to make it look like --help was given, so we assign true. NormalPrinter = true; } + +void cl::SetVersionPrinter(void (*func)()) { + OverrideVersionPrinter = func; +}