build: fix ipkg-remove: add support for removing apk files
authorFelix Fietkau <[email protected]>
Tue, 15 Jul 2025 18:47:31 +0000 (20:47 +0200)
committerFelix Fietkau <[email protected]>
Tue, 15 Jul 2025 18:48:45 +0000 (20:48 +0200)
Use apk adbdump to extract metadata from .apk files to derive the real
package name.

Signed-off-by: Felix Fietkau <[email protected]>
include/feeds.mk
include/package-pack.mk
scripts/ipkg-remove

index c3a47cf5f9225280eab6c1f936d0f9b47b2f72db..f484a4e92b2c0c8c6a4183563c6f1fb29bdb70e7 100644 (file)
@@ -20,7 +20,7 @@ opkg_package_files = $(wildcard \
 
 apk_package_files = $(wildcard \
        $(foreach dir,$(PACKAGE_SUBDIRS), \
-         $(foreach pkg,$(1), $(dir)/$(pkg)_*.apk)))
+         $(foreach pkg,$(1), $(dir)/$(pkg)-*.apk)))
 
 # 1: package name
 define FeedPackageDir
index 925c4ca4c75c2c657f346b2266034c174b7921d0..f6d90e50eeb175dfe327f2c4646540d23f1308e3 100644 (file)
@@ -15,7 +15,7 @@ endef
 # Generates a make statement to return a wildcard for candidate ipkg files
 # 1: package name
 define gen_package_wildcard
-  $(1)$$(if $$(filter -%,$$(ABIV_$(1))),,[^a-z-])*
+  $(1)$$(if $$(filter -%,$$(ABIV_$(1))),,[^a-z$(if $(CONFIG_USE_APK),,-)])*
 endef
 
 # 1: package name
index 19d7148e83c5a4c3d44760fe73dc1120b55ce3b7..e7516c3d3da39e56bcbc69a163cf317facf937a3 100755 (executable)
@@ -4,10 +4,11 @@ sourcename="$1"; shift
 
 for pkg in "$@"; do
        case "$pkg" in
-               */"${sourcename}_"*.ipk)
+               */"${sourcename}_"*.ipk|\
+               */"${sourcename}-"[0-9]*.apk)
                        rm -vf "$pkg"
                ;;
-               *)
+               *.ipk)
                        tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | {
                                packagename=
                                abiversion=
@@ -21,6 +22,20 @@ for pkg in "$@"; do
                                [ "$packagename" = "$sourcename" ] && rm -vf "$pkg"
                        }
                ;;
+               *.apk)
+                       apk adbdump "$pkg" | grep -E '^  (name:|.*openwrt:abiversion)' | {
+                               packagename=
+                               abiversion=
+                               while read field value; do
+                                       case "$field" in
+                                               name:) packagename="$value";;
+                                               -) abiversion="${value##*abiversion=}";;
+                                       esac
+                               done
+                               [ -n "$abiversion" ] && packagename="${packagename%%$abiversion}"
+                               [ "$packagename" = "$sourcename" ] && rm -vf "$pkg"
+                       }
+               ;;
        esac
 done