Skip to content
Snippets Groups Projects
Select Git revision
  • 15bb6b6e93fd0733a9feb877d2091acc3c80fb16
  • experimental default protected
  • v2023.2.5-ffs
  • nrb/ex400-remove-wps
  • nrb/airmax-test
  • v2023.2.4-ffs
  • nrb/ar9344-reset-sequence
  • autinerd/experimental-openwrt-24.10
  • v2023.2.3-ffs
  • v2023.2.2-ffs
  • v2023.2-ffs
  • v2023.1-ffs
  • v2022.1.4-ffs
  • feature/addMikrotikwAP
  • v2022.1.3-ffs
  • v2021.1.2-ffs
  • v2022.1.1-ffs
  • master protected
  • v2021.1.1-ffs
  • nrb/gluon-master-cpe510
  • v2021.1-ffs
  • experimental-2025-07-04
  • experimental-2025-07-04-base
  • experimental-2025-07-01
  • experimental-2025-07-01-base
  • experimental-2025-06-25
  • experimental-2025-06-25-base
  • experimental-2025-06-24
  • experimental-2025-06-24-base
  • experimental-2025-06-22
  • experimental-2025-06-22-base
  • v2023.2.5-ffs0.1
  • experimental-2025-06-08
  • experimental-2025-06-08-base
  • experimental-2025-06-06
  • experimental-2025-06-06-base
  • experimental-2025-05-27
  • experimental-2025-05-27-base
  • experimental-2025-05-18
  • experimental-2025-05-18-base
  • experimental-2025-05-15
41 results

feature_lib.lua

Blame
  • feature_lib.lua 1.43 KiB
    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(files, features)
    	local enabled_features = to_keys(features)
    	local handled_features = {}
    	local packages = {}
    
    	local funcs = {}
    
    	local function add_pkgs(pkgs)
    		for _, pkg in ipairs(pkgs or {}) do
    			packages[pkg] = true
    		end
    	end
    
    	function funcs._(feature)
    		return enabled_features[feature] ~= nil
    	end
    
    	function funcs.feature(feature, pkgs)
    		assert(
    			type(feature) == 'string',
    			'Incorrect use of feature(): pass a feature name without _ as first argument')
    
    		if enabled_features[feature] then
    			handled_features[feature] = true
    			add_pkgs(pkgs)
    		end
    
    	end
    
    	function funcs.when(cond, pkgs)
    		assert(
    			type(cond) == 'boolean',
    			'Incorrect use of when(): pass a locical expression of _-prefixed strings as first argument')
    
    		if cond then
    			add_pkgs(pkgs)
    		end
    	end
    
    	-- Evaluate the feature definition files
    	for _, file in ipairs(files) do
    		local f, err = loadfile(file)
    		if not f then
    			error('Failed to parse feature definition: ' .. err)
    		end
    		setfenv(f, funcs)
    		f()
    	end
    
    	-- Handle default packages
    	for _, feature in ipairs(features) do
    		if not handled_features[feature] then
    			packages['gluon-' .. feature] = true
    		end
    	end
    
    	return collect_keys(packages)
    end
    
    return M