diff --git a/include/package-pack.mk b/include/package-pack.mk index c989fdb116..980fe29f69 100644 --- a/include/package-pack.mk +++ b/include/package-pack.mk @@ -199,11 +199,49 @@ endif $(call locked,$(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(STAGING_DIR_ROOT)/,root-copy) touch $$@ - Package/$(1)/DEPENDS := $$(call mergelist,$$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep)))) + Package/$(1)/DEPENDS := $$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep))) ifneq ($$(EXTRA_DEPENDS),) - Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS)) + ifeq ($(CONFIG_USE_APK),) + Package/$(1)/DEPENDS := $$(call mergelist,$$(Package/$(1)/DEPENDS)) + Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS)) + else + _SEP := __COMMA_SEP__ + _SPACE := __SPACE_SEP__ + _DEPENDS := $$(Package/$(1)/DEPENDS) + _EXTRA_DEPENDS_ABI := + _DEP_ITEMS := $$(subst $$(_SEP),$$(space),$$(subst $$(space),$$(_SPACE),$$(subst $$(comma),$$(_SEP),$$(EXTRA_DEPENDS)))) + + $$(foreach dep,$$(_DEP_ITEMS), \ + $$(eval _CUR_DEP := $$(subst $$(_SPACE),$$(space),$$(strip $$(dep)))) \ + $$(eval _PKG_NAME := $$(word 1,$$(_CUR_DEP))) \ + $$(if $$(findstring $$(paren_left), $$(_PKG_NAME)), \ + $$(error "Unsupported extra dependency format: no space before '(': $$(_CUR_DEP)")) \ + ) \ + $$(eval _ABI_SUFFIX := $$(call GetABISuffix,$$(_PKG_NAME))) \ + $$(eval _PKG_NAME_ABI := $$(_PKG_NAME)$$(_ABI_SUFFIX)) \ + $$(eval _VERSION_CONSTRAINT := $$(word 2,$$(_CUR_DEP))) \ + $$(if $$(_VERSION_CONSTRAINT), \ + $$(eval _EXTRA_DEP := $$(_PKG_NAME_ABI) $$(_VERSION_CONSTRAINT)), \ + $$(error "Extra dependencies must have version constraints. $$(_PKG_NAME) seems to be unversioned.") \ + ) \ + $$(if $$(_EXTRA_DEPENDS_ABI), \ + $$(eval _EXTRA_DEPENDS_ABI := $$(_EXTRA_DEPENDS_ABI)$$(comma)$$(_EXTRA_DEP)), \ + $$(eval _EXTRA_DEPENDS_ABI := $$(_EXTRA_DEP)) \ + ) \ + $$(if $$(_DEPENDS), \ + $$(eval _DEPENDS := $$(filter-out $$(_PKG_NAME_ABI),$$(_DEPENDS))) \ + ) \ + ) + + _DEPENDS := $$(call mergelist,$$(_DEPENDS)) + Package/$(1)/DEPENDS := $$(_EXTRA_DEPENDS_ABI)$$(if $$(_DEPENDS),$$(comma) $$(_DEPENDS)) + endif + else + Package/$(1)/DEPENDS := $$(call mergelist,$$(Package/$(1)/DEPENDS)) endif + $$(info $(1) fused dependencies: $$(Package/$(1)/DEPENDS)) + $(_define) Package/$(1)/CONTROL Package: $(1)$$(ABIV_$(1)) Version: $(VERSION) @@ -320,7 +358,7 @@ else echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ echo 'export root="$$$${IPKG_INSTROOT}"'; \ - echo 'export pkgname="$(1)"'; \ + echo 'export pkgname="$(1)$$(ABIV_$(1))"'; \ echo "add_group_and_user"; \ echo "default_postinst"; \ [ ! -f $$(ADIR_$(1))/postinst-pkg ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/postinst-pkg"; \ @@ -345,34 +383,34 @@ else echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ echo 'export root="$$$${IPKG_INSTROOT}"'; \ - echo 'export pkgname="$(1)"'; \ + echo 'export pkgname="$(1)$$(ABIV_$(1))"'; \ echo "default_prerm"; \ [ ! -f $$(ADIR_$(1))/prerm-pkg ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/prerm-pkg"; \ ) > $$(ADIR_$(1))/pre-deinstall; [ ! -f $$(ADIR_$(1))/postrm ] || sed -zi 's/^\s*#!/#!/' "$$(ADIR_$(1))/postrm"; - if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1).rusers; fi; - if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1).alternatives; fi; - (cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" | sort > $(TMP_DIR)/$(1).list && mv $(TMP_DIR)/$(1).list $$(IDIR_$(1))/lib/apk/packages/$(1).list) + if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).rusers; fi; + if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).alternatives; fi; + (cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" | sort > $(TMP_DIR)/$(1).list && mv $(TMP_DIR)/$(1).list $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).list) # Move conffiles to IDIR and build conffiles_static with csums if [ -f $$(ADIR_$(1))/conffiles ]; then \ - mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \ - for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles); do \ + mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles; \ + for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles); do \ [ -f $$(IDIR_$(1))/$$$$file ] || continue; \ csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \ - echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \ + echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles_static; \ done; \ fi # Some package (base-files) manually append stuff to conffiles # Append stuff from it and delete the CONTROL directory since everything else should be migrated if [ -f $$(IDIR_$(1))/CONTROL/conffiles ]; then \ - echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \ + echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles; \ for file in $$$$(cat $$(IDIR_$(1))/CONTROL/conffiles); do \ [ -f $$(IDIR_$(1))/$$$$file ] || continue; \ csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \ - echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \ + echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles_static; \ done; \ rm -rf $$(IDIR_$(1))/CONTROL/conffiles; \ fi @@ -394,16 +432,13 @@ else --info "origin:$(SOURCE)" \ --info "url:$(URL)" \ --info "maintainer:$(MAINTAINER)" \ - --info "provides:$$(foreach prov,\ - $$(filter-out $(1)$$(ABIV_$(1)), \ - $(PROVIDES)$$(if $$(ABIV_$(1)), \ - $(1)=$(VERSION) $(foreach provide, \ - $(PROVIDES), \ - $(provide)$$(ABIV_$(1))=$(VERSION) \ - ) \ - ) \ - ), \ - $$(prov) )" \ + --info "provides:$$(if $$(ABIV_$(1)), \ + $(1) $(foreach provide,$(PROVIDES), $(provide)$$(ABIV_$(1))=$(VERSION)), \ + $(if $(ALTERNATIVES), \ + $(PROVIDES), \ + $(foreach provide,$(PROVIDES), $(provide)=$(VERSION)) \ + ) \ + )" \ $(if $(DEFAULT_VARIANT),--info "provider-priority:100",$(if $(PROVIDES),--info "provider-priority:1")) \ $$(APK_SCRIPTS_$(1)) \ --info "depends:$$(foreach depends,$$(subst $$(comma),$$(space),$$(subst $$(space),,$$(subst $$(paren_right),,$$(subst $$(paren_left),,$$(Package/$(1)/DEPENDS))))),$$(depends))" \