aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-09-07 01:06:53 +0300
committerHisham Muhammad <hisham@gobolinux.org>2018-09-07 02:42:15 +0300
commitea49b058fb0a2f48ab8b3e3aa2879bbd01a412c9 (patch)
tree84de07f880d83b3468b8b94b5f7780922d1dc8b4
parent5b0d8ff87f53c368861a8913df1861c3940df1ea (diff)
downloadluarocks-ea49b058fb0a2f48ab8b3e3aa2879bbd01a412c9.tar.gz
luarocks-ea49b058fb0a2f48ab8b3e3aa2879bbd01a412c9.tar.bz2
luarocks-ea49b058fb0a2f48ab8b3e3aa2879bbd01a412c9.zip
cmd: look for proper Lua version in $PATH when --lua-version is given
-rw-r--r--src/luarocks/cmd.lua53
1 files changed, 38 insertions, 15 deletions
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua
index f85821a5..fc98e45f 100644
--- a/src/luarocks/cmd.lua
+++ b/src/luarocks/cmd.lua
@@ -35,16 +35,16 @@ local function is_ownership_ok(directory)
35 return false 35 return false
36end 36end
37 37
38do 38local function exists(file)
39 local function exists(file) 39 local fd = io.open(file, "r")
40 local fd = io.open(file, "r") 40 if fd then
41 if fd then 41 fd:close()
42 fd:close() 42 return true
43 return true
44 end
45 return false
46 end 43 end
47 44 return false
45end
46
47do
48 local function Q(pathname) 48 local function Q(pathname)
49 if pathname:match("^.:") then 49 if pathname:match("^.:") then
50 return pathname:sub(1, 2) .. '"' .. pathname:sub(3) .. '"' 50 return pathname:sub(1, 2) .. '"' .. pathname:sub(3) .. '"'
@@ -363,6 +363,11 @@ function cmd.run_command(description, commands, external_namespace, ...)
363 die("Invalid entry for --deps-mode.") 363 die("Invalid entry for --deps-mode.")
364 end 364 end
365 365
366 local project_dir
367 if flags["project-tree"] then
368 project_dir = flags["project-tree"]:gsub("[/\\][^/\\]+$", "")
369 end
370
366 local lua_data 371 local lua_data
367 if flags["lua-dir"] then 372 if flags["lua-dir"] then
368 local err 373 local err
@@ -371,16 +376,34 @@ function cmd.run_command(description, commands, external_namespace, ...)
371 die(err) 376 die(err)
372 end 377 end
373 elseif flags["lua-version"] then 378 elseif flags["lua-version"] then
379 local path_sep = (package.config:sub(1, 1) == "\\" and ";" or ":")
380 for bindir in os.getenv("PATH"):gmatch("[^"..path_sep.."]+") do
381 local parentdir = bindir:gsub("[\\/][^\\/]+[\\/]?$", "")
382 lua_data = cmd.find_lua(dir.path(parentdir), flags["lua-version"])
383 if lua_data then
384 break
385 end
386 lua_data = cmd.find_lua(bindir, flags["lua-version"])
387 if lua_data then
388 break
389 end
390 end
391 if not lua_data then
392 die("Could not find a Lua interpreter for version " .. flags["lua-version"] .. " in your PATH")
393 end
394 elseif project_dir then
395 local lua_version
396 for v in util.lua_versions("descending") do
397 if exists(dir.path(project_dir, ".luarocks", "config-"..v..".lua")) then
398 lua_version = v
399 break
400 end
401 end
374 lua_data = { 402 lua_data = {
375 lua_version = flags["lua-version"] 403 lua_version = lua_version
376 } 404 }
377 end 405 end
378 406
379 local project_dir
380 if flags["project-tree"] then
381 project_dir = flags["project-tree"]:gsub("[/\\][^/\\]+$", "")
382 end
383
384 -- FIXME A quick hack for the experimental Windows build 407 -- FIXME A quick hack for the experimental Windows build
385 if os.getenv("LUAROCKS_CROSS_COMPILING") then 408 if os.getenv("LUAROCKS_CROSS_COMPILING") then
386 cfg.each_platform = function() 409 cfg.each_platform = function()