util/paths.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 11187 2ac63715ef6f
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:
6508
2dc8dbd0940e util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents: 6164
diff changeset
     1
local t_concat = table.concat;
2dc8dbd0940e util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents: 6164
diff changeset
     2
6164
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
local path_sep = package.config:sub(1,1);
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local path_util = {}
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
-- Helper function to resolve relative paths (needed by config)
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
function path_util.resolve_relative_path(parent_path, path)
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	if path then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
		-- Some normalization
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
		parent_path = parent_path:gsub("%"..path_sep.."+$", "");
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
		path = path:gsub("^%.%"..path_sep.."+", "");
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		local is_relative;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		if path_sep == "/" and path:sub(1,1) ~= "/" then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
			is_relative = true;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		elseif path_sep == "\\" and (path:sub(1,1) ~= "/" and (path:sub(2,3) ~= ":\\" and path:sub(2,3) ~= ":/")) then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
			is_relative = true;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
		end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
		if is_relative then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
			return parent_path..path_sep..path;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
		end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	return path;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
-- Helper function to convert a glob to a Lua pattern
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
function path_util.glob_to_pattern(glob)
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
	return "^"..glob:gsub("[%p*?]", function (c)
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
		if c == "*" then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
			return ".*";
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
		elseif c == "?" then
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
			return ".";
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
		else
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
			return "%"..c;
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
		end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
	end).."$";
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
end
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
11187
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    40
function path_util.join(a, b, c, ...) -- (... : string) --> string
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    41
	-- Optimization: Avoid creating table for most uses
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    42
	if b then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    43
		if c then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    44
			if ... then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    45
				return t_concat({a,b,c,...}, path_sep);
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    46
			end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    47
			return a..path_sep..b..path_sep..c;
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    48
		end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    49
		return a..path_sep..b;
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    50
	end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10406
diff changeset
    51
	return a;
6508
2dc8dbd0940e util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents: 6164
diff changeset
    52
end
2dc8dbd0940e util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents: 6164
diff changeset
    53
10201
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    54
function path_util.complement_lua_path(installer_plugin_path)
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    55
	-- Checking for duplicates
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    56
	-- The commands using luarocks need the path to the directory that has the /share and /lib folders.
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    57
	local lua_version = _VERSION:match(" (.+)$");
10204
48ee50ed9972 util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents: 10201
diff changeset
    58
	local lua_path_sep = package.config:sub(3,3);
10201
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    59
	local dir_sep = package.config:sub(1,1);
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    60
	local sub_path = dir_sep.."lua"..dir_sep..lua_version..dir_sep;
10406
0971694b30a8 util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents: 10208
diff changeset
    61
	if not string.find(package.path, installer_plugin_path, 1, true) then
10204
48ee50ed9972 util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents: 10201
diff changeset
    62
		package.path = package.path..lua_path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?.lua";
48ee50ed9972 util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents: 10201
diff changeset
    63
		package.path = package.path..lua_path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?"..dir_sep.."init.lua";
10201
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    64
	end
10406
0971694b30a8 util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents: 10208
diff changeset
    65
	if not string.find(package.path, installer_plugin_path, 1, true) then
10208
fbd4a5bc3a01 util.paths: Fixed file termination for package.cpath's extra path
João Duarte <jvsDuarte08@gmail.com>
parents: 10204
diff changeset
    66
		package.cpath = package.cpath..lua_path_sep..installer_plugin_path..dir_sep.."lib"..sub_path.."?.so";
10201
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    67
	end
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    68
end
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6508
diff changeset
    69
6164
ef4024f6bc40 core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
return path_util;