623825103e
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
200 lines
6.7 KiB
Makefile
200 lines
6.7 KiB
Makefile
#
|
|
# Copyright (C) 2006,2007 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
|
|
# invoke ipkg-build with some default options
|
|
IPKG_BUILD:= \
|
|
ipkg-build -c -o 0 -g 0
|
|
|
|
IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg
|
|
|
|
define BuildIPKGVariable
|
|
ifdef Package/$(1)/$(2)
|
|
$(call shexport,Package/$(1)/$(2))
|
|
$(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2);
|
|
endif
|
|
endef
|
|
|
|
PARENL :=(
|
|
PARENR :=)
|
|
|
|
dep_split=$(subst :,$(space),$(1))
|
|
dep_rem=$(subst !,,$(subst $(strip $(PARENL)),,$(subst $(strip $(PARENR)),,$(word 1,$(call dep_split,$(1))))))
|
|
dep_confvar=$(strip $(foreach cond,$(subst ||, ,$(call dep_rem,$(1))),$(CONFIG_$(cond))))
|
|
dep_pos=$(if $(call dep_confvar,$(1)),$(call dep_val,$(1)))
|
|
dep_neg=$(if $(call dep_confvar,$(1)),,$(call dep_val,$(1)))
|
|
dep_if=$(if $(findstring !,$(1)),$(call dep_neg,$(1)),$(call dep_pos,$(1)))
|
|
dep_val=$(word 2,$(call dep_split,$(1)))
|
|
strip_deps=$(strip $(subst +,,$(filter-out @%,$(1))))
|
|
filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep)))
|
|
|
|
define AddDependency
|
|
$$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(IPKG_$$(pkg))): $$(foreach pkg,$(2),$$(IPKG_$$(pkg)))))
|
|
endef
|
|
|
|
define FixupReverseDependencies
|
|
DEPS := $$(filter %:$(1),$$(IDEPEND))
|
|
DEPS := $$(patsubst %:$(1),%,$$(DEPS))
|
|
DEPS := $$(filter $$(DEPS),$$(IPKGS))
|
|
$(call AddDependency,$$(DEPS),$(1))
|
|
endef
|
|
|
|
define FixupDependencies
|
|
DEPS := $$(filter $(1):%,$$(IDEPEND))
|
|
DEPS := $$(patsubst $(1):%,%,$$(DEPS))
|
|
DEPS := $$(filter $$(DEPS),$$(IPKGS))
|
|
$(call AddDependency,$(1),$$(DEPS))
|
|
endef
|
|
|
|
ifneq ($(PKG_NAME),toolchain)
|
|
define CheckDependencies
|
|
@( \
|
|
rm -f $(PKG_INFO_DIR)/$(1).missing; \
|
|
( \
|
|
export \
|
|
READELF=$(TARGET_CROSS)readelf \
|
|
OBJCOPY=$(TARGET_CROSS)objcopy \
|
|
XARGS="$(XARGS)"; \
|
|
$(SCRIPT_DIR)/gen-dependencies.sh "$$(IDIR_$(1))"; \
|
|
) | while read FILE; do \
|
|
grep -q "$$$$FILE" $(PKG_INFO_DIR)/$(1).provides || \
|
|
echo "$$$$FILE" >> $(PKG_INFO_DIR)/$(1).missing; \
|
|
done; \
|
|
if [ -f "$(PKG_INFO_DIR)/$(1).missing" ]; then \
|
|
echo "Package $(1) is missing dependencies for the following libraries:" >&2; \
|
|
cat "$(PKG_INFO_DIR)/$(1).missing" >&2; \
|
|
false; \
|
|
fi; \
|
|
)
|
|
endef
|
|
endif
|
|
|
|
ifeq ($(DUMP),)
|
|
define BuildTarget/ipkg
|
|
IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk
|
|
IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1)
|
|
KEEP_$(1):=$(strip $(call Package/$(1)/conffiles))
|
|
|
|
ifeq ($(BUILD_VARIANT),$$(if $$(VARIANT),$$(VARIANT),$(BUILD_VARIANT)))
|
|
ifdef Package/$(1)/install
|
|
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)
|
|
compile: $(PKG_INSTALL_STAMP).$(1)
|
|
$(PKG_INSTALL_STAMP).$(1):
|
|
if [ -f $(PKG_INSTALL_STAMP).clean ]; then \
|
|
rm -f \
|
|
$(PKG_INSTALL_STAMP) \
|
|
$(PKG_INSTALL_STAMP).clean; \
|
|
fi; \
|
|
echo "$(1)" >> $(PKG_INSTALL_STAMP)
|
|
endif
|
|
else
|
|
compile: $(1)-disabled
|
|
$(1)-disabled:
|
|
@echo "WARNING: skipping $(1) -- package not selected" >&2
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
DEPENDS:=$(call PKG_FIXUP_DEPENDS,$(1),$(DEPENDS))
|
|
IDEPEND_$(1):=$$(call filter_deps,$$(DEPENDS))
|
|
IDEPEND += $$(patsubst %,$(1):%,$$(IDEPEND_$(1)))
|
|
$(FixupDependencies)
|
|
$(FixupReverseDependencies)
|
|
|
|
$(eval $(call BuildIPKGVariable,$(1),conffiles))
|
|
$(eval $(call BuildIPKGVariable,$(1),preinst))
|
|
$(eval $(call BuildIPKGVariable,$(1),postinst))
|
|
$(eval $(call BuildIPKGVariable,$(1),prerm))
|
|
$(eval $(call BuildIPKGVariable,$(1),postrm))
|
|
|
|
$(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(STAMP_BUILT)
|
|
rm -rf $(STAGING_DIR_ROOT)/tmp-$(1)
|
|
mkdir -p $(STAGING_DIR_ROOT)/stamp $(STAGING_DIR_ROOT)/tmp-$(1)
|
|
$(call Package/$(1)/install,$(STAGING_DIR_ROOT)/tmp-$(1))
|
|
$(call Package/$(1)/install_lib,$(STAGING_DIR_ROOT)/tmp-$(1))
|
|
$(call locked,$(CP) $(STAGING_DIR_ROOT)/tmp-$(1)/. $(STAGING_DIR_ROOT)/,root-copy)
|
|
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))
|
|
mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL $(PKG_INFO_DIR)
|
|
$(call Package/$(1)/install,$$(IDIR_$(1)))
|
|
-find $$(IDIR_$(1)) -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| $(XARGS) rm -rf
|
|
@( \
|
|
find $$(IDIR_$(1)) -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $$$$NF }'; \
|
|
for file in $$(patsubst %,$(PKG_INFO_DIR)/%.provides,$$(IDEPEND_$(1))); do \
|
|
if [ -f "$$$$file" ]; then \
|
|
cat $$$$file; \
|
|
fi; \
|
|
done; $(Package/$(1)/extra_provides) \
|
|
) | sort -u > $(PKG_INFO_DIR)/$(1).provides
|
|
$(if $(PROVIDES),@for pkg in $(PROVIDES); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
|
|
$(CheckDependencies)
|
|
|
|
$(RSTRIP) $$(IDIR_$(1))
|
|
( \
|
|
echo "Package: $(1)"; \
|
|
echo "Version: $(VERSION)"; \
|
|
DEPENDS='$(EXTRA_DEPENDS)'; \
|
|
for depend in $$(filter-out @%,$$(IDEPEND_$(1))); do \
|
|
DEPENDS=$$$${DEPENDS:+$$$$DEPENDS, }$$$${depend##+}; \
|
|
done; \
|
|
[ -z "$$$$DEPENDS" ] || echo "Depends: $$$$DEPENDS"; \
|
|
$(if $(PROVIDES), echo "Provides: $(PROVIDES)"; ) \
|
|
echo "Source: $(SOURCE)"; \
|
|
$(if $(PKG_LICENSE), echo "License: $(PKG_LICENSE)"; ) \
|
|
$(if $(PKG_LICENSE_FILES), echo "LicenseFiles: $(PKG_LICENSE_FILES)"; ) \
|
|
echo "Section: $(SECTION)"; \
|
|
$(if $(filter hold,$(PKG_FLAGS)),echo "Status: unknown hold not-installed"; ) \
|
|
$(if $(filter essential,$(PKG_FLAGS)), echo "Essential: yes"; ) \
|
|
$(if $(MAINTAINER),echo "Maintainer: $(MAINTAINER)"; ) \
|
|
echo "Architecture: $(PKGARCH)"; \
|
|
echo "Installed-Size: 0"; \
|
|
echo -n "Description: "; $(SH_FUNC) getvar $(call shvar,Package/$(1)/description) | sed -e 's,^[[:space:]]*, ,g'; \
|
|
) > $$(IDIR_$(1))/CONTROL/control
|
|
chmod 644 $$(IDIR_$(1))/CONTROL/control
|
|
$(SH_FUNC) (cd $$(IDIR_$(1))/CONTROL; \
|
|
$($(1)_COMMANDS) \
|
|
)
|
|
|
|
ifneq ($$(KEEP_$(1)),)
|
|
@( \
|
|
keepfiles=""; \
|
|
for x in $$(KEEP_$(1)); do \
|
|
[ -f "$$(IDIR_$(1))/$$$$x" ] || keepfiles="$$$${keepfiles:+$$$$keepfiles }$$$$x"; \
|
|
done; \
|
|
[ -z "$$$$keepfiles" ] || { \
|
|
mkdir -p $$(IDIR_$(1))/lib/upgrade/keep.d; \
|
|
for x in $$$$keepfiles; do echo $$$$x >> $$(IDIR_$(1))/lib/upgrade/keep.d/$(1); done; \
|
|
}; \
|
|
)
|
|
endif
|
|
|
|
$(IPKG_BUILD) $$(IDIR_$(1)) $(PACKAGE_DIR)
|
|
@[ -f $$(IPKG_$(1)) ]
|
|
|
|
$(1)-clean:
|
|
rm -f $(PACKAGE_DIR)/$(1)_*
|
|
|
|
clean: $(1)-clean
|
|
|
|
endef
|
|
endif
|