aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2020-01-19 15:26:22 +0000
committerMatthew Wild <mwild1@gmail.com>2020-01-19 15:26:22 +0000
commit17358273f2d7ad5624459ecc3d0c01b8bb48a1f2 (patch)
tree90932c8da64ab5f82ae3f1bf80c14f0db34c974c
parent954b42849d39da059603d00d1ee8851d25894636 (diff)
downloadprosody-17358273f2d7ad5624459ecc3d0c01b8bb48a1f2.tar.gz
prosody-17358273f2d7ad5624459ecc3d0c01b8bb48a1f2.zip
util.startup: Add startup step for parsing command-line options
-rw-r--r--util/startup.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/util/startup.lua b/util/startup.lua
index e88ed709..fb898970 100644
--- a/util/startup.lua
+++ b/util/startup.lua
@@ -12,6 +12,60 @@ local dependencies = require "util.dependencies";
local original_logging_config;
+local short_params = { D = "daemonize", F = "no-daemonize" };
+local value_params = { config = true };
+
+function startup.parse_args()
+ local parsed_opts = {};
+
+ if #arg > 0 and arg[1] ~= "--config" then
+ while true do
+ local raw_param = arg[1];
+ if not raw_param then
+ break;
+ end
+
+ local prefix = raw_param:match("^%-%-?");
+ if not prefix then
+ break;
+ elseif prefix == "--" and raw_param == "--" then
+ table.remove(arg, 1);
+ break;
+ end
+ local param = table.remove(arg, 1):sub(#prefix+1);
+ if #param == 1 then
+ param = short_params[param];
+ end
+
+ if not param then
+ print("Unknown command-line option: "..tostring(param));
+ print("Perhaps you meant to use prosodyctl instead?");
+ os.exit(1);
+ end
+
+ local param_k, param_v;
+ if value_params[param] then
+ param_k, param_v = param, table.remove(arg, 1);
+ if not param_v then
+ print("Expected a value to follow command-line option: "..raw_param);
+ os.exit(1);
+ end
+ else
+ param_k, param_v = param:match("^([^=]+)=(.+)$");
+ if not param_k then
+ if param:match("^no%-") then
+ param_k, param_v = param:sub(4), false;
+ else
+ param_k, param_v = param, true;
+ end
+ end
+ end
+ parsed_opts[param_k] = param_v;
+ end
+ end
+ prosody.opts = parsed_opts;
+end
+
function startup.read_config()
local filenames = {};