diff options
Diffstat (limited to 'source/base/StarVersionOptionParser.cpp')
-rw-r--r-- | source/base/StarVersionOptionParser.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/source/base/StarVersionOptionParser.cpp b/source/base/StarVersionOptionParser.cpp new file mode 100644 index 0000000..85995ec --- /dev/null +++ b/source/base/StarVersionOptionParser.cpp @@ -0,0 +1,46 @@ +#include "StarVersionOptionParser.hpp" +#include "StarFile.hpp" + +namespace Star { + +void VersionOptionParser::printVersion(std::ostream& os) { + format(os, "Starbound Version %s (%s)\n", StarVersionString, StarArchitectureString); + format(os, "Source Identifier - %s\n", StarSourceIdentifierString); +} + +VersionOptionParser::VersionOptionParser() { + addSwitch("help", "Show help text"); + addSwitch("version", "Print version info"); +} + +VersionOptionParser::Options VersionOptionParser::parseOrDie(StringList const& cmdLineArguments) const { + Options options; + StringList errors; + tie(options, errors) = OptionParser::parseOptions(cmdLineArguments); + + if (options.switches.contains("version")) + printVersion(std::cout); + + if (options.switches.contains("help")) + printHelp(std::cout); + + if (options.switches.contains("version") || options.switches.contains("help")) + std::exit(0); + + if (!errors.empty()) { + for (auto const& err : errors) + coutf("Error: %s\n", err); + coutf("\n"); + printHelp(std::cout); + std::exit(1); + } + + return options; +} + +VersionOptionParser::Options VersionOptionParser::commandParseOrDie(int argc, char** argv) { + setCommandName(File::baseName(argv[0])); + return parseOrDie(StringList(argc - 1, argv + 1)); +} + +} |