From d20f8d41a05a735c86dd9ab07227e423ae49fcb3 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 23 Aug 2022 22:59:55 +0200 Subject: [PATCH] scripts: target_config_lib: prepend target default package list from openwrt/tmp/.targetinfo Device-specific package additions could generate `CONFIG_PACKAGE_...=m` lines, which would override `CONFIG_PACKAGE_...=y` lines inserted by OpenWrt for default packages (as Gluon did not know about these default packages). This resulted in the unintended removal of such packages from other devices that did not contain the same package in their device package lists. Avoid this issue by explicitly adding OpenWrt's target default package list to the front of Gluon's target package list. --- Makefile | 1 + scripts/target_config_lib.lua | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e3aa596f..565a32a0 100644 --- a/Makefile +++ b/Makefile @@ -181,6 +181,7 @@ config: $(LUA) FORCE $(call CheckSite,$(conf)); \ ) + $(OPENWRTMAKE) prepare-tmpinfo $(GLUON_ENV) $(LUA) scripts/target_config.lua > openwrt/.config $(OPENWRTMAKE) defconfig $(GLUON_ENV) $(LUA) scripts/target_config_check.lua diff --git a/scripts/target_config_lib.lua b/scripts/target_config_lib.lua index 7e41f883..ef487f06 100644 --- a/scripts/target_config_lib.lua +++ b/scripts/target_config_lib.lua @@ -154,12 +154,31 @@ local function handle_target_pkgs(pkgs) end end +local function get_default_pkgs() + local targetinfo_target = string.gsub(openwrt_config_target, '_', '/') + local target_matches = false + for line in io.lines('openwrt/tmp/.targetinfo') do + local target_match = string.match(line, '^Target: (.+)$') + if target_match then + target_matches = (target_match == targetinfo_target) + end + + local default_packages_match = string.match(line, '^Default%-Packages: (.+)$') + if target_matches and default_packages_match then + return split(default_packages_match) + end + end + + io.stderr:write('Error: unable to get default packages for OpenWrt target ', targetinfo_target, '\n') + os.exit(1) +end + lib.include('generic') lib.include(target) lib.check_devices() -handle_target_pkgs(lib.target_packages) +handle_target_pkgs(concat_list(get_default_pkgs(), lib.target_packages)) for _, dev in ipairs(lib.devices) do local device_pkgs = {}