changeset 14066:b085d32af140 13.0

prosody, prosodyctl: Load loader directly from source directory This should ensure that loader.lua is loaded from the source directory and does the right thing when installed with `make install` There are currently three ways Prosody can be run: - Directly from the source directory, like `./prosody` - Installed with `make install` - Installed into Lua paths with e.g. dh-lua or luarocks In the first two cases, Lua search paths need to include the source directory and ensure that `require "prosody.util.json"` ends up loading `util/json.lua` relative to the installation (CFG_SOURCEDIR) or the source checkout. Finally, in the last case where Prosody resources are installed under the 'prosody.*' namespace in regular Lua search paths, then loader.lua should activate the compatibility mode that makes sure that both `require"util.json"` and `require"prosody.util.json"` both resolve to `(one path from of package.path)/prosody/util/json.lua`
author Kim Alvefur <zash@zash.se>
date Mon, 09 Feb 2026 16:59:42 +0100
parents ef586363d90f
children 6ccc6e0ece29 2462247ec377
files prosody prosodyctl tools/migration/prosody-migrator.lua
diffstat 3 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/prosody	Mon Feb 09 01:53:50 2026 +0100
+++ b/prosody	Mon Feb 09 16:59:42 2026 +0100
@@ -42,7 +42,11 @@
 	package.path = sanitise_paths(CFG_SOURCEDIR.."/?.lua;"..package.path);
 	package.cpath = sanitise_paths(CFG_SOURCEDIR.."/?.so;"..package.cpath);
 
-	require "prosody.loader";
+	if pcall(dofile, CFG_SOURCEDIR .. "/loader.lua") then
+		package.loaded["prosody.loader"] = true;
+	else
+		require "prosody.loader";
+	end
 else
 	-- Not installed, e.g. running from a source checkout
 	require "loader";
--- a/prosodyctl	Mon Feb 09 01:53:50 2026 +0100
+++ b/prosodyctl	Mon Feb 09 16:59:42 2026 +0100
@@ -42,7 +42,11 @@
 	package.path = sanitise_paths(CFG_SOURCEDIR.."/?.lua;"..package.path);
 	package.cpath = sanitise_paths(CFG_SOURCEDIR.."/?.so;"..package.cpath);
 
-	require "prosody.loader";
+	if pcall(dofile, CFG_SOURCEDIR .. "/loader.lua") then
+		package.loaded["prosody.loader"] = true;
+	else
+		require "prosody.loader";
+	end
 else
 	-- Not installed, e.g. running from a source checkout
 	require "loader";
--- a/tools/migration/prosody-migrator.lua	Mon Feb 09 01:53:50 2026 +0100
+++ b/tools/migration/prosody-migrator.lua	Mon Feb 09 16:59:42 2026 +0100
@@ -31,7 +31,11 @@
 	package.path = sanitise_paths(CFG_SOURCEDIR.."/?.lua;"..package.path);
 	package.cpath = sanitise_paths(CFG_SOURCEDIR.."/?.so;"..package.cpath);
 
-	require "prosody.loader";
+	if pcall(dofile, CFG_SOURCEDIR .. "/loader.lua") then
+		package.loaded["prosody.loader"] = true;
+	else
+		require "prosody.loader";
+	end
 else
 	-- Not installed, e.g. running from a source checkout
 	require "loader";