diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-02-23 17:32:04 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-02-23 17:32:04 +0000 |
commit | 623825103e17a975f36854b362f17f8d26557828 (patch) | |
tree | ea2d52a4264b2bdbee20d394b449610bb7f75e48 /include | |
parent | f587bacc264012658b9f629300cc9a46100c2e5a (diff) | |
download | mtk-20170518-623825103e17a975f36854b362f17f8d26557828.zip mtk-20170518-623825103e17a975f36854b362f17f8d26557828.tar.gz mtk-20170518-623825103e17a975f36854b362f17f8d26557828.tar.bz2 |
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
Diffstat (limited to 'include')
-rw-r--r-- | include/package-defaults.mk | 1 | ||||
-rw-r--r-- | include/package-ipkg.mk | 7 | ||||
-rw-r--r-- | include/package.mk | 12 |
3 files changed, 20 insertions, 0 deletions
diff --git a/include/package-defaults.mk b/include/package-defaults.mk index 0505a43..62ccbb9 100644 --- a/include/package-defaults.mk +++ b/include/package-defaults.mk @@ -32,6 +32,7 @@ define Package/Default else VERSION:=$(PKG_RELEASE) endif + ABI_VERSION:= ifneq ($(PKG_FLAGS),) PKGFLAGS:=$(PKG_FLAGS) else diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index 043431c..cb2a408 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -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)) diff --git a/include/package.mk b/include/package.mk index 79066fe..d14c525 100644 --- a/include/package.mk +++ b/include/package.mk @@ -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) |