gluon/scripts/feature_lib.lua

64 lines
1.0 KiB
Lua
Raw Normal View History

local M = {}
local function to_keys(t)
local ret = {}
for _, v in ipairs(t) do
ret[v] = true
end
return ret
end
local function collect_keys(t)
local ret = {}
for v in pairs(t) do
table.insert(ret, v)
end
return ret
end
function M.get_packages(file, features)
local feature_table = to_keys(features)
local funcs = {}
function funcs._(feature)
if feature_table[feature] then
return feature
end
end
local nodefault = {}
local packages = {}
function funcs.feature(match, options)
if not match then
return
end
if options.nodefault then
nodefault[match] = true
end
for _, package in ipairs(options.packages or {}) do
packages[package] = true
end
end
-- Evaluate the feature definition file
local f, err = loadfile(file)
if not f then
error('Failed to parse feature definition: ' .. err)
end
setfenv(f, funcs)
f()
-- Handle default packages
for _, feature in ipairs(features) do
if not nodefault[feature] then
packages['gluon-' .. feature] = true
end
end
return collect_keys(packages)
end
return M