55 lines
1.6 KiB
Lua
55 lines
1.6 KiB
Lua
|
|
--- Build back-end for CMake-based modules.
|
|
module("luarocks.build.cmake", package.seeall)
|
|
|
|
local fs = require("luarocks.fs")
|
|
local util = require("luarocks.util")
|
|
local cfg = require("luarocks.cfg")
|
|
|
|
--- Driver function for the "cmake" build back-end.
|
|
-- @param rockspec table: the loaded rockspec.
|
|
-- @return boolean or (nil, string): true if no errors ocurred,
|
|
-- nil and an error message otherwise.
|
|
function run(rockspec)
|
|
assert(type(rockspec) == "table")
|
|
local build = rockspec.build
|
|
local variables = build.variables or {}
|
|
|
|
-- Pass Env variables
|
|
build.variables.CMAKE_MODULE_PATH=os.getenv("CMAKE_MODULE_PATH")
|
|
build.variables.CMAKE_LIBRARY_PATH=os.getenv("CMAKE_LIBRARY_PATH")
|
|
build.variables.CMAKE_INCLUDE_PATH=os.getenv("CMAKE_INCLUDE_PATH")
|
|
|
|
util.variable_substitutions(variables, rockspec.variables)
|
|
|
|
-- If inline cmake is present create CMakeLists.txt from it.
|
|
if type(build.cmake) == "string" then
|
|
local cmake = assert(io.open(fs.current_dir().."/CMakeLists.txt", "w"))
|
|
cmake:write(build.cmake)
|
|
cmake:close()
|
|
end
|
|
|
|
|
|
-- Execute cmake with variables.
|
|
local args = ""
|
|
if cfg.cmake_generator then
|
|
args = args .. ' -G"'..cfg.cmake_generator.. '"'
|
|
end
|
|
for k,v in pairs(variables) do
|
|
args = args .. ' -D' ..k.. '="' ..v.. '"'
|
|
end
|
|
|
|
if not fs.execute("cmake . " ..args) then
|
|
return nil, "Failed cmake."
|
|
end
|
|
|
|
if not fs.execute("make -fMakefile") then
|
|
return nil, "Failed building."
|
|
end
|
|
|
|
if not fs.execute("make -fMakefile install") then
|
|
return nil, "Failed installing."
|
|
end
|
|
return true
|
|
end
|