Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
luarocks/src/luarocks/cfg.lua
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
680 lines (599 sloc)
21.3 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- Configuration for LuaRocks. | |
| -- Tries to load the user's configuration file and | |
| -- defines defaults for unset values. See the | |
| -- <a href="http://luarocks.org/en/Config_file_format">config | |
| -- file format documentation</a> for details. | |
| -- | |
| -- End-users shouldn't edit this file. They can override any defaults | |
| -- set in this file using their system-wide $LUAROCKS_SYSCONFIG file | |
| -- (see luarocks.site_config) or their user-specific configuration file | |
| -- (~/.luarocks/config.lua on Unix or %APPDATA%/luarocks/config.lua on | |
| -- Windows). | |
| local rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, tonumber, type, assert, _VERSION = | |
| rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, tonumber, type, assert, _VERSION | |
| --module("luarocks.cfg") | |
| local cfg = {} | |
| package.loaded["luarocks.cfg"] = cfg | |
| local util = require("luarocks.util") | |
| cfg.lua_version = _VERSION:sub(5) | |
| local version_suffix = cfg.lua_version:gsub("%.", "_") | |
| -- Load site-local global configurations | |
| local ok, site_config = pcall(require, "luarocks.site_config_"..version_suffix) | |
| if not ok then | |
| ok, site_config = pcall(require, "luarocks.site_config") | |
| end | |
| if not ok then | |
| io.stderr:write("Site-local luarocks/site_config.lua file not found. Incomplete installation?\n") | |
| site_config = {} | |
| end | |
| cfg.program_version = "scm" | |
| cfg.program_series = "2.2" | |
| cfg.major_version = (cfg.program_version:match("([^.]%.[^.])")) or cfg.program_series | |
| cfg.variables = {} | |
| cfg.rocks_trees = {} | |
| cfg.platforms = {} | |
| local persist = require("luarocks.persist") | |
| cfg.errorcodes = setmetatable({ | |
| OK = 0, | |
| UNSPECIFIED = 1, | |
| PERMISSIONDENIED = 2, | |
| CONFIGFILE = 3, | |
| CRASH = 99 | |
| },{ | |
| __index = function(t, key) | |
| local val = rawget(t, key) | |
| if not val then | |
| error("'"..tostring(key).."' is not a valid errorcode", 2) | |
| end | |
| return val | |
| end | |
| }) | |
| local popen_ok, popen_result = pcall(io.popen, "") | |
| if popen_ok then | |
| if popen_result then | |
| popen_result:close() | |
| end | |
| else | |
| io.stderr:write("Your version of Lua does not support io.popen,\n") | |
| io.stderr:write("which is required by LuaRocks. Please check your Lua installation.\n") | |
| os.exit(cfg.errorcodes.UNSPECIFIED) | |
| end | |
| -- System detection: | |
| -- A proper installation of LuaRocks will hardcode the system | |
| -- and proc values with site_config.LUAROCKS_UNAME_S and site_config.LUAROCKS_UNAME_M, | |
| -- so that this detection does not run every time. When it is | |
| -- performed, we use the Unix way to identify the system, | |
| -- even on Windows (assuming UnxUtils or Cygwin). | |
| local system = site_config.LUAROCKS_UNAME_S or io.popen("uname -s"):read("*l") | |
| local proc = site_config.LUAROCKS_UNAME_M or io.popen("uname -m"):read("*l") | |
| if proc:match("i[%d]86") then | |
| cfg.target_cpu = "x86" | |
| elseif proc:match("amd64") or proc:match("x86_64") then | |
| cfg.target_cpu = "x86_64" | |
| elseif proc:match("Power Macintosh") then | |
| cfg.target_cpu = "powerpc" | |
| else | |
| cfg.target_cpu = proc | |
| end | |
| if system == "FreeBSD" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.freebsd = true | |
| cfg.platforms.bsd = true | |
| elseif system == "OpenBSD" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.openbsd = true | |
| cfg.platforms.bsd = true | |
| elseif system == "NetBSD" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.netbsd = true | |
| cfg.platforms.bsd = true | |
| elseif system == "Darwin" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.macosx = true | |
| cfg.platforms.bsd = true | |
| elseif system == "Linux" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.linux = true | |
| elseif system == "SunOS" then | |
| cfg.platforms.unix = true | |
| cfg.platforms.solaris = true | |
| elseif system and system:match("^CYGWIN") then | |
| cfg.platforms.unix = true | |
| cfg.platforms.cygwin = true | |
| elseif system and system:match("^Windows") then | |
| cfg.platforms.windows = true | |
| cfg.platforms.win32 = true | |
| elseif system and system:match("^MINGW") then | |
| cfg.platforms.windows = true | |
| cfg.platforms.mingw32 = true | |
| cfg.platforms.win32 = true | |
| else | |
| cfg.platforms.unix = true | |
| -- Fall back to Unix in unknown systems. | |
| end | |
| -- Set order for platform overrides | |
| local platform_order = { | |
| -- Unixes | |
| unix = 1, | |
| bsd = 2, | |
| solaris = 3, | |
| netbsd = 4, | |
| openbsd = 5, | |
| freebsd = 6, | |
| linux = 7, | |
| macosx = 8, | |
| cygwin = 9, | |
| -- Windows | |
| win32 = 10, | |
| mingw32 = 11, | |
| windows = 12 } | |
| -- Path configuration: | |
| local sys_config_file, home_config_file | |
| local sys_config_file_default, home_config_file_default | |
| local sys_config_dir, home_config_dir | |
| local sys_config_ok, home_config_ok = false, false | |
| local extra_luarocks_module_dir | |
| sys_config_dir = site_config.LUAROCKS_SYSCONFDIR | |
| if cfg.platforms.windows then | |
| cfg.home = os.getenv("APPDATA") or "c:" | |
| sys_config_dir = sys_config_dir or "c:/luarocks" | |
| home_config_dir = cfg.home.."/luarocks" | |
| cfg.home_tree = cfg.home.."/luarocks/" | |
| else | |
| cfg.home = os.getenv("HOME") or "" | |
| sys_config_dir = sys_config_dir or "/etc/luarocks" | |
| home_config_dir = cfg.home.."/.luarocks" | |
| cfg.home_tree = (os.getenv("USER") ~= "root") and cfg.home.."/.luarocks/" | |
| end | |
| -- Create global environment for the config files; | |
| local env_for_config_file = function() | |
| local e | |
| e = { | |
| home = cfg.home, | |
| lua_version = cfg.lua_version, | |
| platforms = util.make_shallow_copy(cfg.platforms), | |
| processor = cfg.target_cpu, -- remains for compat reasons | |
| target_cpu = cfg.target_cpu, -- replaces `processor` | |
| os_getenv = os.getenv, | |
| dump_env = function() | |
| -- debug function, calling it from a config file will show all | |
| -- available globals to that config file | |
| print(util.show_table(e, "global environment")) | |
| end, | |
| } | |
| return e | |
| end | |
| -- Merge values from config files read into the `cfg` table | |
| local merge_overrides = function(overrides) | |
| -- remove some stuff we do not want to integrate | |
| overrides.os_getenv = nil | |
| overrides.dump_env = nil | |
| -- remove tables to be copied verbatim instead of deeply merged | |
| if overrides.rocks_trees then cfg.rocks_trees = nil end | |
| if overrides.rocks_servers then cfg.rocks_servers = nil end | |
| -- perform actual merge | |
| util.deep_merge(cfg, overrides) | |
| end | |
| -- load config file from a list until first succesful one. Info is | |
| -- added to `cfg` module table, returns filepath of succesfully loaded | |
| -- file or nil if it failed | |
| local load_config_file = function(list) | |
| for _, filepath in ipairs(list) do | |
| local result, err, errcode = persist.load_into_table(filepath, env_for_config_file()) | |
| if (not result) and errcode ~= "open" then | |
| -- errcode is either "load" or "run"; bad config file, so error out | |
| io.stderr:write(err.."\n") | |
| os.exit(cfg.errorcodes.CONFIGFILE) | |
| end | |
| if result then | |
| -- succes in loading and running, merge contents and exit | |
| merge_overrides(result) | |
| return filepath | |
| end | |
| end | |
| return nil -- nothing was loaded | |
| end | |
| -- Load system configuration file | |
| do | |
| sys_config_file_default = sys_config_dir.."/config-"..cfg.lua_version..".lua" | |
| sys_config_file = load_config_file({ | |
| site_config.LUAROCKS_SYSCONFIG or sys_config_file_default, | |
| sys_config_dir.."/config.lua", | |
| }) | |
| sys_config_ok = (sys_config_file ~= nil) | |
| end | |
| -- Load user configuration file (if allowed) | |
| if not site_config.LUAROCKS_FORCE_CONFIG then | |
| home_config_file_default = home_config_dir.."/config-"..cfg.lua_version..".lua" | |
| local list = { | |
| os.getenv("LUAROCKS_CONFIG_" .. version_suffix) or os.getenv("LUAROCKS_CONFIG"), | |
| home_config_file_default, | |
| home_config_dir.."/config.lua", | |
| } | |
| -- first entry might be a silent nil, check and remove if so | |
| if not list[1] then table.remove(list, 1) end | |
| home_config_file = load_config_file(list) | |
| home_config_ok = (home_config_file ~= nil) | |
| end | |
| if not next(cfg.rocks_trees) then | |
| if cfg.home_tree then | |
| table.insert(cfg.rocks_trees, { name = "user", root = cfg.home_tree } ) | |
| end | |
| if site_config.LUAROCKS_ROCKS_TREE then | |
| table.insert(cfg.rocks_trees, { name = "system", root = site_config.LUAROCKS_ROCKS_TREE } ) | |
| end | |
| end | |
| -- update platforms list; keyed -> array | |
| do | |
| local lst = {} -- use temp array to not confuse `pairs` in loop | |
| for plat in pairs(cfg.platforms) do | |
| if cfg.platforms[plat] then -- entries set to 'false' skipped | |
| if not platform_order[plat] then | |
| local pl = "" | |
| for k,_ in pairs(platform_order) do pl = pl .. ", " .. k end | |
| io.stderr:write("Bad platform given; "..tostring(plat)..". Valid entries are: "..pl:sub(3,-1) ..".\n") | |
| os.exit(cfg.errorcodes.CONFIGFILE) | |
| end | |
| table.insert(lst, plat) | |
| else | |
| cfg.platforms[plat] = nil | |
| end | |
| end | |
| -- platform overrides depent on the order, so set priorities | |
| table.sort(lst, function(key1, key2) return platform_order[key1] < platform_order[key2] end) | |
| util.deep_merge(cfg.platforms, lst) | |
| end | |
| -- Configure defaults: | |
| local defaults = { | |
| local_by_default = false, | |
| accept_unknown_fields = false, | |
| fs_use_modules = true, | |
| hooks_enabled = true, | |
| deps_mode = "one", | |
| check_certificates = false, | |
| lua_modules_path = "/share/lua/"..cfg.lua_version, | |
| lib_modules_path = "/lib/lua/"..cfg.lua_version, | |
| rocks_subdir = site_config.LUAROCKS_ROCKS_SUBDIR or "/lib/luarocks/rocks", | |
| arch = "unknown", | |
| lib_extension = "unknown", | |
| obj_extension = "unknown", | |
| rocks_servers = { | |
| { | |
| "https://luarocks.org", | |
| "https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/", | |
| "http://luafr.org/moonrocks/", | |
| "http://luarocks.logiceditor.com/rocks", | |
| } | |
| }, | |
| disabled_servers = {}, | |
| upload = { | |
| server = "https://luarocks.org", | |
| tool_version = "1.0.0", | |
| api_version = "1", | |
| }, | |
| lua_extension = "lua", | |
| lua_interpreter = site_config.LUA_INTERPRETER or "lua", | |
| downloader = site_config.LUAROCKS_DOWNLOADER or "wget", | |
| md5checker = site_config.LUAROCKS_MD5CHECKER or "md5sum", | |
| connection_timeout = 30, -- 0 = no timeout | |
| variables = { | |
| MAKE = "make", | |
| CC = "cc", | |
| LD = "ld", | |
| CVS = "cvs", | |
| GIT = "git", | |
| SSCM = "sscm", | |
| SVN = "svn", | |
| HG = "hg", | |
| RSYNC = "rsync", | |
| WGET = "wget", | |
| SCP = "scp", | |
| CURL = "curl", | |
| PWD = "pwd", | |
| MKDIR = "mkdir", | |
| RMDIR = "rmdir", | |
| CP = "cp", | |
| LS = "ls", | |
| RM = "rm", | |
| FIND = "find", | |
| TEST = "test", | |
| CHMOD = "chmod", | |
| ZIP = "zip", | |
| UNZIP = "unzip -n", | |
| GUNZIP = "gunzip", | |
| BUNZIP2 = "bunzip2", | |
| TAR = "tar", | |
| MD5SUM = "md5sum", | |
| OPENSSL = "openssl", | |
| MD5 = "md5", | |
| STAT = "stat", | |
| CMAKE = "cmake", | |
| SEVENZ = "7z", | |
| RSYNCFLAGS = "--exclude=.git -Oavz", | |
| STATFLAG = "-c '%a'", | |
| CURLNOCERTFLAG = "", | |
| WGETNOCERTFLAG = "", | |
| }, | |
| external_deps_subdirs = site_config.LUAROCKS_EXTERNAL_DEPS_SUBDIRS or { | |
| bin = "bin", | |
| lib = "lib", | |
| include = "include" | |
| }, | |
| runtime_external_deps_subdirs = site_config.LUAROCKS_RUNTIME_EXTERNAL_DEPS_SUBDIRS or { | |
| bin = "bin", | |
| lib = "lib", | |
| include = "include" | |
| }, | |
| rocks_provided = {} | |
| } | |
| if cfg.platforms.windows then | |
| local full_prefix = (site_config.LUAROCKS_PREFIX or (os.getenv("PROGRAMFILES")..[[\LuaRocks]])).."\\"..cfg.major_version | |
| extra_luarocks_module_dir = full_prefix.."\\lua\\?.lua" | |
| home_config_file = home_config_file and home_config_file:gsub("\\","/") | |
| defaults.fs_use_modules = false | |
| defaults.arch = "win32-"..cfg.target_cpu | |
| defaults.lib_extension = "dll" | |
| defaults.external_lib_extension = "dll" | |
| defaults.obj_extension = "obj" | |
| defaults.external_deps_dirs = { "c:/external/" } | |
| defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR and site_config.LUA_BINDIR:gsub("\\", "/") or "c:/lua"..cfg.lua_version.."/bin" | |
| defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR and site_config.LUA_INCDIR:gsub("\\", "/") or "c:/lua"..cfg.lua_version.."/include" | |
| defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR and site_config.LUA_LIBDIR:gsub("\\", "/") or "c:/lua"..cfg.lua_version.."/lib" | |
| defaults.makefile = "Makefile.win" | |
| defaults.variables.MAKE = "nmake" | |
| defaults.variables.CC = "cl" | |
| defaults.variables.RC = "rc" | |
| defaults.variables.WRAPPER = full_prefix.."\\rclauncher.c" | |
| defaults.variables.LD = "link" | |
| defaults.variables.MT = "mt" | |
| defaults.variables.LUALIB = "lua"..cfg.lua_version..".lib" | |
| defaults.variables.CFLAGS = "/nologo /MD /O2" | |
| defaults.variables.LIBFLAG = "/nologo /dll" | |
| local bins = { "SEVENZ", "CP", "FIND", "LS", "MD5SUM", | |
| "MKDIR", "MV", "PWD", "RMDIR", "TEST", "UNAME", "WGET" } | |
| for _, var in ipairs(bins) do | |
| if defaults.variables[var] then | |
| defaults.variables[var] = full_prefix.."\\tools\\"..defaults.variables[var] | |
| end | |
| end | |
| defaults.external_deps_patterns = { | |
| bin = { "?.exe", "?.bat" }, | |
| lib = { "?.lib", "?.dll", "lib?.dll" }, | |
| include = { "?.h" } | |
| } | |
| defaults.runtime_external_deps_patterns = { | |
| bin = { "?.exe", "?.bat" }, | |
| lib = { "?.dll", "lib?.dll" }, | |
| include = { "?.h" } | |
| } | |
| defaults.export_path = "SET PATH=%s" | |
| defaults.export_path_separator = ";" | |
| defaults.export_lua_path = "SET LUA_PATH=%s" | |
| defaults.export_lua_cpath = "SET LUA_CPATH=%s" | |
| defaults.wrapper_suffix = ".bat" | |
| local localappdata = os.getenv("LOCALAPPDATA") | |
| if not localappdata then | |
| -- for Windows versions below Vista | |
| localappdata = os.getenv("USERPROFILE").."/Local Settings/Application Data" | |
| end | |
| defaults.local_cache = localappdata.."/LuaRocks/Cache" | |
| defaults.web_browser = "start" | |
| end | |
| if cfg.platforms.mingw32 then | |
| defaults.obj_extension = "o" | |
| defaults.cmake_generator = "MinGW Makefiles" | |
| defaults.variables.MAKE = "mingw32-make" | |
| defaults.variables.CC = "mingw32-gcc" | |
| defaults.variables.RC = "windres" | |
| defaults.variables.LD = "mingw32-gcc" | |
| defaults.variables.CFLAGS = "-O2" | |
| defaults.variables.LIBFLAG = "-shared" | |
| defaults.external_deps_patterns = { | |
| bin = { "?.exe", "?.bat" }, | |
| -- mingw lookup list from http://stackoverflow.com/a/15853231/1793220 | |
| -- ...should we keep ?.lib at the end? It's not in the above list. | |
| lib = { "lib?.dll.a", "?.dll.a", "lib?.a", "cyg?.dll", "lib?.dll", "?.dll", "?.lib" }, | |
| include = { "?.h" } | |
| } | |
| defaults.runtime_external_deps_patterns = { | |
| bin = { "?.exe", "?.bat" }, | |
| lib = { "cyg?.dll", "?.dll", "lib?.dll" }, | |
| include = { "?.h" } | |
| } | |
| end | |
| if cfg.platforms.unix then | |
| defaults.lib_extension = "so" | |
| defaults.external_lib_extension = "so" | |
| defaults.obj_extension = "o" | |
| defaults.external_deps_dirs = { "/usr/local", "/usr" } | |
| defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR or "/usr/local/bin" | |
| defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR or "/usr/local/include" | |
| defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR or "/usr/local/lib" | |
| defaults.variables.CFLAGS = "-O2" | |
| defaults.cmake_generator = "Unix Makefiles" | |
| defaults.variables.CC = "gcc" | |
| defaults.variables.LD = "gcc" | |
| defaults.gcc_rpath = true | |
| defaults.variables.LIBFLAG = "-shared" | |
| defaults.external_deps_patterns = { | |
| bin = { "?" }, | |
| lib = { "lib?.a", "lib?.so", "lib?.so.*" }, | |
| include = { "?.h" } | |
| } | |
| defaults.runtime_external_deps_patterns = { | |
| bin = { "?" }, | |
| lib = { "lib?.so", "lib?.so.*" }, | |
| include = { "?.h" } | |
| } | |
| defaults.export_path = "export PATH='%s'" | |
| defaults.export_path_separator = ":" | |
| defaults.export_lua_path = "export LUA_PATH='%s'" | |
| defaults.export_lua_cpath = "export LUA_CPATH='%s'" | |
| defaults.wrapper_suffix = "" | |
| defaults.local_cache = cfg.home.."/.cache/luarocks" | |
| if not defaults.variables.CFLAGS:match("-fPIC") then | |
| defaults.variables.CFLAGS = defaults.variables.CFLAGS.." -fPIC" | |
| end | |
| defaults.web_browser = "xdg-open" | |
| end | |
| if cfg.platforms.cygwin then | |
| defaults.lib_extension = "so" -- can be overridden in the config file for mingw builds | |
| defaults.arch = "cygwin-"..cfg.target_cpu | |
| defaults.cmake_generator = "Unix Makefiles" | |
| defaults.variables.CC = "echo -llua | xargs gcc" | |
| defaults.variables.LD = "echo -llua | xargs gcc" | |
| defaults.variables.LIBFLAG = "-shared" | |
| end | |
| if cfg.platforms.bsd then | |
| defaults.variables.MAKE = "gmake" | |
| defaults.variables.STATFLAG = "-f '%OLp'" | |
| end | |
| if cfg.platforms.macosx then | |
| defaults.variables.MAKE = "make" | |
| defaults.external_lib_extension = "dylib" | |
| defaults.arch = "macosx-"..cfg.target_cpu | |
| defaults.variables.LIBFLAG = "-bundle -undefined dynamic_lookup -all_load" | |
| defaults.variables.STAT = "/usr/bin/stat" | |
| defaults.variables.STATFLAG = "-f '%A'" | |
| local version = io.popen("sw_vers -productVersion"):read("*l") | |
| version = tonumber(version and version:match("^[^.]+%.([^.]+)")) or 3 | |
| if version >= 10 then | |
| version = 8 | |
| elseif version >= 5 then | |
| version = 5 | |
| else | |
| defaults.gcc_rpath = false | |
| end | |
| defaults.variables.CC = "export MACOSX_DEPLOYMENT_TARGET=10."..version.."; gcc" | |
| defaults.variables.LD = "export MACOSX_DEPLOYMENT_TARGET=10."..version.."; gcc" | |
| defaults.web_browser = "open" | |
| end | |
| if cfg.platforms.linux then | |
| defaults.arch = "linux-"..cfg.target_cpu | |
| end | |
| if cfg.platforms.freebsd then | |
| defaults.arch = "freebsd-"..cfg.target_cpu | |
| defaults.gcc_rpath = false | |
| defaults.variables.CC = "cc" | |
| defaults.variables.LD = "cc" | |
| end | |
| if cfg.platforms.openbsd then | |
| defaults.arch = "openbsd-"..cfg.target_cpu | |
| end | |
| if cfg.platforms.netbsd then | |
| defaults.arch = "netbsd-"..cfg.target_cpu | |
| end | |
| if cfg.platforms.solaris then | |
| defaults.arch = "solaris-"..cfg.target_cpu | |
| --defaults.platforms = {"unix", "solaris"} | |
| defaults.variables.MAKE = "gmake" | |
| end | |
| -- Expose some more values detected by LuaRocks for use by rockspec authors. | |
| defaults.variables.LIB_EXTENSION = defaults.lib_extension | |
| defaults.variables.OBJ_EXTENSION = defaults.obj_extension | |
| defaults.variables.LUAROCKS_PREFIX = site_config.LUAROCKS_PREFIX | |
| defaults.variables.LUA = site_config.LUA_DIR_SET and (defaults.variables.LUA_BINDIR.."/"..defaults.lua_interpreter) or defaults.lua_interpreter | |
| -- Add built-in modules to rocks_provided | |
| defaults.rocks_provided["lua"] = cfg.lua_version.."-1" | |
| if cfg.lua_version >= "5.2" then | |
| -- Lua 5.2+ | |
| defaults.rocks_provided["bit32"] = cfg.lua_version.."-1" | |
| end | |
| if cfg.lua_version >= "5.3" then | |
| -- Lua 5.3+ | |
| defaults.rocks_provided["utf8"] = cfg.lua_version.."-1" | |
| end | |
| if package.loaded.jit then | |
| -- LuaJIT | |
| local lj_version = package.loaded.jit.version:match("LuaJIT (.*)"):gsub("%-","") | |
| --defaults.rocks_provided["luajit"] = lj_version.."-1" | |
| defaults.rocks_provided["luabitop"] = lj_version.."-1" | |
| end | |
| -- Use defaults: | |
| -- Populate some arrays with values from their 'defaults' counterparts | |
| -- if they were not already set by user. | |
| for _, entry in ipairs({"variables", "rocks_provided"}) do | |
| if not cfg[entry] then | |
| cfg[entry] = {} | |
| end | |
| for k,v in pairs(defaults[entry]) do | |
| if not cfg[entry][k] then | |
| cfg[entry][k] = v | |
| end | |
| end | |
| end | |
| -- For values not set in the config file, use values from the 'defaults' table. | |
| local cfg_mt = { | |
| __index = function(t, k) | |
| local default = defaults[k] | |
| if default then | |
| rawset(t, k, default) | |
| end | |
| return default | |
| end | |
| } | |
| setmetatable(cfg, cfg_mt) | |
| if not cfg.check_certificates then | |
| cfg.variables.CURLNOCERTFLAG = "-k" | |
| cfg.variables.WGETNOCERTFLAG = "--no-check-certificate" | |
| end | |
| function cfg.make_paths_from_tree(tree) | |
| local lua_path, lib_path, bin_path | |
| if type(tree) == "string" then | |
| lua_path = tree..cfg.lua_modules_path | |
| lib_path = tree..cfg.lib_modules_path | |
| bin_path = tree.."/bin" | |
| else | |
| lua_path = tree.lua_dir or tree.root..cfg.lua_modules_path | |
| lib_path = tree.lib_dir or tree.root..cfg.lib_modules_path | |
| bin_path = tree.bin_dir or tree.root.."/bin" | |
| end | |
| return lua_path, lib_path, bin_path | |
| end | |
| function cfg.package_paths() | |
| local new_path, new_cpath, new_bin = {}, {}, {} | |
| for _,tree in ipairs(cfg.rocks_trees) do | |
| local lua_path, lib_path, bin_path = cfg.make_paths_from_tree(tree) | |
| table.insert(new_path, lua_path.."/?.lua") | |
| table.insert(new_path, lua_path.."/?/init.lua") | |
| table.insert(new_cpath, lib_path.."/?."..cfg.lib_extension) | |
| table.insert(new_bin, bin_path) | |
| end | |
| if extra_luarocks_module_dir then | |
| table.insert(new_path, extra_luarocks_module_dir) | |
| end | |
| return table.concat(new_path, ";"), table.concat(new_cpath, ";"), table.concat(new_bin, cfg.export_path_separator) | |
| end | |
| function cfg.init_package_paths() | |
| local lr_path, lr_cpath, lr_bin = cfg.package_paths() | |
| package.path = util.remove_path_dupes(package.path .. ";" .. lr_path, ";") | |
| package.cpath = util.remove_path_dupes(package.cpath .. ";" .. lr_cpath, ";") | |
| end | |
| function cfg.which_config() | |
| return { | |
| system = { | |
| file = sys_config_file or sys_config_file_default, | |
| ok = sys_config_ok, | |
| }, | |
| user = { | |
| file = home_config_file or home_config_file_default, | |
| ok = home_config_ok, | |
| } | |
| } | |
| end | |
| cfg.user_agent = "LuaRocks/"..cfg.program_version.." "..cfg.arch | |
| cfg.http_proxy = os.getenv("http_proxy") | |
| cfg.https_proxy = os.getenv("https_proxy") | |
| cfg.no_proxy = os.getenv("no_proxy") | |
| --- Check if platform was detected | |
| -- @param query string: The platform name to check. | |
| -- @return boolean: true if LuaRocks is currently running on queried platform. | |
| function cfg.is_platform(query) | |
| assert(type(query) == "string") | |
| for _, platform in ipairs(cfg.platforms) do | |
| if platform == query then | |
| return true | |
| end | |
| end | |
| end | |
| return cfg |