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 <nbd@openwrt.org>

SVN-Revision: 39720
This commit is contained in:
Felix Fietkau 2014-02-23 17:32:04 +00:00
parent f587bacc26
commit 623825103e
3 changed files with 20 additions and 0 deletions

View File

@ -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

View File

@ -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))

View File

@ -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)