diff --git a/llvm/docs/CommandGuide/llvm-nm.rst b/llvm/docs/CommandGuide/llvm-nm.rst --- a/llvm/docs/CommandGuide/llvm-nm.rst +++ b/llvm/docs/CommandGuide/llvm-nm.rst @@ -230,10 +230,10 @@ Print only undefined symbols. -.. option:: --version +.. option:: --version, -V - Display the version of the :program:`llvm-nm` executable. Does not stack with - other commands. + Display the version of the :program:`llvm-nm` executable, then exit. Does not + stack with other commands. .. option:: --without-aliases diff --git a/llvm/test/tools/llvm-nm/libtool-version.test b/llvm/test/tools/llvm-nm/libtool-version.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-nm/libtool-version.test @@ -0,0 +1,8 @@ +# Check that the output of llvm-nm -V (and --version) contains the text +# "GNU" somewhere, to let libtool know that it is compatible with GNU nm. +# Also check that it contains the LLVM version. + +RUN: llvm-nm -V | FileCheck %s +RUN: llvm-nm --version | FileCheck %s +CHECK: LLVM version +CHECK: GNU diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -229,6 +229,8 @@ "TBD(Mach-O) only"), cl::cat(NMCat)); +cl::opt Version("V", cl::desc("Print version info"), cl::cat(NMCat)); + cl::extrahelp HelpResponse("\nPass @FILE as argument to read options from FILE.\n"); bool PrintAddress = true; @@ -2235,11 +2237,23 @@ } } +static void printExtraVersionInfo(raw_ostream &Outs) { + // This needs to contain the word "GNU", libtool looks for that string. + Outs << "llvm-nm, compatible with GNU nm\n"; +} + int main(int argc, char **argv) { InitLLVM X(argc, argv); cl::HideUnrelatedOptions(NMCat); + cl::AddExtraVersionPrinter(printExtraVersionInfo); cl::ParseCommandLineOptions(argc, argv, "llvm symbol table dumper\n"); + if (Version) { + cl::PrintVersionMessage(); + printExtraVersionInfo(outs()); + return 0; + } + // llvm-nm only reads binary files. if (error(sys::ChangeStdinToBinary())) return 1;