2
0
Эх сурвалжийг харах

build: allow packages to declare ABI versions to detect necessary package rebuilds

If a package directly depends on another package that recently changed
its ABI version, it will be cleaned up and rebuilt (assuming quilt is
not used).

This helps with packages that have no stable ABI, e.g. libubox, ubus,
etc.

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 39720
Felix Fietkau 11 жил өмнө
parent
commit
623825103e

+ 1 - 0
include/package-defaults.mk

@@ -32,6 +32,7 @@ define Package/Default
   else
   else
     VERSION:=$(PKG_RELEASE)
     VERSION:=$(PKG_RELEASE)
   endif
   endif
+  ABI_VERSION:=
   ifneq ($(PKG_FLAGS),)
   ifneq ($(PKG_FLAGS),)
     PKGFLAGS:=$(PKG_FLAGS)
     PKGFLAGS:=$(PKG_FLAGS)
   else
   else

+ 7 - 0
include/package-ipkg.mk

@@ -83,6 +83,9 @@ ifeq ($(DUMP),)
       ifneq ($(CONFIG_PACKAGE_$(1))$(SDK)$(DEVELOPER),)
       ifneq ($(CONFIG_PACKAGE_$(1))$(SDK)$(DEVELOPER),)
         IPKGS += $(1)
         IPKGS += $(1)
         compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(STAGING_DIR_ROOT)/stamp/.$(1)_installed
         compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(STAGING_DIR_ROOT)/stamp/.$(1)_installed
+        ifneq ($(ABI_VERSION),)
+        compile: $(PKG_INFO_DIR)/$(1).version
+        endif
 
 
         ifeq ($(CONFIG_PACKAGE_$(1)),y)
         ifeq ($(CONFIG_PACKAGE_$(1)),y)
           .PHONY: $(PKG_INSTALL_STAMP).$(1)
           .PHONY: $(PKG_INSTALL_STAMP).$(1)
@@ -124,6 +127,10 @@ ifeq ($(DUMP),)
 	rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
 	rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
 	touch $$@
 	touch $$@
 
 
+    $(PKG_INFO_DIR)/$(1).version: $$(IPKG_$(1))
+	echo '$(ABI_VERSION)' | cmp -s - $$@ || \
+		echo '$(ABI_VERSION)' > $$@
+
     $(PKG_INFO_DIR)/$(1).provides: $$(IPKG_$(1))
     $(PKG_INFO_DIR)/$(1).provides: $$(IPKG_$(1))
     $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
     $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
 	@rm -rf $(PACKAGE_DIR)/$(1)_* $$(IDIR_$(1))
 	@rm -rf $(PACKAGE_DIR)/$(1)_* $$(IDIR_$(1))

+ 12 - 0
include/package.mk

@@ -39,6 +39,15 @@ include $(INCLUDE_DIR)/host.mk
 include $(INCLUDE_DIR)/unpack.mk
 include $(INCLUDE_DIR)/unpack.mk
 include $(INCLUDE_DIR)/depends.mk
 include $(INCLUDE_DIR)/depends.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) \
+		) \
+	))))
+
 STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild)
 STAMP_NO_AUTOREBUILD=$(wildcard $(PKG_BUILD_DIR)/.no_autorebuild)
 PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*))
 PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*))
 ifneq ($(PREV_STAMP_PREPARED),)
 ifneq ($(PREV_STAMP_PREPARED),)
@@ -227,6 +236,9 @@ define Package/$(1)/description
 endef
 endef
 endif
 endif
 
 
+  BUILD_PACKAGES += $(1)
+  $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
+
   $(foreach FIELD, TITLE CATEGORY SECTION VERSION,
   $(foreach FIELD, TITLE CATEGORY SECTION VERSION,
     ifeq ($($(FIELD)),)
     ifeq ($($(FIELD)),)
       $$(error Package/$(1) is missing the $(FIELD) field)
       $$(error Package/$(1) is missing the $(FIELD) field)