aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-02-23 17:32:04 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-02-23 17:32:04 +0000
commit31e661bebd86209f48b80b093e74d671c97e5a27 (patch)
tree0e02563129b530e939475086d0f318b9882fc75f /include
parent278803f5ca0c072f0d9c308a75732c2e378ccd51 (diff)
downloadupstream-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.mk1
-rw-r--r--include/package-ipkg.mk7
-rw-r--r--include/package.mk12
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)