diff options
author | Andrew Trick <atrick@apple.com> | 2013-05-06 21:56:35 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-05-06 21:56:35 +0000 |
commit | 61e01721978af4c2979c4b9153e56e72eb6389fb (patch) | |
tree | 2d65367ae409f4f41e4a9b48dbf7f6086d9cda83 /include | |
parent | b7ad33b7195cb99b0cbb1c5308324d328650ca45 (diff) | |
download | llvm-61e01721978af4c2979c4b9153e56e72eb6389fb.tar.gz llvm-61e01721978af4c2979c4b9153e56e72eb6389fb.tar.bz2 llvm-61e01721978af4c2979c4b9153e56e72eb6389fb.tar.xz |
Implemented public interface for modifying registered (not positional or sink options) command line options at runtime.
Patch by Dan Liew!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181254 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/CommandLine.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h index 19b716427f..bfaafda50c 100644 --- a/include/llvm/Support/CommandLine.h +++ b/include/llvm/Support/CommandLine.h @@ -22,6 +22,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Twine.h" +#include "llvm/ADT/StringMap.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/type_traits.h" #include <cassert> @@ -1713,6 +1714,39 @@ void PrintVersionMessage(); /// \param categorized if true print options in categories void PrintHelpMessage(bool Hidden=false, bool Categorized=false); + +//===----------------------------------------------------------------------===// +// Public interface for accessing registered options. +// + +/// \brief Use this to get a StringMap to all registered named options +/// (e.g. -help). Note \p Map Should be an empty StringMap. +/// +/// \param [out] map will be filled with mappings where the key is the +/// Option argument string (e.g. "help") and value is the corresponding +/// Option*. +/// +/// Access to unnamed arguments (i.e. positional) are not provided because +/// it is expected that the client already has access to these. +/// +/// Typical usage: +/// \code +/// main(int argc,char* argv[]) { +/// StringMap<llvm::cl::Option*> opts; +/// llvm::cl::getRegisteredOptions(opts); +/// assert(opts.count("help") == 1) +/// opts["help"]->setDescription("Show alphabetical help information") +/// // More code +/// llvm::cl::ParseCommandLineOptions(argc,argv); +/// //More code +/// } +/// \endcode +/// +/// This interface is useful for modifying options in libraries that are out of +/// the control of the client. The options should be modified before calling +/// llvm::cl::ParseCommandLineOptions(). +void getRegisteredOptions(StringMap<Option*> &Map); + } // End namespace cl } // End namespace llvm |