gluon/scripts/feature_lib.lua
Matthias Schiffer 097efa9d2d
scripts: feature_lib.lua: improve error handling for invalid feature files
Print a proper error message, rather than just

    openwrt/staging_dir/hostpkg/bin/lua: scripts/feature_lib.lua:48: bad
    argument #1 to 'setfenv' (integer expected, got nil)
2020-08-28 20:41:54 +02:00

64 lines
1.0 KiB
Lua

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