loader.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 12953 2f61ebcf37c0
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12952
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     1
-- Allow for both require"util.foo" and require"prosody.util.foo" for a
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     2
-- transition period while we update all require calls.
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     3
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     4
if (...) == "prosody.loader" then
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     5
	if not package.path:find "prosody" then
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     6
		-- For require"util.foo" also look in paths equivalent to "prosody.util.foo"
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     7
		package.path = package.path:gsub("([^;]*)(?[^;]*)", "%1prosody/%2;%1%2");
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     8
		package.cpath = package.cpath:gsub("([^;]*)(?[^;]*)", "%1prosody/%2;%1%2");
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
     9
	end
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    10
else
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    11
	-- When requiring "prosody.x", also look for "x"
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    12
	for i = #package.searchers, 1, -1 do
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    13
		local search = package.searchers[i];
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    14
		table.insert(package.searchers, i, function(module_name)
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    15
			local lib = module_name:match("^prosody%.(.*)$");
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    16
			if lib then
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    17
				return search(lib);
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    18
			end
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    19
		end)
29983f09c913 prosody.loader: Incorporate search path rewrite patch from Debian packages
Kim Alvefur <zash@zash.se>
parents: 12951
diff changeset
    20
	end
12951
14a44b1a51d0 prosody.loader: Allow loading modules under 'prosody' namespace (#1223)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
end
12953
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    22
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    23
-- Look for already loaded module with or without prefix
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    24
setmetatable(package.loaded, {
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    25
	__index = function(loaded, module_name)
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    26
		local suffix = module_name:match("^prosody%.(.*)$");
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    27
		if suffix then
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    28
			return rawget(loaded, suffix);
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    29
		end
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    30
		local prefixed = rawget(loaded, "prosody." .. module_name);
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    31
		if prefixed ~= nil then
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    32
			return prefixed;
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    33
		end
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    34
	end;
2f61ebcf37c0 prosody.loader: Ensure already loaded modules are found in old and new namespaces
Kim Alvefur <zash@zash.se>
parents: 12952
diff changeset
    35
})