aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-06-20 14:20:54 -0300
committerHisham Muhammad <hisham@gobolinux.org>2018-07-01 15:51:13 -0300
commitb51e98582dd8b59a15bd0dcbf469c05d01c3e045 (patch)
tree6734a1361a9729428b4fc7a8694abfd5a92ad058
parent744df0e5bf1ed712478c3df6aa28901f38d7189f (diff)
downloadluarocks-b51e98582dd8b59a15bd0dcbf469c05d01c3e045.tar.gz
luarocks-b51e98582dd8b59a15bd0dcbf469c05d01c3e045.tar.bz2
luarocks-b51e98582dd8b59a15bd0dcbf469c05d01c3e045.zip
cmd: ensure that found Lua matches version requested with --lua-version
-rw-r--r--src/luarocks/cmd.lua50
1 files changed, 26 insertions, 24 deletions
diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua
index 6ce9a8b5..da78c224 100644
--- a/src/luarocks/cmd.lua
+++ b/src/luarocks/cmd.lua
@@ -35,20 +35,6 @@ local function is_ownership_ok(directory)
35end 35end
36 36
37do 37do
38 local function check_lua_version(lua_exe, luaver)
39 local luajitver
40 if not (luaver and luaver:match("^[0-9]")) then
41 luaver = util.popen_read(lua_exe .. ' -e "io.write(_VERSION:sub(5))"')
42 end
43 if luaver == "5.1" then
44 luajitver = util.popen_read(lua_exe .. ' -e "io.write(tostring(jit and jit.version:sub(8)))"')
45 if luajitver == "nil" then
46 luajitver = nil
47 end
48 end
49 return luaver, luajitver
50 end
51
52 local function exists(file) 38 local function exists(file)
53 local fd = io.open(file, "r") 39 local fd = io.open(file, "r")
54 if fd then 40 if fd then
@@ -58,6 +44,24 @@ do
58 return false 44 return false
59 end 45 end
60 46
47 local function check_lua_version(lua_exe, luaver)
48 if not exists(lua_exe) then
49 return nil
50 end
51 local lv = util.popen_read(lua_exe .. ' -e "io.write(_VERSION:sub(5))"')
52 if luaver and luaver ~= lv then
53 return nil
54 end
55 local ljv
56 if lv == "5.1" then
57 ljv = util.popen_read(lua_exe .. ' -e "io.write(tostring(jit and jit.version:sub(8)))"')
58 if ljv == "nil" then
59 ljv = nil
60 end
61 end
62 return lv, ljv
63 end
64
61 local find_lua_bindir 65 local find_lua_bindir
62 do 66 do
63 local exe_suffix = (package.config:sub(1, 1) == "\\" and ".exe" or "") 67 local exe_suffix = (package.config:sub(1, 1) == "\\" and ".exe" or "")
@@ -93,8 +97,9 @@ do
93 for _, name in ipairs(names) do 97 for _, name in ipairs(names) do
94 local lua_exe = dir.path(d, name) 98 local lua_exe = dir.path(d, name)
95 table.insert(tried, lua_exe) 99 table.insert(tried, lua_exe)
96 if exists(lua_exe) then 100 local lv, ljv = check_lua_version(lua_exe, luaver)
97 return name, d, luaver 101 if lv then
102 return name, d, lv, ljv
98 end 103 end
99 end 104 end
100 end 105 end
@@ -115,6 +120,7 @@ do
115 120
116 for _, d in ipairs(incdirs) do 121 for _, d in ipairs(incdirs) do
117 local lua_h = dir.path(d, "lua.h") 122 local lua_h = dir.path(d, "lua.h")
123 -- TODO check that LUA_VERSION_MAJOR and LUA_VERSION_MINOR match luaver
118 if exists(lua_h) then 124 if exists(lua_h) then
119 return d 125 return d
120 end 126 end
@@ -124,17 +130,13 @@ do
124 return incdirs[1] 130 return incdirs[1]
125 end 131 end
126 132
127 find_lua = function(prefix, luaver) 133 function cmd.find_lua(prefix, luaver)
128 local lua_interpreter, bindir 134 local lua_interpreter, bindir, luajitver
129 lua_interpreter, bindir, luaver = find_lua_bindir(prefix, luaver) 135 lua_interpreter, bindir, luaver, luajitver = find_lua_bindir(prefix, luaver)
130 if not lua_interpreter then 136 if not lua_interpreter then
131 return nil, bindir 137 return nil, bindir
132 end 138 end
133 139
134 local luajitver
135 local lua_exe = dir.path(bindir, lua_interpreter)
136 luaver, luajitver = check_lua_version(lua_exe, luaver)
137
138 return { 140 return {
139 lua_version = luaver, 141 lua_version = luaver,
140 luajit_version = luajitver, 142 luajit_version = luajitver,
@@ -367,7 +369,7 @@ function cmd.run_command(description, commands, ...)
367 369
368 local lua_data 370 local lua_data
369 if flags["lua-dir"] then 371 if flags["lua-dir"] then
370 lua_data = find_lua(flags["lua-dir"], flags["lua-version"]) 372 lua_data = cmd.find_lua(flags["lua-dir"], flags["lua-version"])
371 end 373 end
372 374
373 ----------------------------------------------------------------------------- 375 -----------------------------------------------------------------------------