Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/base/StarVersionOptionParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/base/StarVersionOptionParser.cpp')
-rw-r--r--source/base/StarVersionOptionParser.cpp46
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));
+}
+
+}