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 | 31e661bebd86209f48b80b093e74d671c97e5a27 (patch) | |
| tree | 0e02563129b530e939475086d0f318b9882fc75f /include | |
| parent | 278803f5ca0c072f0d9c308a75732c2e378ccd51 (diff) | |
| download | upstream-31e661bebd86209f48b80b093e74d671c97e5a27.tar.gz upstream-31e661bebd86209f48b80b093e74d671c97e5a27.tar.bz2 upstream-31e661bebd86209f48b80b093e74d671c97e5a27.zip | |
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
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 0505a43c4fd..62ccbb93ef0 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 043431c349c..cb2a4087fe3 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 79066fe1e28..d14c525506b 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) |
