metadata: handle ABI version rebuild tracking for transient dependencies
authorJo-Philipp Wich <jo@mein.io>
Thu, 20 Jun 2019 19:02:06 +0000 (21:02 +0200)
committerJo-Philipp Wich <jo@mein.io>
Fri, 21 Jun 2019 10:03:43 +0000 (12:03 +0200)
Extend the packageauxvars database to keep a list of possible package
dependencies for each provider, then utilize this information in buildroot
to resolve the ABI version dependencies of dependent packages up to five
levels deep.

This should properly trigger rebuilds for packages indirectly depending
on other packages whose ABI_VERSION changed.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
include/package.mk
scripts/package-metadata.pl

index 569ad647d6db2392026f8300b951047b4f862220..06ff21b0b0afab1d4d909d10a024909c08d7f34b 100644 (file)
@@ -53,14 +53,26 @@ endif
 
 include $(INCLUDE_DIR)/quilt.mk
 
-find_library_dependencies = $(wildcard $(patsubst %,$(STAGING_DIR)/pkginfo/%.version, \
-       $(filter-out $(BUILD_PACKAGES),$(foreach dep, \
-               $(filter-out @%, $(patsubst +%,%,$(1))), \
-               $(if $(findstring :,$(dep)), \
-                       $(word 2,$(subst :,$(space),$(dep))), \
-                       $(dep) \
-               ) \
-       ))))
+find_library_dependencies = \
+       $(wildcard $(patsubst %,$(STAGING_DIR)/pkginfo/%.version, \
+               $(sort $(foreach dep4, \
+                       $(sort $(foreach dep3, \
+                               $(sort $(foreach dep2, \
+                                       $(sort $(foreach dep1, \
+                                               $(sort $(foreach dep0, \
+                                                       $(Package/$(1)/depends), \
+                                                       $(Package/$(dep0)/depends) $(dep0) \
+                                               )), \
+                                               $(Package/$(dep1)/depends) $(dep1) \
+                                       )), \
+                                       $(Package/$(dep2)/depends) $(dep2) \
+                               )), \
+                               $(Package/$(dep3)/depends) $(dep3) \
+                       )), \
+                       $(Package/$(dep4)/depends) $(dep4) \
+               )), \
+       ))
+
 
 PKG_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
 STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild)
@@ -258,7 +270,7 @@ endef
 endif
 
   BUILD_PACKAGES += $(1)
-  $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
+  $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(1)))
 
   $(foreach FIELD, TITLE CATEGORY SECTION VERSION,
     ifeq ($($(FIELD)),)
index 27215f5e5722e530fa3efbbff030c3cd44043b7b..5abc1bdef3f70e1c4cbe3f97ecfd6ea925ad88ed 100755 (executable)
@@ -547,6 +547,18 @@ sub gen_package_auxiliary() {
                                print "Package/$n/abiversion = $abiv\n";
                        }
                }
+               my %depends;
+               foreach my $dep (@{$pkg->{depends} || []}) {
+                       if ($dep =~ m!^\+?(?:[^:]+:)?([^@]+)$!) {
+                               $depends{$1}++;
+                       }
+               }
+               my @depends = sort keys %depends;
+               if (@depends > 0) {
+                       foreach my $n (@{$pkg->{provides}}) {
+                               print "Package/$n/depends = @depends\n";
+                       }
+               }
        }
 }