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>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39720 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Felix Fietkau 2014-02-23 17:32:04 +00:00
parent 278803f5ca
commit 31e661bebd
3 changed files with 20 additions and 0 deletions

View File

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

View File

@ -83,6 +83,9 @@ ifeq ($(DUMP),)
ifneq ($(CONFIG_PACKAGE_$(1))$(SDK)$(DEVELOPER),)
IPKGS += $(1)
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)
.PHONY: $(PKG_INSTALL_STAMP).$(1)
@ -124,6 +127,10 @@ ifeq ($(DUMP),)
rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
touch $$@
$(PKG_INFO_DIR)/$(1).version: $$(IPKG_$(1))
echo '$(ABI_VERSION)' | cmp -s - $$@ || \
echo '$(ABI_VERSION)' > $$@
$(PKG_INFO_DIR)/$(1).provides: $$(IPKG_$(1))
$$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
@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)/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)
PREV_STAMP_PREPARED:=$(if $(STAMP_NO_AUTOREBUILD),$(wildcard $(PKG_BUILD_DIR)/.prepared*))
ifneq ($(PREV_STAMP_PREPARED),)
@ -227,6 +236,9 @@ define Package/$(1)/description
endef
endif
BUILD_PACKAGES += $(1)
$(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
$(foreach FIELD, TITLE CATEGORY SECTION VERSION,
ifeq ($($(FIELD)),)
$$(error Package/$(1) is missing the $(FIELD) field)