mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-18 21:28:02 +00:00
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:
parent
f587bacc26
commit
623825103e
@ -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
|
||||||
|
@ -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))
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user