aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2020-01-14 18:05:46 -0300
committerHisham Muhammad <hisham@gobolinux.org>2020-01-14 22:48:08 -0300
commit74960d73342da4408aa59373cc3dcd898c7d1eb1 (patch)
tree44dd6f93213e7626f2af88e5a7f71ff310f41bea
parent6f5306ddaae3a14be5f385fa6f97546d6df9de4e (diff)
downloadluarocks-74960d73342da4408aa59373cc3dcd898c7d1eb1.tar.gz
luarocks-74960d73342da4408aa59373cc3dcd898c7d1eb1.tar.bz2
luarocks-74960d73342da4408aa59373cc3dcd898c7d1eb1.zip
cmd: fallback to actual PATH search
-rw-r--r--spec/cmd_spec.lua2
-rw-r--r--src/luarocks/cmd.lua49
-rw-r--r--src/luarocks/util.lua8
3 files changed, 39 insertions, 20 deletions
diff --git a/spec/cmd_spec.lua b/spec/cmd_spec.lua
index 21b25fe5..705b8845 100644
--- a/spec/cmd_spec.lua
+++ b/spec/cmd_spec.lua
@@ -51,7 +51,7 @@ describe("LuaRocks command line #integration", function()
51 describe("--lua-version", function() 51 describe("--lua-version", function()
52 it("warns but continues if given an invalid version", function() 52 it("warns but continues if given an invalid version", function()
53 local output = run.luarocks("--lua-version=1.0") 53 local output = run.luarocks("--lua-version=1.0")
54 assert.match("Warning: Could not find a Lua 1.0 interpreter", output, 1, true) 54 assert.match("Warning: Lua 1.0 interpreter not found", output, 1, true)
55 assert.match("Lua version: 1.0", output, 1, true) 55 assert.match("Lua version: 1.0", output, 1, true)
56 end) 56 end)
57 57
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua
index b43faaba..7866cd3c 100644
--- a/src/luarocks/cmd.lua
+++ b/src/luarocks/cmd.lua
@@ -172,6 +172,30 @@ local function die(message, exitcode)
172 os.exit(exitcode or cmd.errorcodes.UNSPECIFIED) 172 os.exit(exitcode or cmd.errorcodes.UNSPECIFIED)
173end 173end
174 174
175local function search_lua_in_path(lua_version, verbose)
176 local path_sep = (package.config:sub(1, 1) == "\\" and ";" or ":")
177 local all_tried = {}
178 for bindir in os.getenv("PATH"):gmatch("[^"..path_sep.."]+") do
179 local parentdir = bindir:gsub("[\\/][^\\/]+[\\/]?$", "")
180 local detected, tried = util.find_lua(dir.path(parentdir), lua_version)
181 if detected then
182 return detected
183 else
184 table.insert(all_tried, tried)
185 end
186 detected = util.find_lua(bindir, lua_version)
187 if detected then
188 return detected
189 else
190 table.insert(all_tried, tried)
191 end
192 end
193 return nil, "Could not find " ..
194 (lua_version and "Lua " .. lua_version or "Lua") ..
195 " in PATH." ..
196 (verbose and " Tried:\n" .. table.concat(all_tried, "\n") or "")
197end
198
175local init_config 199local init_config
176do 200do
177 local detect_config_via_args 201 local detect_config_via_args
@@ -244,17 +268,9 @@ do
244 end 268 end
245 269
246 if lua_version then 270 if lua_version then
247 local path_sep = (package.config:sub(1, 1) == "\\" and ";" or ":") 271 local detected = search_lua_in_path(lua_version)
248 for bindir in os.getenv("PATH"):gmatch("[^"..path_sep.."]+") do 272 if detected then
249 local parentdir = bindir:gsub("[\\/][^\\/]+[\\/]?$", "") 273 return detected
250 local detected = util.find_lua(dir.path(parentdir), lua_version)
251 if detected then
252 return detected
253 end
254 detected = util.find_lua(bindir, lua_version)
255 if detected then
256 return detected
257 end
258 end 274 end
259 return { 275 return {
260 lua_version = lua_version, 276 lua_version = lua_version,
@@ -535,15 +551,18 @@ function cmd.run_command(description, commands, external_namespace, ...)
535 551
536 -- if the Lua interpreter wasn't explicitly found before cfg.init, 552 -- if the Lua interpreter wasn't explicitly found before cfg.init,
537 -- try again now. 553 -- try again now.
554 local tried
538 if not lua_found then 555 if not lua_found then
539 if cfg.variables.LUA_DIR then 556 if cfg.variables.LUA_DIR then
540 lua_found = util.find_lua(cfg.variables.LUA_DIR, cfg.lua_version) 557 lua_found, tried = util.find_lua(cfg.variables.LUA_DIR, cfg.lua_version, args.verbose)
558 else
559 lua_found, tried = search_lua_in_path(cfg.lua_version, args.verbose)
541 end 560 end
542 end 561 end
543 562
544 if not lua_found then 563 if not lua_found and args.command ~= "config" and args.command ~= "help" then
545 util.warning("Could not find a Lua " .. cfg.lua_version .. " interpreter in your PATH. " .. 564 util.warning(tried ..
546 "Modules may not install with the correct configurations. " .. 565 "\nModules may not install with the correct configurations. " ..
547 "You may want to specify the path prefix to your build " .. 566 "You may want to specify the path prefix to your build " ..
548 "of Lua " .. cfg.lua_version .. " using --lua-dir") 567 "of Lua " .. cfg.lua_version .. " using --lua-dir")
549 end 568 end
diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua
index ae198daf..8eccace9 100644
--- a/src/luarocks/util.lua
+++ b/src/luarocks/util.lua
@@ -481,7 +481,7 @@ do
481 end 481 end
482 end 482 end
483 483
484 find_lua_bindir = function(prefix, luaver) 484 find_lua_bindir = function(prefix, luaver, verbose)
485 local names = {} 485 local names = {}
486 if luaver then 486 if luaver then
487 insert_lua_variants(names, luaver) 487 insert_lua_variants(names, luaver)
@@ -517,13 +517,13 @@ do
517 and ("Lua " .. luaver .. " interpreter") 517 and ("Lua " .. luaver .. " interpreter")
518 or "Lua interpreter" 518 or "Lua interpreter"
519 return nil, interp .. " not found at " .. prefix .. "\n" .. 519 return nil, interp .. " not found at " .. prefix .. "\n" ..
520 "Tried:\t" .. table.concat(tried, "\n\t") 520 (verbose and "Tried:\t" .. table.concat(tried, "\n\t") or "")
521 end 521 end
522 end 522 end
523 523
524 function util.find_lua(prefix, luaver) 524 function util.find_lua(prefix, luaver, verbose)
525 local lua_interpreter, bindir 525 local lua_interpreter, bindir
526 lua_interpreter, bindir, luaver = find_lua_bindir(prefix, luaver) 526 lua_interpreter, bindir, luaver = find_lua_bindir(prefix, luaver, verbose)
527 if not lua_interpreter then 527 if not lua_interpreter then
528 return nil, bindir 528 return nil, bindir
529 end 529 end