From 85b8c8cc20a58a2c769ee323aa1283ad94e2b2f4 Mon Sep 17 00:00:00 2001 From: Philipp Janda Date: Tue, 27 May 2014 01:08:19 +0200 Subject: build static libraries for builtin build type --- src/luarocks/build/builtin.lua | 29 ++++++++++++++++++++++++++++- src/luarocks/cfg.lua | 8 ++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/luarocks/build/builtin.lua b/src/luarocks/build/builtin.lua index 47aa71fc..c855f48a 100644 --- a/src/luarocks/build/builtin.lua +++ b/src/luarocks/build/builtin.lua @@ -50,7 +50,7 @@ end -- nil and an error message otherwise. function builtin.run(rockspec) assert(type(rockspec) == "table") - local compile_object, compile_library, compile_wrapper_binary --TODO EXEWRAPPER + local compile_object, compile_library, compile_static_library, compile_wrapper_binary --TODO EXEWRAPPER local build = rockspec.build local variables = rockspec.variables @@ -83,6 +83,13 @@ function builtin.run(rockspec) local ok = execute(variables.LD.." "..variables.LIBFLAG, "-o", library, unpack(extras)) return ok end + compile_static_library = function(library, objects, libraries, libdirs, name) + local ok = execute(variables.AR, "rc", library, unpack(objects)) + if ok then + ok = execute(variables.RANLIB, library) + end + return ok + end compile_wrapper_binary = function(fullname, name) --TODO EXEWRAPPER local fullbasename = fullname:gsub("%.lua$", ""):gsub("/", "\\") @@ -129,6 +136,10 @@ function builtin.run(rockspec) end return ok end + compile_static_library = function(library, objects, libraries, libdirs, name) + local ok = execute(variables.AR, "-out:"..library, unpack(objects)) + return ok + end compile_wrapper_binary = function(fullname, name) --TODO EXEWRAPPER local fullbasename = fullname:gsub("%.lua$", ""):gsub("/", "\\") @@ -170,6 +181,13 @@ function builtin.run(rockspec) end return execute(variables.LD.." "..variables.LIBFLAG, "-o", library, "-L"..variables.LUA_LIBDIR, unpack(extras)) end + compile_static_library = function(library, objects, libraries, libdirs, name) + local ok = execute(variables.AR, "rc", library, unpack(objects)) + if ok then + ok = execute(variables.RANLIB, library) + end + return ok + end compile_wrapper_binary = function(fullname, name) return true, name end --TODO EXEWRAPPER end @@ -246,6 +264,15 @@ function builtin.run(rockspec) if not ok then return nil, "Failed compiling module "..module_name end + module_name = name:match("([^.]*)$").."."..util.matchquote(cfg.static_lib_extension) + if moddir ~= "" then + module_name = dir.path(moddir, module_name) + end + built_modules[module_name] = dir.path(libdir, module_name) + ok = compile_static_library(module_name, objects, info.libraries, info.libdirs, name) + if not ok then + return nil, "Failed compiling static library "..module_name + end end end for name, dest in pairs(built_modules) do diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index 59a17754..c404c663 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -233,6 +233,8 @@ local defaults = { MAKE = "make", CC = "cc", LD = "ld", + AR = "ar", + RANLIB = "ranlib", CVS = "cvs", GIT = "git", @@ -298,6 +300,7 @@ if detected.windows then defaults.platforms = {"win32", "windows" } defaults.lib_extension = "dll" defaults.external_lib_extension = "dll" + defaults.static_lib_extension = "lib" 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:/lua"..cfg.lua_version.."/bin" @@ -311,6 +314,7 @@ if detected.windows then defaults.variables.WRAPPER = full_prefix.."\\rclauncher.c" defaults.variables.LD = "link" defaults.variables.MT = "mt" + defaults.variables.AR = "lib" defaults.variables.LUALIB = "lua"..cfg.lua_version..".lib" defaults.variables.CFLAGS = "/MD /O2" defaults.variables.LIBFLAG = "/dll" @@ -351,11 +355,14 @@ end if detected.mingw32 then defaults.platforms = { "win32", "mingw32", "windows" } defaults.obj_extension = "o" + defaults.static_lib_extension = "a" defaults.cmake_generator = "MinGW Makefiles" defaults.variables.MAKE = "mingw32-make" defaults.variables.CC = "mingw32-gcc" defaults.variables.RC = "windres" defaults.variables.LD = "mingw32-gcc" + defaults.variables.AR = "mingw32-gcc-ar" + defaults.variables.RANLIB = "mingw32-gcc-ranlib" defaults.variables.CFLAGS = "-O2" defaults.variables.LIBFLAG = "-shared" defaults.external_deps_patterns = { @@ -375,6 +382,7 @@ end if detected.unix then defaults.lib_extension = "so" + defaults.static_lib_extension = "a" defaults.external_lib_extension = "so" defaults.obj_extension = "o" defaults.external_deps_dirs = { "/usr/local", "/usr" } -- cgit v1.2.3-55-g6feb From 4e93093b4349377188c4ec033077d1acd10eda4e Mon Sep 17 00:00:00 2001 From: Philipp Janda Date: Tue, 27 May 2014 01:28:47 +0200 Subject: avoid the need for plugin support in mingw --- src/luarocks/cfg.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index c404c663..5e891b06 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua @@ -361,8 +361,8 @@ if detected.mingw32 then defaults.variables.CC = "mingw32-gcc" defaults.variables.RC = "windres" defaults.variables.LD = "mingw32-gcc" - defaults.variables.AR = "mingw32-gcc-ar" - defaults.variables.RANLIB = "mingw32-gcc-ranlib" + defaults.variables.AR = "ar" + defaults.variables.RANLIB = "ranlib" defaults.variables.CFLAGS = "-O2" defaults.variables.LIBFLAG = "-shared" defaults.external_deps_patterns = { -- cgit v1.2.3-55-g6feb From fb93696e2b640478bbe6ba4753e6eeb7693d751d Mon Sep 17 00:00:00 2001 From: Philipp Janda Date: Tue, 27 May 2014 02:18:24 +0200 Subject: handle static libraries for multiple versions of a rock --- src/luarocks/path.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/luarocks/path.lua b/src/luarocks/path.lua index 598e51d9..519f32b0 100644 --- a/src/luarocks/path.lua +++ b/src/luarocks/path.lua @@ -251,6 +251,11 @@ function path.path_to_module(file) name = file:match("(.*)%."..cfg.lib_extension.."$") if name then name = name:gsub(dir.separator, ".") + else + name = file:match("(.*)%."..cfg.static_lib_extension.."$") + if name then + name = name:gsub(dir.separator, ".") + end end end if not name then name = file end -- cgit v1.2.3-55-g6feb