From ab3f1a0a82d564b4ac8b5bfb97cfcdf6fb18ee41 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Mon, 3 Mar 2014 09:55:00 +0100 Subject: remove exe wrappers, just batch files on windows --- src/luarocks/build/builtin.lua | 25 ++++++++++++------------- src/luarocks/fs/lua.lua | 17 +++++++++++++++++ src/luarocks/repos.lua | 10 ++-------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/luarocks/build/builtin.lua b/src/luarocks/build/builtin.lua index 5c58265a..5120c85c 100644 --- a/src/luarocks/build/builtin.lua +++ b/src/luarocks/build/builtin.lua @@ -19,6 +19,7 @@ end --- Makes an RC file with an embedded Lua script, for building .exes on Windows -- @return nil if could open files, error otherwise local function make_rc(luafilename, rcfilename) + --TODO EXEWRAPPER local rcfile = io.open(rcfilename, "w") if not rcfile then error("Could not open "..rcfilename.." for writing.") @@ -46,7 +47,7 @@ end -- nil and an error message otherwise. function run(rockspec) assert(type(rockspec) == "table") - local compile_object, compile_library, compile_wrapper_binary + local compile_object, compile_library, compile_wrapper_binary --TODO EXEWRAPPER local build = rockspec.build local variables = rockspec.variables @@ -80,6 +81,7 @@ function run(rockspec) return ok end compile_wrapper_binary = function(fullname, name) + --TODO EXEWRAPPER local fullbasename = fullname:gsub("%.lua$", ""):gsub("/", "\\") local basename = name:gsub("%.lua$", ""):gsub("/", "\\") local rcname = basename..".rc" @@ -125,6 +127,7 @@ function run(rockspec) return ok end compile_wrapper_binary = function(fullname, name) + --TODO EXEWRAPPER local fullbasename = fullname:gsub("%.lua$", ""):gsub("/", "\\") local basename = name:gsub("%.lua$", ""):gsub("/", "\\") local object = basename..".obj" @@ -165,6 +168,7 @@ function run(rockspec) return execute(variables.LD.." "..variables.LIBFLAG, "-o", library, "-L"..variables.LUA_LIBDIR, unpack(extras)) end compile_wrapper_binary = function(fullname, name) return true, name end + --TODO EXEWRAPPER end local ok = true @@ -173,30 +177,25 @@ function run(rockspec) local luadir = path.lua_dir(rockspec.name, rockspec.version) local libdir = path.lib_dir(rockspec.name, rockspec.version) local docdir = path.doc_dir(rockspec.name, rockspec.version) + --TODO EXEWRAPPER -- On Windows, compiles an .exe for each Lua file in build.install.bin, and -- replaces the filename with the .exe name. Strips the .lua extension if it exists, - -- otherwise just appends .exe to the name + -- otherwise just appends .exe to the name. Only if `cfg.exewrapper = true` if build.install and build.install.bin then - for i, name in ipairs(build.install.bin) do + for key, name in pairs(build.install.bin) do local fullname = dir.path(fs.current_dir(), name) - local match = name:match("%.lua$") - local basename = name:gsub("%.lua$", "") - local file - if not match then - file = io.open(fullname) - end - if match or (file and file:read():match("#!.*lua.*")) then + if cfg.exewrapper and fs.is_lua(fullname) then ok, name = compile_wrapper_binary(fullname, name) if ok then - build.install.bin[i] = name + build.install.bin[key] = name else - if file then file:close() end return nil, "Build error in wrapper binaries" end end - if file then file:close() end end end + + for name, info in pairs(build.modules) do local moddir = path.module_to_path(name) if type(info) == "string" then diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 9806bb63..c169f89c 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -800,4 +800,21 @@ function fs_lua.check_command_permissions(flags) end end +--- Check whether a file is a Lua script +-- Either a '.lua' extension, or a shebang with lua interpreter +-- @param name (string) filename to check +-- @return true if the filename has a '.lua' extension or the file contains a +-- 'lua' interpreter shebang +function fs_lua.is_lua(name) + local is_lua = name:lower():match("%.lua$") -- .lua extension, so it's a Lua file + if not is_lua then -- check for shebang + local file = io.open(name) + if file then + is_lua = file:read():match("#!.*lua.*") -- no extension, but a shebang, so it's a Lua file + file:close() + end + end + return not (is_lua == nil) +end + return fs_lua diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua index 4a9c2f7d..7ad75846 100644 --- a/src/luarocks/repos.lua +++ b/src/luarocks/repos.lua @@ -153,18 +153,12 @@ end local function install_binary(source, target, name, version) assert(type(source) == "string") assert(type(target) == "string") - - local match = source:match("%.lua$") - local file, ok, err - if not match then - file = io.open(source) - end - if match or (file and file:read():match("^#!.*lua.*")) then + + if fs.is_lua(source) then ok, err = fs.wrap_script(source, target, name, version) else ok, err = fs.copy_binary(source, target) end - if file then file:close() end return ok, err end -- cgit v1.2.3-55-g6feb