Software / code / prosody
Comparison
util/startup.lua @ 10175:4dac771ddf9f
util.startup: Improved how .set_plugindir updates prosody.paths.plugins, package.path and package.cpath
| author | João Duarte <jvsDuarte08@gmail.com> |
|---|---|
| date | Fri, 26 Jul 2019 17:54:37 -0700 |
| parent | 10174:55dc8eb1e7d3 |
| child | 10192:761ff113c741 |
comparison
equal
deleted
inserted
replaced
| 10174:55dc8eb1e7d3 | 10175:4dac771ddf9f |
|---|---|
| 224 function startup.setup_datadir() | 224 function startup.setup_datadir() |
| 225 prosody.paths.data = config.get("*", "data_path") or CFG_DATADIR or "data"; | 225 prosody.paths.data = config.get("*", "data_path") or CFG_DATADIR or "data"; |
| 226 end | 226 end |
| 227 | 227 |
| 228 function startup.setup_plugindir() | 228 function startup.setup_plugindir() |
| 229 --local lfs_currentdir = require "lfs".currentdir() | |
| 230 --local current_directory = lfs_currentdir | |
| 231 local custom_plugin_paths = config.get("*", "plugin_paths"); | 229 local custom_plugin_paths = config.get("*", "plugin_paths"); |
| 232 local installer_plugin_path = config.get("*", "installer_plugin_path") or "custom_plugins"; | 230 local installer_plugin_path = config.get("*", "installer_plugin_path") or "custom_plugins"; |
| 231 -- This variable separates different paths, like this "," here -> /usr;/home | |
| 233 local path_sep = package.config:sub(3,3); | 232 local path_sep = package.config:sub(3,3); |
| 233 -- This variable is the separator between directories, in a path, like the "/" here -> /home/path/to/somewhere | |
| 234 local dir_sep = package.config:sub(1,1); | |
| 234 if custom_plugin_paths then | 235 if custom_plugin_paths then |
| 235 -- path1;path2;path3;defaultpath... | 236 -- path1;path2;path3;defaultpath... |
| 236 -- luacheck: ignore 111 | 237 -- luacheck: ignore 111 |
| 237 CFG_PLUGINDIR = table.concat(custom_plugin_paths, path_sep)..path_sep..(CFG_PLUGINDIR or "plugins"); | 238 CFG_PLUGINDIR = table.concat(custom_plugin_paths, path_sep)..path_sep..(CFG_PLUGINDIR or "plugins"); |
| 238 prosody.paths.plugins = CFG_PLUGINDIR; | 239 prosody.paths.plugins = CFG_PLUGINDIR; |
| 239 end | 240 end |
| 240 -- Checking if the folder exists. If it doesn't, we create it | 241 -- Checks if installer_plugin_path is a relative paths and makes it an absolute path |
| 242 if installer_plugin_path:sub(1,1) ~= "/" then | |
| 243 -- Works fine when executing prosody from source (configure and make only) | |
| 244 -- Probably wont be the best install directory, when using a package installation | |
| 245 local lfs_currentdir = require "lfs".currentdir(); | |
| 246 local current_directory = lfs_currentdir; | |
| 247 -- Some normalization | |
| 248 installer_plugin_path = installer_plugin_path:gsub("^%.%"..dir_sep.."+", ""); | |
| 249 installer_plugin_path = current_directory..dir_sep..installer_plugin_path; | |
| 250 end | |
| 251 -- Checking if the folder exists. If it doesn't, we create it, but we need permissions to do so | |
| 241 if os.execute('[ -d "'..installer_plugin_path..'" ]') ~= 0 then | 252 if os.execute('[ -d "'..installer_plugin_path..'" ]') ~= 0 then |
| 242 os.execute("mkdir "..installer_plugin_path) | 253 os.execute("mkdir "..installer_plugin_path); |
| 243 end | 254 end |
| 244 --[[if not string.find(package.path, current_directory..installer_plugin_path[path]) then | 255 -- Developers may have add these custom paths to their LUA_PATH/LUA_CPATH variables, before running prosody |
| 245 --os.execute("ls -la "..current_directory..path_sep..installer_plugin_paths[path]) | 256 -- Therefore, I'll just check if the paths we are about to add aren't already at package.(path/cpath) |
| 246 package.path = package.path..path_sep..current_directory..installer_plugin_path.."/?.lua"..path_sep..path_sep | 257 if not string.match(package.path, installer_plugin_path) then |
| 247 package.path = package.path..current_directory..installer_plugin_path.."/?/init.lua"..path_sep..path_sep | 258 local lua_version = _VERSION:match(" (.+)$") |
| 248 package.cpath = package.cpath..path_sep..current_directory..installer_plugin_path.."/?.lua" | 259 -- I'm assuming there's good reason not to hard code any separator |
| 249 package.cpath = package.cpath..path_sep..current_directory..installer_plugin_path.."/?/init.lua" | 260 -- This next line is unnecessary, but I think it makes the code more readable and neat |
| 250 end]] | 261 local sub_path = dir_sep.."lua"..dir_sep..lua_version..dir_sep |
| 262 package.path = package.path..path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?.lua"; | |
| 263 package.path = package.path..path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?"..dir_sep.."init.lua"; | |
| 264 package.cpath = package.cpath..path_sep..installer_plugin_path..dir_sep.."lib"..sub_path.."?.lua"; | |
| 265 end | |
| 266 -- The commands using luarocks need the path to the directory that has the /share and /lib folders. | |
| 251 CFG_PLUGINDIR = installer_plugin_path..path_sep..(CFG_PLUGINDIR or "plugins"); | 267 CFG_PLUGINDIR = installer_plugin_path..path_sep..(CFG_PLUGINDIR or "plugins"); |
| 252 prosody.paths.plugins = CFG_PLUGINDIR; | 268 prosody.paths.plugins = CFG_PLUGINDIR; |
| 253 end | 269 end |
| 254 | 270 |
| 255 function startup.chdir() | 271 function startup.chdir() |