aboutsummaryrefslogtreecommitdiff
path: root/lua/cmake/variants.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/cmake/variants.lua')
-rw-r--r--lua/cmake/variants.lua252
1 files changed, 126 insertions, 126 deletions
diff --git a/lua/cmake/variants.lua b/lua/cmake/variants.lua
index cb846e8..ce7d8a7 100644
--- a/lua/cmake/variants.lua
+++ b/lua/cmake/variants.lua
@@ -8,155 +8,155 @@ local VariantConfig = {}
VariantConfig.__index = VariantConfig
local global_variant_subs = {
- ["${workspaceFolder}"] = uv.cwd(),
- ["${userHome}"] = uv.os_homedir(),
+ ["${workspaceFolder}"] = uv.cwd(),
+ ["${userHome}"] = uv.os_homedir(),
}
local _configure_args = function(obj, build_directory)
- local args = {}
- if obj.generator then
- table.insert(args, "-G " .. '"' .. obj.generator .. '"')
- end
- table.insert(args, "-B" .. build_directory)
- if obj.buildType then
- table.insert(args, "-DCMAKE_BUILD_TYPE=" .. obj.buildType)
- end
- if obj.linkage and string.lower(obj.linkage) == "static" then
- table.insert(args, "-DCMAKE_BUILD_SHARED_LIBS=OFF")
- elseif obj.linkage and string.lower(obj.linkage) == "shared" then
- table.insert(args, "-DCMAKE_BUILD_SHARED_LIBS=ON")
- end
- for k, v in pairs(obj.settings or {}) do
- table.insert(args, "-D" .. k .. "=" .. v)
- end
- table.insert(args, "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON")
- return args
+ local args = {}
+ if obj.generator then
+ table.insert(args, "-G " .. '"' .. obj.generator .. '"')
+ end
+ table.insert(args, "-B" .. build_directory)
+ if obj.buildType then
+ table.insert(args, "-DCMAKE_BUILD_TYPE=" .. obj.buildType)
+ end
+ if obj.linkage and string.lower(obj.linkage) == "static" then
+ table.insert(args, "-DCMAKE_BUILD_SHARED_LIBS=OFF")
+ elseif obj.linkage and string.lower(obj.linkage) == "shared" then
+ table.insert(args, "-DCMAKE_BUILD_SHARED_LIBS=ON")
+ end
+ for k, v in pairs(obj.settings or {}) do
+ table.insert(args, "-D" .. k .. "=" .. v)
+ end
+ table.insert(args, "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON")
+ return args
end
local _configure_command = function(obj, configure_args)
- local ret = {}
- ret.cmd = config.cmake.cmake_path
- ret.args = table.concat(configure_args, " ")
- ret.env = vim.tbl_deep_extend("keep", obj.env, config.cmake.configure_environment, config.cmake.environment)
- return ret
+ local ret = {}
+ ret.cmd = config.cmake.cmake_path
+ ret.args = table.concat(configure_args, " ")
+ ret.env = vim.tbl_deep_extend("keep", obj.env, config.cmake.configure_environment, config.cmake.environment)
+ return ret
end
local _build_args = function(obj, build_directory)
- local args = { "--build" }
- table.insert(args, build_directory)
- if config.cmake.parallel_jobs then
- table.insert(args, "-j " .. tostring(config.cmake.parallel_jobs))
- end
- if #obj.buildArgs ~= 0 then
- for _, v in ipairs(obj.buildArgs) do
- table.insert(args, v)
- end
- elseif #config.cmake.build_args ~= 0 then
- for _, v in ipairs(config.cmake.build_args) do
- table.insert(args, v)
- end
- end
- if #obj.buildToolArgs ~= 0 or #config.cmake.build_tool_args ~= 0 then
- table.insert(args, "--")
- if #obj.buildToolArgs ~= 0 then
- for _, v in ipairs(obj.buildToolArgs) do
- table.insert(args, v)
- end
- elseif #config.cmake.build_tool_args ~= 0 then
- for _, v in ipairs(config.cmake.build_tool_args) do
- table.insert(args, v)
- end
- end
- end
- return args
+ local args = { "--build" }
+ table.insert(args, build_directory)
+ if config.cmake.parallel_jobs then
+ table.insert(args, "-j " .. tostring(config.cmake.parallel_jobs))
+ end
+ if #obj.buildArgs ~= 0 then
+ for _, v in ipairs(obj.buildArgs) do
+ table.insert(args, v)
+ end
+ elseif #config.cmake.build_args ~= 0 then
+ for _, v in ipairs(config.cmake.build_args) do
+ table.insert(args, v)
+ end
+ end
+ if #obj.buildToolArgs ~= 0 or #config.cmake.build_tool_args ~= 0 then
+ table.insert(args, "--")
+ if #obj.buildToolArgs ~= 0 then
+ for _, v in ipairs(obj.buildToolArgs) do
+ table.insert(args, v)
+ end
+ elseif #config.cmake.build_tool_args ~= 0 then
+ for _, v in ipairs(config.cmake.build_tool_args) do
+ table.insert(args, v)
+ end
+ end
+ end
+ return args
end
local _build_command = function(obj, build_args)
- local ret = {}
- ret.cmd = config.cmake.cmake_path
- ret.args = table.concat(build_args, " ")
- ret.env = vim.tbl_deep_extend("keep", obj.env, config.cmake.configure_environment, config.cmake.environment)
- return ret
+ local ret = {}
+ ret.cmd = config.cmake.cmake_path
+ ret.args = table.concat(build_args, " ")
+ ret.env = vim.tbl_deep_extend("keep", obj.env, config.cmake.configure_environment, config.cmake.environment)
+ return ret
end
---Create configuration from variant
---@param source table
---@return CMakeGenerateOption
function VariantConfig:new(source)
- local obj = {}
- local subs = vim.tbl_deep_extend("keep", global_variant_subs, { ["${buildType}"] = source.buildType })
+ local obj = {}
+ local subs = vim.tbl_deep_extend("keep", global_variant_subs, { ["${buildType}"] = source.buildType })
- obj.name = source.short
- obj.long_name = source.long
- obj.directory = utils.substitude(config.cmake.build_directory, subs)
- local configure_args = _configure_args(source, obj.directory)
- obj.generate_command = _configure_command(source, configure_args)
- local build_args = _build_args(source, obj.directory)
- obj.build_options = {
- {
- name = source.short,
- long_name = source.long,
- command = _build_command(source, build_args),
- },
- }
+ obj.name = source.short
+ obj.long_name = source.long
+ obj.directory = utils.substitude(config.cmake.build_directory, subs)
+ local configure_args = _configure_args(source, obj.directory)
+ obj.generate_command = _configure_command(source, configure_args)
+ local build_args = _build_args(source, obj.directory)
+ obj.build_options = {
+ {
+ name = source.short,
+ long_name = source.long,
+ command = _build_command(source, build_args),
+ },
+ }
- setmetatable(obj, VariantConfig)
- return obj
+ setmetatable(obj, VariantConfig)
+ return obj
end
function VariantConfig.cartesian_product(sets)
- local function collapse_result(res)
- local ret = {
- short = {},
- long = {},
- buildType = nil,
- linkage = nil,
- generator = nil,
- buildArgs = {},
- buildToolArgs = {},
- settings = {},
- env = {},
- }
- local is_default = true
- for _, v in ipairs(res) do
- if not v.default then
- is_default = false
- end
- ret.short[#ret.short + 1] = v.short
- ret.long[#ret.long + 1] = v.long
- ret.buildType = v.buildType or ret.buildType
- ret.linkage = v.linkage or ret.linkage
- ret.generator = v.generator or ret.generator
- ret.buildArgs = v.buildArgs or ret.buildArgs
- ret.buildToolArgs = v.buildToolArgs or ret.buildToolArgs
- for sname, sval in pairs(v.settings or {}) do
- ret.settings[sname] = sval
- end
- for ename, eres in pairs(v.env or {}) do
- ret.env[ename] = eres
- end
- end
- return VariantConfig:new(ret), is_default
- end
- local result = {}
- local set_count = #sets
- local function descend(depth)
- for k, v in pairs(sets[depth].choices) do
- if sets[depth].default ~= k then
- result.default = false
- end
- result[depth] = v
- result[depth].default = (k == sets[depth].default)
- if depth == set_count then
- coroutine.yield(collapse_result(result))
- else
- descend(depth + 1)
- end
- end
- end
- return coroutine.wrap(function()
- descend(1)
- end)
+ local function collapse_result(res)
+ local ret = {
+ short = {},
+ long = {},
+ buildType = nil,
+ linkage = nil,
+ generator = nil,
+ buildArgs = {},
+ buildToolArgs = {},
+ settings = {},
+ env = {},
+ }
+ local is_default = true
+ for _, v in ipairs(res) do
+ if not v.default then
+ is_default = false
+ end
+ ret.short[#ret.short + 1] = v.short
+ ret.long[#ret.long + 1] = v.long
+ ret.buildType = v.buildType or ret.buildType
+ ret.linkage = v.linkage or ret.linkage
+ ret.generator = v.generator or ret.generator
+ ret.buildArgs = v.buildArgs or ret.buildArgs
+ ret.buildToolArgs = v.buildToolArgs or ret.buildToolArgs
+ for sname, sval in pairs(v.settings or {}) do
+ ret.settings[sname] = sval
+ end
+ for ename, eres in pairs(v.env or {}) do
+ ret.env[ename] = eres
+ end
+ end
+ return VariantConfig:new(ret), is_default
+ end
+ local result = {}
+ local set_count = #sets
+ local function descend(depth)
+ for k, v in pairs(sets[depth].choices) do
+ if sets[depth].default ~= k then
+ result.default = false
+ end
+ result[depth] = v
+ result[depth].default = (k == sets[depth].default)
+ if depth == set_count then
+ coroutine.yield(collapse_result(result))
+ else
+ descend(depth + 1)
+ end
+ end
+ end
+ return coroutine.wrap(function()
+ descend(1)
+ end)
end
return VariantConfig