summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Fahlgren2025-07-24 17:09:04 +0000
committerNick Hainke2025-07-25 06:41:27 +0000
commitac9a97e49b8cd46cd19cbfdeb147b3815f5af0ba (patch)
tree83d2b0ecd32fa86dfddacd6c543351d48fd48782
parent19bc6e8c7f86b197b7bccc45c6af4a3ff521e8ee (diff)
downloadopenwrt-ac9a97e49b8cd46cd19cbfdeb147b3815f5af0ba.tar.gz
build: call ipkg-remove using xargs if #args>=512
The wildcard call to clean up luci package (luci*) can pick up over 2,300 files when the full tree is built. Running make package/luci/clean or a second run of make package/luci/compile would fail with an 'Argument list too long' error. To avoid that, a maybe_use_xargs function was created that runs the command straight as usual if the number of arguments is < 512, or saves the list in a temporary file and feeds it to xargs otherwise. This is an update to current file names and resubmission of https://lists.openwrt.org/pipermail/openwrt-devel/2020-February/027525.html Fixes: https://github.com/openwrt/openwrt/issues/19510 Fixes: https://github.com/openwrt/luci/issues/7869 Authored-by: Eneas U de Queiroz <cotequeiroz@gmail.com> Signed-off-by: Kuan-Yi Li <kyli@abysm.org> Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com> Link: https://github.com/openwrt/openwrt/pull/19516 Signed-off-by: Nick Hainke <vincent@systemli.org>
-rw-r--r--include/package-pack.mk12
1 files changed, 11 insertions, 1 deletions
diff --git a/include/package-pack.mk b/include/package-pack.mk
index f6d90e50ee..14500473c9 100644
--- a/include/package-pack.mk
+++ b/include/package-pack.mk
@@ -18,10 +18,20 @@ define gen_package_wildcard
$(1)$$(if $$(filter -%,$$(ABIV_$(1))),,[^a-z$(if $(CONFIG_USE_APK),,-)])*
endef
+# 1: command and initial arguments
+# 2: arguments list
+# 3: tmp filename
+define maybe_use_xargs
+ $(if $(word 512,$(2)), \
+ $(file >$(3),$(2)) $(XARGS) $(1) < "$(3)"; rm "$(3)", \
+ $(1) $(2))
+endef
+
# 1: package name
# 2: candidate ipk files
define remove_ipkg_files
- $(if $(strip $(2)),$(SCRIPT_DIR)/ipkg-remove $(1) $(2))
+ $(if $(strip $(2)), \
+ $(call maybe_use_xargs,$(SCRIPT_DIR)/ipkg-remove $(1),$(2),$(TMP_DIR)/$(1).in))
endef
# 1: package name