From 37aded056fae788088855b36281b1d23b0131fdb Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Fri, 9 Mar 2012 21:36:20 -0300 Subject: Further steps for Lua 5.2 support --- src/luarocks/cfg.lua | 25 +++++++++++++------------ src/luarocks/deps.lua | 4 ++-- src/luarocks/fs/lua.lua | 5 +++-- src/luarocks/fs/unix/tools.lua | 3 ++- src/luarocks/fs/win32/tools.lua | 3 ++- src/luarocks/persist.lua | 21 ++++++++++++++++----- 6 files changed, 38 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index 9628a291..8527ba52 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -11,8 +11,8 @@ -- (~/.luarocks/config.lua on Unix or %APPDATA%/luarocks/config.lua on -- Windows). -local rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert = - rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert +local rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert, _VERSION = + rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert, _VERSION module("luarocks.cfg") @@ -25,6 +25,7 @@ end _M.site_config = site_config +lua_version = _VERSION:sub(5) program_version = "2.0.8" user_agent = "LuaRocks/"..program_version @@ -150,8 +151,8 @@ local defaults = { use_extensions = false, accept_unknown_fields = false, - lua_modules_path = "/share/lua/5.1/", - lib_modules_path = "/lib/lua/5.1/", + lua_modules_path = "/share/lua/"..lua_version, + lib_modules_path = "/lib/lua/"..lua_version, arch = "unknown", lib_extension = "unknown", @@ -230,9 +231,9 @@ if detected.windows then 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:/lua5.1/bin" - defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR and site_config.LUA_INCDIR:gsub("\\", "/") or "c:/lua5.1/include" - defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR and site_config.LUA_LIBDIR:gsub("\\", "/") or "c:/lua5.1/lib" + defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR and site_config.LUA_BINDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/bin" + defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR and site_config.LUA_INCDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/include" + defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR and site_config.LUA_LIBDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/lib" defaults.cmake_generator = "MinGW Makefiles" defaults.makefile = "Makefile.win" defaults.variables.MAKE = "nmake" -- TODO: Split Windows flavors between mingw and msvc @@ -241,10 +242,10 @@ if detected.windows then defaults.variables.WRAPPER = site_config.LUAROCKS_PREFIX .. "\\2.0\\rclauncher.obj" defaults.variables.LD = "link" defaults.variables.MT = "mt" - defaults.variables.LUALIB = "lua5.1.lib" + defaults.variables.LUALIB = "lua"..lua_version..".lib" defaults.variables.CFLAGS = "/MD /O2" defaults.variables.LIBFLAG = "/dll" - defaults.variables.LUALIB = "lua5.1.lib" + defaults.variables.LUALIB = "lua"..lua_version..".lib" defaults.external_deps_patterns = { bin = { "?.exe", "?.bat" }, lib = { "?.lib", "?.dll", "lib?.dll" }, @@ -268,9 +269,9 @@ if detected.mingw32 then defaults.external_lib_extension = "dll" defaults.obj_extension = "o" defaults.external_deps_dirs = { "c:/external/" } - defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR and site_config.LUA_BINDIR:gsub("\\", "/") or "c:/lua5.1/bin" - defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR and site_config.LUA_INCDIR:gsub("\\", "/") or "c:/lua5.1/include" - defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR and site_config.LUA_LIBDIR:gsub("\\", "/") or "c:/lua5.1/lib" + defaults.variables.LUA_BINDIR = site_config.LUA_BINDIR and site_config.LUA_BINDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/bin" + defaults.variables.LUA_INCDIR = site_config.LUA_INCDIR and site_config.LUA_INCDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/include" + defaults.variables.LUA_LIBDIR = site_config.LUA_LIBDIR and site_config.LUA_LIBDIR:gsub("\\", "/") or "c:/lua"..lua_version.."/lib" defaults.cmake_generator = "MinGW Makefiles" defaults.make = "mingw32-make" -- TODO: Split Windows flavors between mingw and msvc defaults.makefile = "Makefile.win" diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index 9cc9f2c4..194e0e7e 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua @@ -317,7 +317,7 @@ local function match_dep(dep, blacklist) local versions if dep.name == "lua" then - versions = { (_VERSION:gsub("Lua ", "")) } + versions = { cfg.lua_version } else versions = manif_core.get_versions(dep.name) end @@ -470,7 +470,7 @@ function fulfill_dependencies(rockspec) if not match_dep(dep) then local rock = search.find_suitable_rock(dep) if not rock then - return nil, "Could not find a rock to satisfy dependency: "..show_dep(dep) + return nil, "Could not satisfy dependency: "..show_dep(dep) end local ok, err, errcode = install.run(rock) if not ok then diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 1cae25f4..191ef35c 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -59,7 +59,7 @@ function is_writable(file) if fh then fh:close() end os.remove(file2) else - local fh = io.open(file, 'rb+') + local fh = io.open(file, 'r+b') result = fh ~= nil if fh then fh:close() end end @@ -129,7 +129,8 @@ if lfs_ok then -- @return boolean: true if command succeeds (status code 0), false -- otherwise. function execute_string(cmd) - if os.execute(cmd) == 0 then + local code = os.execute(cmd) + if code == 0 or code == true then return true else return false diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index d6d60adc..37efcf66 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua @@ -17,7 +17,8 @@ local vars = cfg.variables -- otherwise. function execute_string(cmd) local actual_cmd = "cd " .. fs.Q(fs.current_dir()) .. " && " .. cmd - if os.execute(actual_cmd) == 0 then + local code = os.execute(actual_cmd) + if code == 0 or code == true then return true else return false diff --git a/src/luarocks/fs/win32/tools.lua b/src/luarocks/fs/win32/tools.lua index 2ad84371..6115f382 100644 --- a/src/luarocks/fs/win32/tools.lua +++ b/src/luarocks/fs/win32/tools.lua @@ -110,7 +110,8 @@ end -- @return boolean: true if command succeeds (status code 0), false -- otherwise. function execute_string(cmd) - if os.execute(command_at(fs.current_dir(), cmd)) == 0 then + local code = os.execute(command_at(fs.current_dir(), cmd)) + if code == 0 or code == true then return true else return false diff --git a/src/luarocks/persist.lua b/src/luarocks/persist.lua index 6d411e0f..182b3da6 100644 --- a/src/luarocks/persist.lua +++ b/src/luarocks/persist.lua @@ -18,17 +18,28 @@ function load_into_table(filename, tbl) assert(type(filename) == "string") assert(type(tbl) == "table" or not tbl) - local chunk, err = loadfile(filename) + local result, chunk, ran, err + local result = tbl or {} + if setfenv then -- Lua 5.1 + chunk, err = loadfile(filename) + if chunk then + setfenv(chunk, result) + ran, err = pcall(chunk) + end + else -- Lua 5.2 + chunk, err = loadfile(filename, "t", result) + if chunk then + ran, err = pcall(chunk) + end + end + if not chunk then if err:sub(1,5) ~= filename:sub(1,5) then return false, err end return nil, "Error loading file: "..err end - local result = tbl or {} - setfenv(chunk, result) - local ok, err = pcall(chunk) - if not ok then + if not ran then return nil, "Error running file: "..err end return result -- cgit v1.2.3-55-g6feb