aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/luarocks/cfg.lua87
1 files changed, 57 insertions, 30 deletions
diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua
index 9200dd26..1141acf6 100644
--- a/src/luarocks/cfg.lua
+++ b/src/luarocks/cfg.lua
@@ -131,24 +131,27 @@ else
131 -- Fall back to Unix in unknown systems. 131 -- Fall back to Unix in unknown systems.
132end 132end
133 133
134-- Set order for platform overrides 134-- Set order for platform overrides.
135-- More general platform identifiers should be listed first,
136-- more specific ones later.
135local platform_order = { 137local platform_order = {
136 -- Unixes 138 -- Unixes
137 unix = 1, 139 "unix",
138 bsd = 2, 140 "bsd",
139 solaris = 3, 141 "solaris",
140 netbsd = 4, 142 "netbsd",
141 openbsd = 5, 143 "openbsd",
142 freebsd = 6, 144 "freebsd",
143 linux = 7, 145 "linux",
144 macosx = 8, 146 "macosx",
145 cygwin = 9, 147 "cygwin",
146 msys = 10, 148 "msys",
147 haiku = 11, 149 "haiku",
148 -- Windows 150 -- Windows
149 win32 = 12, 151 "win32",
150 mingw32 = 13, 152 "mingw32",
151 windows = 14 } 153 "windows",
154}
152 155
153-- Path configuration: 156-- Path configuration:
154local sys_config_file, home_config_file 157local sys_config_file, home_config_file
@@ -274,26 +277,50 @@ if not next(cfg.rocks_trees) then
274 end 277 end
275end 278end
276 279
277
278-- update platforms list; keyed -> array 280-- update platforms list; keyed -> array
279do 281do
280 local lst = {} -- use temp array to not confuse `pairs` in loop 282 -- if explicitly given by user,
281 for plat in pairs(cfg.platforms) do 283 if cfg.platforms[1] then
282 if cfg.platforms[plat] then -- entries set to 'false' skipped 284 local is_windows = cfg.platforms.windows
283 if not platform_order[plat] then 285 -- Clear auto-detected values
284 local pl = "" 286 for k, _ in pairs(cfg.platforms) do
285 for k,_ in pairs(platform_order) do pl = pl .. ", " .. k end 287 if type(k) == "string" then
286 io.stderr:write("Bad platform given; "..tostring(plat)..". Valid entries are: "..pl:sub(3,-1) ..".\n") 288 cfg.platforms[k] = nil
287 os.exit(cfg.errorcodes.CONFIGFILE) 289 end
290 end
291 -- and set the ones given by the user.
292 for _, plat in ipairs(cfg.platforms) do
293 cfg.platforms[plat] = true
294 end
295 -- If no major platform family was set by the user,
296 if not (cfg.platforms.unix or cfg.platforms.windows) then
297 -- set some fallback defaults in case the user provides an incomplete configuration.
298 -- LuaRocks expects a set of defaults to be available.
299 -- This is used for setting defaults here only; the platform overrides
300 -- will use only the user's list.
301 if is_windows then
302 cfg.platforms.windows = true
303 table.insert(cfg.platforms, "windows")
304 else
305 cfg.platforms.unix = true
306 table.insert(cfg.platforms, "unix")
307 end
308 end
309 else
310 -- Sort detected platform defaults
311 local order = {}
312 for i, v in ipairs(platform_order) do
313 order[v] = i
314 end
315 local entries = {}
316 for k, v in pairs(cfg.platforms) do
317 if type(k) == "string" and v == true then
318 table.insert(entries, k)
288 end 319 end
289 table.insert(lst, plat)
290 else
291 cfg.platforms[plat] = nil
292 end 320 end
321 table.sort(entries, function(a, b) return order[a] < order[b] end)
322 util.deep_merge(cfg.platforms, entries)
293 end 323 end
294 -- platform overrides depent on the order, so set priorities
295 table.sort(lst, function(key1, key2) return platform_order[key1] < platform_order[key2] end)
296 util.deep_merge(cfg.platforms, lst)
297end 324end
298 325
299-- Configure defaults: 326-- Configure defaults: