diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2018-07-09 11:05:17 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2018-07-10 19:02:50 -0300 |
commit | 9d38b91692d53cc485c55bad8d55357f04b30141 (patch) | |
tree | 77aa4ac896b0004e09d9786f2a565ca3151b4097 /src | |
parent | 68a54b3f1bd8d26aca41b2a2bada1af7ac32f7ff (diff) | |
download | luarocks-9d38b91692d53cc485c55bad8d55357f04b30141.tar.gz luarocks-9d38b91692d53cc485c55bad8d55357f04b30141.tar.bz2 luarocks-9d38b91692d53cc485c55bad8d55357f04b30141.zip |
cfg: detect sysconfdir based on location of sources
This will help a stand-alone luarocks.loader find the system config file
without any environment variable or hardcoded value, in most common situations
(i.e. unless a non-standard sysconfdir was given during installation -- but
then a stand-alone luarocks.loader loaded by a third-party program probably
shouldn't assume non-standard configurations anyway; and when they do they
should set up their environment accordingly, preloading
luarocks.core.hardcoded.)
Diffstat (limited to 'src')
-rw-r--r-- | src/luarocks/core/cfg.lua | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua index b8fedd28..de8a93bf 100644 --- a/src/luarocks/core/cfg.lua +++ b/src/luarocks/core/cfg.lua | |||
@@ -46,6 +46,42 @@ local platform_order = { | |||
46 | "mingw32", | 46 | "mingw32", |
47 | } | 47 | } |
48 | 48 | ||
49 | local function detect_sysconfdir(lua_version) | ||
50 | local src = debug.getinfo(1, "S").source:gsub("\\", "/"):gsub("/+", "/") | ||
51 | local basedir = src:match("^(.*)/luarocks/core/cfg.lua$") | ||
52 | if not basedir then | ||
53 | return | ||
54 | end | ||
55 | -- If installed in a Unix-like tree, use a Unix-like sysconfdir | ||
56 | local installdir = basedir:match("^(.*)/share/lua/" .. lua_version .. "$") | ||
57 | if installdir then | ||
58 | if installdir == "/usr" then | ||
59 | return "/etc/luarocks" | ||
60 | end | ||
61 | return installdir .. "/etc/luarocks" | ||
62 | end | ||
63 | -- Otherwise, use base directory of sources | ||
64 | return basedir | ||
65 | end | ||
66 | |||
67 | local function set_confdirs(cfg, platforms, hardcoded_sysconfdir) | ||
68 | local sysconfdir = os.getenv("LUAROCKS_SYSCONFDIR") or hardcoded_sysconfdir | ||
69 | if not sysconfdir then | ||
70 | sysconfdir = detect_sysconfdir(cfg.lua_version) | ||
71 | end | ||
72 | if platforms.windows then | ||
73 | cfg.home = os.getenv("APPDATA") or "c:" | ||
74 | cfg.home_tree = cfg.home.."/luarocks" | ||
75 | cfg.homeconfdir = cfg.home_tree | ||
76 | cfg.sysconfdir = sysconfdir or ((os.getenv("PROGRAMFILES") or "c:") .. "/luarocks") | ||
77 | else | ||
78 | cfg.home = os.getenv("HOME") or "" | ||
79 | cfg.home_tree = (os.getenv("USER") ~= "root") and cfg.home.."/.luarocks" | ||
80 | cfg.homeconfdir = cfg.home.."/.luarocks" | ||
81 | cfg.sysconfdir = sysconfdir or "/etc/luarocks" | ||
82 | end | ||
83 | end | ||
84 | |||
49 | local load_config_file | 85 | local load_config_file |
50 | do | 86 | do |
51 | -- Create global environment for the config files; | 87 | -- Create global environment for the config files; |
@@ -575,27 +611,10 @@ function cfg.init(lua_data, project_dir, warning) | |||
575 | local home_config_file | 611 | local home_config_file |
576 | local project_config_file | 612 | local project_config_file |
577 | do | 613 | do |
578 | local sysconfdir = os.getenv("LUAROCKS_SYSCONFDIR") or hardcoded.SYSCONFDIR | 614 | set_confdirs(cfg, platforms, hardcoded.SYSCONFDIR) |
579 | local sdir, hdir | ||
580 | local name = "config-"..cfg.lua_version..".lua" | 615 | local name = "config-"..cfg.lua_version..".lua" |
581 | if platforms.windows then | 616 | sys_config_file = (cfg.sysconfdir .. "/" .. name):gsub("\\", "/") |
582 | cfg.home = os.getenv("APPDATA") or "c:" | 617 | home_config_file = (cfg.homeconfdir .. "/" .. name):gsub("\\", "/") |
583 | sdir = sysconfdir or (os.getenv("PROGRAMFILES") or "c:") .. "/luarocks" | ||
584 | hdir = cfg.home.."/luarocks" | ||
585 | cfg.home_tree = cfg.home.."/luarocks" | ||
586 | else | ||
587 | cfg.home = os.getenv("HOME") or "" | ||
588 | sdir = sysconfdir or "/etc/luarocks" | ||
589 | hdir = cfg.home.."/.luarocks" | ||
590 | cfg.home_tree = (os.getenv("USER") ~= "root") and cfg.home.."/.luarocks/" | ||
591 | end | ||
592 | sys_config_file = sdir .. "/" .. name | ||
593 | home_config_file = hdir .. "/" .. name | ||
594 | cfg.sysconfdir = sdir | ||
595 | |||
596 | sys_config_file = sys_config_file:gsub("\\", "/") | ||
597 | home_config_file = home_config_file:gsub("\\", "/") | ||
598 | |||
599 | if project_dir then | 618 | if project_dir then |
600 | project_config_file = project_dir .. "/.luarocks/" .. name | 619 | project_config_file = project_dir .. "/.luarocks/" .. name |
601 | end | 620 | end |