component: add SUBPACKAGES

This commit add SUBPACKAGES support to the framework.

Fix users of _LICENSE_DIR
Fix multi/dual license
Add annotation to packages about being a subpkg
Make do-depends aware of the subpackages
Add PKGBASE.subpkg variable
Fix actual-package-depends target
Fix dependencies in sub-packages
Implement LICENSE support
Fix PLIST_FILES.subpkg
Make DESCR.subpkg warning message shorter
Add SUBPACKES to the list of OPTIONS_HELPERS
Fix _strip_perms
Simplify METADIR as in the original patch
Fix _PLIST
Fix the case when there are no subpackages
Fix typo
Fix _PKGDIR initialization
Fix PLIST
Fix typo in RE
Fix METADIR
Fix type in PKGFILE
Fix [build|run]-depends-list targets
Initial import of the subpackage framework
This import is based on https://reviews.freebsd.org/D16457

PR:		275735
Differential Revision:	https://reviews.freebsd.org/D40549
This commit is contained in:
Luca Pizzamiglio 2024-01-01 22:53:32 +01:00
parent 39e841a05a
commit 47564762a3
6 changed files with 313 additions and 124 deletions

View file

@ -69,6 +69,12 @@ check_dep() {
d=${overlay}/${2} d=${overlay}/${2}
f= f=
case "${d}" in case "${d}" in
*~*/*) ;; # Ignore ~ in the path which would not be a subpkg
*~*)
d=${d%~*}
;;
esac
case "${d}" in
*@*/*) ;; # Ignore @ in the path which would not be a flavor *@*/*) ;; # Ignore @ in the path which would not be a flavor
*@*) *@*)
f=${d##*@} f=${d##*@}

View file

@ -21,15 +21,22 @@ install_depends()
{ {
origin=$1 origin=$1
target=$2 target=$2
depends_args=$3 subpkg=$3
depends_args=$4
if [ -z "${dp_USE_PACKAGE_DEPENDS}" -a -z "${dp_USE_PACKAGE_DEPENDS_ONLY}" ]; then if [ -z "${dp_USE_PACKAGE_DEPENDS}" -a -z "${dp_USE_PACKAGE_DEPENDS_ONLY}" ]; then
MAKEFLAGS="${dp_MAKEFLAGS}" ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args} MAKEFLAGS="${dp_MAKEFLAGS}" ${dp_MAKE} -C ${origin} -DINSTALLS_DEPENDS ${target} ${depends_args}
return 0 return 0
fi fi
port_var_fetch "${origin}" "${depends_args}" \ if [ -z "${subpkg}" ]; then
PKGFILE pkgfile \ port_var_fetch "${origin}" "${depends_args}" \
PKGBASE pkgbase PKGFILE pkgfile \
PKGBASE pkgbase
else
port_var_fetch "${origin}" "${depends_args}" \
PKGFILE.${subpkg} pkgfile \
PKGBASE.${subpkg} pkgbase
fi
if [ -r "${pkgfile}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then if [ -r "${pkgfile}" -a "${target}" = "${dp_DEPENDS_TARGET}" ]; then
echo "===> Installing existing package ${pkgfile}" echo "===> Installing existing package ${pkgfile}"
@ -123,12 +130,18 @@ for _line in ${dp_RAWDEPENDS} ; do
continue continue
fi fi
subpkg=
case "${origin}" in case "${origin}" in
*@*/*) ;; # Ignore @ in the path which would not be a flavor *@*/*) ;; # Ignore @ in the path which would not be a flavor
*@*) *@*)
export FLAVOR="${origin##*@}" export FLAVOR="${origin##*@}"
origin=${origin%@*} origin=${origin%@*}
;; ;;
*~*/*) ;; # Ignore ~ in the path which would not be a subpackage
*~*)
subpkg="${origin##*~}"
origin=${origin%~*}
;;
esac esac
case "${origin}" in case "${origin}" in
@ -194,7 +207,7 @@ for _line in ${dp_RAWDEPENDS} ; do
fi fi
# Now actually install the dependencies # Now actually install the dependencies
install_depends "${origin}" "${target}" "${depends_args}" install_depends "${origin}" "${target}" "${subpkg}" "${depends_args}"
# Recheck if the installed dependency validates the pattern except for /nonexistent # Recheck if the installed dependency validates the pattern except for /nonexistent
[ "${fct}" = "false" ] || ${fct} "${pattern}" [ "${fct}" = "false" ] || ${fct} "${pattern}"
echo "===> Returning to build of ${dp_PKGNAME}" echo "===> Returning to build of ${dp_PKGNAME}"

View file

@ -6,7 +6,8 @@
# Strip (owner,group,perm) from keywords # Strip (owner,group,perm) from keywords
_strip_perms() { _strip_perms() {
sed -Ee 's/^@\([^)]*\)[[:space:]]+//' \ sed -Ee 's/^@\([^)]*\)[[:space:]]+//' \
-e 's/^(@[[:alpha:]]+)\([^)]*\)[[:space:]]+/\1 /' -e 's/^(@[[:alpha:]]+)\([^)]*\)[[:space:]]+/\1 /' \
-e 's/^@@[[:alnum:]]+@@//'
} }
# Expand TMPPLIST to absolute paths, splitting files and dirs into separate # Expand TMPPLIST to absolute paths, splitting files and dirs into separate

View file

@ -153,10 +153,13 @@ _LICENSE_LIST_PORT_VARS= PERMS NAME GROUPS
# few more targets only. # few more targets only.
_LICENSE_DIR?= ${PREFIX}/share/licenses/${PKGNAME} _LICENSE_DIR?= ${PREFIX}/share/licenses/${PKGNAME}
. for sp in ${_PKGS}
_LICENSE_DIR.${sp}?= ${PREFIX}/share/licenses/${PKGNAME${_SP.${sp}}}
_LICENSE_CATALOG.${sp}?= ${_LICENSE_DIR.${sp}}/catalog.mk
_LICENSE_REPORT.${sp}?= ${_LICENSE_DIR.${sp}}/LICENSE
. endfor
_LICENSE_STORE?= ${PORTSDIR}/Templates/Licenses _LICENSE_STORE?= ${PORTSDIR}/Templates/Licenses
_LICENSE_CATALOG?= ${_LICENSE_DIR}/catalog.mk
_LICENSE_CATALOG_TMP?= ${WRKDIR}/.license-catalog.mk _LICENSE_CATALOG_TMP?= ${WRKDIR}/.license-catalog.mk
_LICENSE_REPORT?= ${_LICENSE_DIR}/LICENSE
_LICENSE_REPORT_TMP?= ${WRKDIR}/.license-report _LICENSE_REPORT_TMP?= ${WRKDIR}/.license-report
_LICENSE_COOKIE?= ${WRKDIR}/.license_done.${PORTNAME}.${PREFIX:S/\//_/g} _LICENSE_COOKIE?= ${WRKDIR}/.license_done.${PORTNAME}.${PREFIX:S/\//_/g}
@ -771,30 +774,47 @@ ${_LICENSE_COOKIE}:
# Package list entries, and installation # Package list entries, and installation
. if !defined(NO_LICENSES_INSTALL) . if !defined(NO_LICENSES_INSTALL)
PLIST_FILES+= ${_LICENSE_CATALOG} \ . for sp in ${_PKGS}
${_LICENSE_REPORT} . if ${sp} == ${PKGBASE}
PLIST_FILES+= ${_LICENSE_CATALOG.${sp}} \
. if ${_LICENSE_COMB} == "single" ${_LICENSE_REPORT.${sp}}
PLIST_FILES+= ${_LICENSE_DIR}/${_LICENSE} . if ${_LICENSE_COMB} == "single"
. else PLIST_FILES+= ${_LICENSE_DIR.${sp}}/${_LICENSE}
. for lic in ${_LICENSE} . else
. if defined(_LICENSE_FILE_${lic}) . for lic in ${_LICENSE}
PLIST_FILES+= ${_LICENSE_DIR}/${lic} . if defined(_LICENSE_FILE_${lic})
PLIST_FILES+= ${_LICENSE_DIR.${sp}}/${lic}
. endif
. endfor
. endif . endif
. endfor . else
. endif PLIST_FILES${_SP.${sp}}+= ${_LICENSE_CATALOG.${sp}} \
${_LICENSE_REPORT.${sp}}
. if ${_LICENSE_COMB} == "single"
PLIST_FILES${_SP.${sp}}+= ${_LICENSE_DIR.${sp}}/${_LICENSE}
. else
. for lic in ${_LICENSE}
. if defined(_LICENSE_FILE_${lic})
PLIST_FILES${_SP.${sp}}+= ${_LICENSE_DIR.${sp}}/${lic}
. endif
. endfor
. endif
. endif
install-license:
@${MKDIR} ${STAGEDIR}${_LICENSE_DIR} install-license: install-license.${sp}
@${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${STAGEDIR}${_LICENSE_CATALOG} install-license.${sp}:
@${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${STAGEDIR}${_LICENSE_REPORT} @${MKDIR} ${STAGEDIR}${_LICENSE_DIR.${sp}}
. if ${_LICENSE_COMB} == "single" @${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${STAGEDIR}${_LICENSE_CATALOG.${sp}}
@${INSTALL_DATA} ${_LICENSE_FILE} ${STAGEDIR}${_LICENSE_DIR}/${_LICENSE} @${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${STAGEDIR}${_LICENSE_REPORT.${sp}}
. else . if ${_LICENSE_COMB} == "single"
. for lic in ${_LICENSE} @${INSTALL_DATA} ${_LICENSE_FILE} ${STAGEDIR}${_LICENSE_DIR.${sp}}/${_LICENSE}
@${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${STAGEDIR}${_LICENSE_DIR}/${lic} . else
. endfor . for lic in ${_LICENSE}
. endif @${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${STAGEDIR}${_LICENSE_DIR.${sp}}/${lic}
. endfor
. endif
. endfor
. endif . endif
. else # !LICENSE . else # !LICENSE

View file

@ -197,8 +197,8 @@ _ALL_OPTIONS_HELPERS= ${_OPTIONS_DEPENDS:S/$/_DEPENDS/} \
CONFIGURE_ENABLE CONFIGURE_OFF CONFIGURE_ON \ CONFIGURE_ENABLE CONFIGURE_OFF CONFIGURE_ON \
CONFIGURE_WITH IMPLIES MESON_ARGS MESON_DISABLED \ CONFIGURE_WITH IMPLIES MESON_ARGS MESON_DISABLED \
MESON_ENABLED MESON_FALSE MESON_OFF MESON_ON MESON_TRUE \ MESON_ENABLED MESON_FALSE MESON_OFF MESON_ON MESON_TRUE \
PREVENTS PREVENTS_MSG QMAKE_OFF QMAKE_ON USE USE_OFF \ PREVENTS PREVENTS_MSG QMAKE_OFF QMAKE_ON \
VARS VARS_OFF SUBPACKAGES SUBPACKAGES_OFF USE USE_OFF VARS VARS_OFF
# The format here is target_family:priority:target-type # The format here is target_family:priority:target-type
_OPTIONS_TARGETS= fetch:300:pre fetch:500:do fetch:700:post \ _OPTIONS_TARGETS= fetch:300:pre fetch:500:do fetch:700:post \
@ -455,6 +455,19 @@ ALL_OPTIONS= ${OPTIONS_DEFINE}
_OPTIONS_${target}?= _OPTIONS_${target}?=
. endfor . endfor
# Handle subpackages before the rest to be able to handle options helpers
# with subpackages
. for opt in ${_REALLY_ALL_POSSIBLE_OPTIONS}
. if ${PORT_OPTIONS:M${opt}}
. if defined(${opt}_SUBPACKAGES)
SUBPACKAGES+= ${${opt}_SUBPACKAGES}
. endif
. else
. if defined(${opt}_SUBPACKAGES_OFF)
SUBPACKAGES+= ${${opt}_SUBPACKAGES_OFF}
. endif
. endif
. endfor
. for opt in ${_REALLY_ALL_POSSIBLE_OPTIONS} . for opt in ${_REALLY_ALL_POSSIBLE_OPTIONS}
# PLIST_SUB # PLIST_SUB
PLIST_SUB?= PLIST_SUB?=
@ -540,6 +553,11 @@ ${flags}+= ${${opt}_${flags}}
. if defined(${opt}_${deptype}_DEPENDS) . if defined(${opt}_${deptype}_DEPENDS)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS} ${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS}
. endif . endif
. for p in ${SUBPACKAGES}
. if defined(${opt}_${deptype}_DEPENDS.${p})
${deptype}_DEPENDS.{p}+= ${${opt}_${deptype}_DEPENDS.${p}}
. endif
. endfor
. endfor . endfor
. for target in ${_OPTIONS_TARGETS} . for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//} _target= ${target:C/:.*//}
@ -611,6 +629,11 @@ ${flags}+= ${${opt}_${flags}_OFF}
. if defined(${opt}_${deptype}_DEPENDS_OFF) . if defined(${opt}_${deptype}_DEPENDS_OFF)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS_OFF} ${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS_OFF}
. endif . endif
. for p in ${SUBPACKAGES}
. if defined(${opt}_${deptype}_DEPENDS_OFF.${p})
${deptype}_DEPENDS.{p}+= ${${opt}_${deptype}_DEPENDS_OFF.${p}}
. endif
. endfor
. endfor . endfor
. for target in ${_OPTIONS_TARGETS} . for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//} _target= ${target:C/:.*//}

View file

@ -2196,6 +2196,7 @@ PKGMESSAGE?= ${PKGDIR}/pkg-message
_PKGMESSAGES+= ${PKGMESSAGE} _PKGMESSAGES+= ${PKGMESSAGE}
TMPPLIST?= ${WRKDIR}/.PLIST.mktmp TMPPLIST?= ${WRKDIR}/.PLIST.mktmp
_PLIST?= ${WRKDIR}/.PLIST
# backward compatibility for users # backward compatibility for users
. if defined(_PKG_TRANSITIONING_TO_NEW_EXT) . if defined(_PKG_TRANSITIONING_TO_NEW_EXT)
@ -2229,11 +2230,6 @@ ALL_TARGET?= all
INSTALL_TARGET?= install INSTALL_TARGET?= install
INSTALL_TARGET+= ${LATE_INSTALL_ARGS} INSTALL_TARGET+= ${LATE_INSTALL_ARGS}
# Integrate with the license auditing framework
. if !defined (DISABLE_LICENSES)
.include "${PORTSDIR}/Mk/bsd.licenses.mk"
. endif
# Popular master sites # Popular master sites
.include "${PORTSDIR}/Mk/bsd.sites.mk" .include "${PORTSDIR}/Mk/bsd.sites.mk"
@ -2607,14 +2603,6 @@ check-categories:
PKGREPOSITORYSUBDIR?= All PKGREPOSITORYSUBDIR?= All
PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR} PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR}
. if exists(${PACKAGES})
PACKAGES:= ${PACKAGES:S/:/\:/g}
_HAVE_PACKAGES= yes
PKGFILE?= ${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
. else
PKGFILE?= ${.CURDIR}/${PKGNAME}${PKG_SUFX}
. endif
WRKDIR_PKGFILE= ${WRKDIR}/pkg/${PKGNAME}${PKG_SUFX}
# The "latest version" link -- ${PKGNAME} minus everthing after the last '-' # The "latest version" link -- ${PKGNAME} minus everthing after the last '-'
PKGLATESTREPOSITORY?= ${PACKAGES}/Latest PKGLATESTREPOSITORY?= ${PACKAGES}/Latest
@ -2627,6 +2615,75 @@ PKGOLDLATESTFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}
PKGOLDSIGFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}.sig PKGOLDSIGFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}.sig
. endif . endif
_PKGS= ${PKGBASE}
PORTS_FEATURES+= SUBPACKAGES
. if defined(SUBPACKAGES)
. if ${SUBPACKAGES:Mmain}
DEV_ERROR+= "SUBPACKAGES cannot contain 'main', it is a reserved value"
. endif
. for sp in ${SUBPACKAGES}
. if ${sp:C/[[:lower:][:digit:]_]//g}
_BAD_SUBPACKAGES_NAMES+= ${sp}
. endif
. endfor
. if !empty(_BAD_SUBPACKAGES_NAMES)
DEV_ERROR+= "SUBPACKAGES cannot subpackages that are not all [a-z0-9_]: ${_BAD_SUBPACKAGES_NAMES}"
. endif
. endif
. for sp in ${SUBPACKAGES}
# If a FRAMEWORK generated package needs to override its subpackage package name
# it can do it with this mechanism
. if !defined(_PKGS.${sp})
_PKGS.${sp}= ${PKGBASE}-${sp}
. endif
_PKGS+= ${_PKGS.${sp}}
PKGBASE.${sp}= ${_PKGS.${sp}}
_SP.${_PKGS.${sp}}=.${sp}
. endfor
. if !defined(_DID_SUBPACKAGES_HELPERS)
_DID_SUBPACKAGES_HELPERS= yes
_SUBPACKAGE_HELPERS_FILE= DESCR PKGINSTALL PKGDEINSTALL PKGMESSAGE \
PKGPREINSTALL PKGPOSTINSTALL PKGPREDEINSTALL PKGPOSTDEINSTALL \
PKGPREUPGRADE PKGPOSTUPGRADE PKGUPGRADE
. for sp in ${SUBPACKAGES}
# These overwrite the current value
. for v in ${_SUBPACKAGE_HELPERS_FILE}
${v}.${sp}?= ${$v}.${sp}
. endfor
_PKGMESSAGES.${sp}= ${PKGMESSAGE}.${sp}
. if !exists(${DESCR.${sp}})
DESCR.${sp}= ${DESCR}
DEV_WARNING+= "DESCR.${sp} needs to point to an existing file."
. endif
COMMENT.${sp}?= ${COMMENT} (subpkg: ${sp})
. endfor
. endif
. if exists(${PACKAGES})
PACKAGES:= ${PACKAGES:S/:/\:/g}
_HAVE_PACKAGES= yes
_PKGDIR= ${PKGREPOSITORY}
. else
_PKGDIR= ${.CURDIR}
. endif
. for sp in ${_PKGS}
PKGNAME${_SP.${sp}}= ${sp}-${PKGVERSION}
PKGNAMES+= ${PKGNAME${_SP.${sp}}}
PKGFILE${_SP.${sp}}= ${_PKGDIR}/${PKGNAME${_SP.${sp}}}${PKG_SUFX}
. endfor
_EXTRA_PACKAGE_TARGET_DEP+= ${_PKGDIR}
. for sp in ${_PKGS}
WRKDIR_PKGFILE${_SP.${sp}}= ${WRKDIR}/pkg/${PKGNAME${_SP.${sp}}}${PKG_SUFX}
. endfor
# Integrate with the license auditing framework
. if !defined (DISABLE_LICENSES)
.include "${PORTSDIR}/Mk/bsd.licenses.mk"
. endif
CONFIGURE_SCRIPT?= configure CONFIGURE_SCRIPT?= configure
CONFIGURE_CMD?= ./${CONFIGURE_SCRIPT} CONFIGURE_CMD?= ./${CONFIGURE_SCRIPT}
CONFIGURE_TARGET?= ${HOSTARCH}-portbld-${OPSYS:tl}${OSREL} CONFIGURE_TARGET?= ${HOSTARCH}-portbld-${OPSYS:tl}${OSREL}
@ -3402,10 +3459,6 @@ do-test:
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGFILE} _EXTRA_PACKAGE_TARGET_DEP+= ${PKGFILE}
_PORTS_DIRECTORIES+= ${PKGREPOSITORY} _PORTS_DIRECTORIES+= ${PKGREPOSITORY}
${PKGFILE}: ${WRKDIR_PKGFILE} ${PKGREPOSITORY}
@${LN} -f ${WRKDIR_PKGFILE} ${PKGFILE} 2>/dev/null \
|| ${CP} -f ${WRKDIR_PKGFILE} ${PKGFILE}
. if ${PKGORIGIN} == "ports-mgmt/pkg" || ${PKGORIGIN} == "ports-mgmt/pkg-devel" . if ${PKGORIGIN} == "ports-mgmt/pkg" || ${PKGORIGIN} == "ports-mgmt/pkg-devel"
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGLATESTREPOSITORY} _EXTRA_PACKAGE_TARGET_DEP+= ${PKGLATESTREPOSITORY}
_PORTS_DIRECTORIES+= ${PKGLATESTREPOSITORY} _PORTS_DIRECTORIES+= ${PKGLATESTREPOSITORY}
@ -3431,14 +3484,29 @@ ${PKGOLDSIGFILE}: ${PKGLATESTREPOSITORY}
. endif . endif
# from here this will become a loop for subpackages # from here this will become a loop for subpackages
${WRKDIR_PKGFILE}: ${TMPPLIST} create-manifest ${WRKDIR}/pkg . for sp in ${_PKGS}
@if ! ${SETENV} ${PKG_ENV} ${PKG_CREATE} ${PKG_CREATE_ARGS} -m ${METADIR} -p ${TMPPLIST} -o ${WRKDIR}/pkg ${PKGNAME}; then \ ${_PLIST}.${sp}: ${TMPPLIST}
@if [ "${PKGBASE}" = "${sp}" ]; then \
${SED} "/^@comment /d; /@@/d" ${TMPPLIST} > ${.TARGET} ; \
else \
${SED} -n "s/@@${sp:S/${PKGBASE}-//}@@//p" ${TMPPLIST} > ${.TARGET} ; \
fi
${WRKDIR_PKGFILE${_SP.${sp}}}: ${_PLIST}.${sp} create-manifest ${WRKDIR}/pkg
@echo "===> Building ${PKGNAME${_SP.${sp}}}"
@if ! ${SETENV} ${PKG_ENV} ${PKG_CREATE} ${PKG_CREATE_ARGS} -m ${METADIR}.${sp} -p ${_PLIST}.${sp} -o ${WRKDIR}/pkg ${PKGNAME}; then \
cd ${.CURDIR} && eval ${MAKE} delete-package >/dev/null; \ cd ${.CURDIR} && eval ${MAKE} delete-package >/dev/null; \
exit 1; \ exit 1; \
fi fi
#
# Temporary will be later dynamically added per subpackages _EXTRA_PACKAGE_TARGET_DEP+= ${WRKDIR_PKGFILE${_SP.${sp}}}
_EXTRA_PACKAGE_TARGET_DEP+= ${WRKDIR_PKGFILE}
${PKGFILE${_SP.${sp}}}: ${WRKDIR_PKGFILE${_SP.${sp}}}
@${LN} -f ${WRKDIR_PKGFILE${_SP.${sp}}} ${PKGFILE${_SP.${sp}}} 2>/dev/null \
|| ${CP} -f ${WRKDIR_PKGFILE${_SP.${sp}}} ${PKGFILE${_SP.${sp}}}
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGFILE${_SP.${sp}}}
. endfor
# This will be the end of the loop # This will be the end of the loop
. if !target(do-package) . if !target(do-package)
@ -3455,14 +3523,18 @@ do-package: ${_EXTRA_PACKAGE_TARGET_DEP} ${WRKDIR}/pkg
. if !target(delete-package) . if !target(delete-package)
delete-package: delete-package:
@${ECHO_MSG} "===> Deleting package for ${PKGNAME}" . for sp in ${_PKGS}
@${ECHO_MSG} "===> Deleting package for ${sp}"
# When staging, the package may only be in the workdir if not root # When staging, the package may only be in the workdir if not root
@${RM} ${PKGFILE} ${WRKDIR_PKGFILE} 2>/dev/null || : @${RM} ${PKGFILE${_SP.${sp}}} ${WRKDIR_PKGFILE${_SP.${sp}}} 2>/dev/null || :
. endfor
. endif . endif
. if !target(delete-package-list) . if !target(delete-package-list)
delete-package-list: delete-package-list:
@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} ${PKGFILE})" . for sp in ${_PKGS}
@${ECHO_CMD} "[ -f ${PKGFILE${_SP.${sp}}} ] && (${ECHO_CMD} deleting ${PKGFILE${_SP.${sp}}}; ${RM} ${PKGFILE${_SP.${sp}}})"
. endfor
. endif . endif
# Used by scripts and users to install a package from local repository. # Used by scripts and users to install a package from local repository.
@ -3474,13 +3546,16 @@ _INSTALL_PKG_ARGS= -f
. if defined(INSTALLS_DEPENDS) . if defined(INSTALLS_DEPENDS)
_INSTALL_PKG_ARGS+= -A _INSTALL_PKG_ARGS+= -A
. endif . endif
install-package: . for sp in ${_PKGS}
@if [ -f "${WRKDIR}/pkg/${PKGNAME}${PKG_SUFX}" ]; then \ install-package: install-package.${sp}
_pkgfile="${WRKDIR_PKGFILE}"; \ install-package.${sp}:
@if [ -f "${WRKDIR_PKGFILE${_SP.${sp}}}" ]; then \
_pkgfile="${WRKDIR_PKGFILE${_SP.${sp}}}"; \
else \ else \
_pkgfile="${PKGFILE}"; \ _pkgfile="${PKGFILE${_SP.${sp}}}"; \
fi; \ fi; \
${PKG_ADD} ${_INSTALL_PKG_ARGS} $${_pkgfile} ${PKG_ADD} ${_INSTALL_PKG_ARGS} $${_pkgfile}
. endfor
. endif . endif
# Utility targets follow # Utility targets follow
@ -3673,7 +3748,7 @@ install-message:
test-message: test-message:
@${ECHO_MSG} "===> Testing for ${PKGNAME}" @${ECHO_MSG} "===> Testing for ${PKGNAME}"
package-message: package-message:
@${ECHO_MSG} "===> Building package for ${PKGNAME}" @${ECHO_MSG} "===> Building packages for ${PKGNAME}"
# Empty pre-* and post-* targets # Empty pre-* and post-* targets
@ -3743,14 +3818,16 @@ deinstall:
${SU_CMD} "${MAKE} ${.TARGET}" ${SU_CMD} "${MAKE} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials" @${ECHO_MSG} "===> Returning to user credentials"
. else . else
@${ECHO_MSG} "===> Deinstalling for ${PKGBASE}" . for _sp in ${_PKGS}
@if ${PKG_INFO} -e ${PKGBASE}; then \ @${ECHO_MSG} "===> Deinstalling for ${_sp}"
p=`${PKG_INFO} -q -O ${PKGBASE}`; \ @if ${PKG_INFO} -e ${_sp}; then \
p=`${PKG_INFO} -q -O ${_sp}`; \
${ECHO_MSG} "===> Deinstalling $${p}"; \ ${ECHO_MSG} "===> Deinstalling $${p}"; \
${PKG_DELETE} -f ${PKGBASE} ; \ ${PKG_DELETE} -f ${_sp} ; \
else \ else \
${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \ ${ECHO_MSG} "===> ${_sp} not installed, skipping"; \
fi fi
. endfor
@${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE} @${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
. endif . endif
. endif . endif
@ -3976,7 +4053,7 @@ package-name:
repackage: pre-repackage package repackage: pre-repackage package
pre-repackage: pre-repackage:
@${RM} ${PACKAGE_COOKIE} @${RM} ${PACKAGE_COOKIE} ${TMPPLIST}*
. endif . endif
# Build a package but don't check the cookie for installation, also don't # Build a package but don't check the cookie for installation, also don't
@ -3994,10 +4071,13 @@ package-noinstall: package
depends: pkg-depends extract-depends patch-depends lib-depends fetch-depends build-depends run-depends depends: pkg-depends extract-depends patch-depends lib-depends fetch-depends build-depends run-depends
. for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN TEST . for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN TEST
. for sp in ${_PKGS}
${deptype}_DEPENDS_ALL+= ${${deptype}_DEPENDS${_SP.${sp}}}
. endfor
${deptype:tl}-depends: ${deptype:tl}-depends:
. if defined(${deptype}_DEPENDS) && !defined(NO_DEPENDS) . if !empty(${deptype}_DEPENDS_ALL) && !defined(NO_DEPENDS)
@${SETENV} \ @${SETENV} \
dp_RAWDEPENDS="${${deptype}_DEPENDS}" \ dp_RAWDEPENDS="${${deptype}_DEPENDS_ALL}" \
dp_DEPTYPE="${deptype}_DEPENDS" \ dp_DEPTYPE="${deptype}_DEPENDS" \
dp_DEPENDS_TARGET="${DEPENDS_TARGET}" \ dp_DEPENDS_TARGET="${DEPENDS_TARGET}" \
dp_DEPENDS_PRECLEAN="${DEPENDS_PRECLEAN}" \ dp_DEPENDS_PRECLEAN="${DEPENDS_PRECLEAN}" \
@ -4026,7 +4106,7 @@ ${deptype:tl}-depends:
# Dependency lists: both build and runtime, recursive. Print out directory names. # Dependency lists: both build and runtime, recursive. Print out directory names.
_UNIFIED_DEPENDS=${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS} ${TEST_DEPENDS} _UNIFIED_DEPENDS=${PKG_DEPENDS_ALL} ${EXTRACT_DEPENDS_ALL} ${PATCH_DEPENDS_ALL} ${FETCH_DEPENDS_ALL} ${BUILD_DEPENDS_ALL} ${LIB_DEPENDS_ALL} ${RUN_DEPENDS_ALL} ${TEST_DEPENDS_ALL}
_DEPEND_SPECIALS= ${_UNIFIED_DEPENDS:M*\:*\:*:C,^[^:]*:([^:]*):.*$,\1,} _DEPEND_SPECIALS= ${_UNIFIED_DEPENDS:M*\:*\:*:C,^[^:]*:([^:]*):.*$,\1,}
. for d in ${_UNIFIED_DEPENDS:M*\:/*} . for d in ${_UNIFIED_DEPENDS:M*\:/*}
@ -4079,9 +4159,9 @@ ALL-DEPENDS-LIST= ${DEPENDS-LIST} -r ${_UNIFIED_DEPENDS:Q}
ALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:Q} ALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:Q}
DEINSTALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:N${PKG_DEPENDS}:Q} DEINSTALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:N${PKG_DEPENDS}:Q}
MISSING-DEPENDS-LIST= ${DEPENDS-LIST} -m ${_UNIFIED_DEPENDS:Q} MISSING-DEPENDS-LIST= ${DEPENDS-LIST} -m ${_UNIFIED_DEPENDS:Q}
BUILD-DEPENDS-LIST= ${DEPENDS-LIST} "${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}" BUILD-DEPENDS-LIST= ${DEPENDS-LIST} "${PKG_DEPENDS_ALL} ${EXTRACT_DEPENDS_ALL} ${PATCH_DEPENDS_ALL} ${FETCH_DEPENDS_ALL} ${BUILD_DEPENDS_ALL} ${LIB_DEPENDS_ALL}"
RUN-DEPENDS-LIST= ${DEPENDS-LIST} "${LIB_DEPENDS} ${RUN_DEPENDS}" RUN-DEPENDS-LIST= ${DEPENDS-LIST} "${LIB_DEPENDS_ALL} ${RUN_DEPENDS_ALL}"
TEST-DEPENDS-LIST= ${DEPENDS-LIST} ${TEST_DEPENDS:Q} TEST-DEPENDS-LIST= ${DEPENDS-LIST} ${TEST_DEPENDS_ALL:Q}
CLEAN-DEPENDS-LIST= ${DEPENDS-LIST} -wr ${_UNIFIED_DEPENDS:Q} CLEAN-DEPENDS-LIST= ${DEPENDS-LIST} -wr ${_UNIFIED_DEPENDS:Q}
CLEAN-DEPENDS-LIMITED-LIST= ${DEPENDS-LIST} -w ${_UNIFIED_DEPENDS:Q} CLEAN-DEPENDS-LIMITED-LIST= ${DEPENDS-LIST} -w ${_UNIFIED_DEPENDS:Q}
@ -4170,7 +4250,7 @@ fetch-required: fetch
@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies" @${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
. for deptype in PKG EXTRACT PATCH FETCH BUILD RUN . for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
. if defined(${deptype}_DEPENDS) . if defined(${deptype}_DEPENDS)
@targ=fetch; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST} @targ=fetch; deps="${${deptype}_DEPENDS_ALL}"; ${FETCH_LIST}
. endif . endif
. endfor . endfor
. endif . endif
@ -4182,7 +4262,7 @@ fetch-required-list: fetch-list
. if !defined(NO_DEPENDS) . if !defined(NO_DEPENDS)
. for deptype in PKG EXTRACT PATCH FETCH BUILD RUN . for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
. if defined(${deptype}_DEPENDS) . if defined(${deptype}_DEPENDS)
@targ=fetch-list; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST} @targ=fetch-list; deps="${${deptype}_DEPENDS_ALL}"; ${FETCH_LIST}
. endif . endif
. endfor . endfor
. endif . endif
@ -4221,7 +4301,7 @@ package-depends-list:
@${PACKAGE-DEPENDS-LIST} @${PACKAGE-DEPENDS-LIST}
. endif . endif
_LIB_RUN_DEPENDS= ${LIB_DEPENDS} ${RUN_DEPENDS} _LIB_RUN_DEPENDS= ${LIB_DEPENDS_ALL} ${RUN_DEPENDS_ALL}
PACKAGE-DEPENDS-LIST?= \ PACKAGE-DEPENDS-LIST?= \
if [ "${CHILD_DEPENDS}" ]; then \ if [ "${CHILD_DEPENDS}" ]; then \
installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null || \ installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null || \
@ -4240,6 +4320,11 @@ PACKAGE-DEPENDS-LIST?= \
for dir in ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}; do \ for dir in ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}; do \
unset flavor; \ unset flavor; \
case $${dir} in \ case $${dir} in \
*~*) \
dir=$${dir%~*}; \
;; \
esac; \
case $${dir} in \
*@*) \ *@*) \
flavor=$${dir\#*@}; \ flavor=$${dir\#*@}; \
dir=$${dir%@*}; \ dir=$${dir%@*}; \
@ -4268,61 +4353,85 @@ PACKAGE-DEPENDS-LIST?= \
fi; \ fi; \
done done
ACTUAL-PACKAGE-DEPENDS?= \ # FIXME: SELF_DEPENDS can only be used to depend on sub packages whose
# package name has not been overrided by the framework, otherwize the
# assumption made below that the package name is "PKGBASE-$$self" is broken.
. for sp in ${_PKGS}
ACTUAL-PACKAGE-DEPENDS${_SP.${sp}}?= \
depfiles="" ; \ depfiles="" ; \
for lib in ${LIB_DEPENDS:C/\:.*//}; do \ for lib in ${LIB_DEPENDS${_SP.${sp}}:C/\:.*//}; do \
depfiles="$$depfiles `${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}`" ; \ depfiles="$$depfiles `${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}`" ; \
done ; \ done ; \
${SETENV} PKG_BIN="${PKG_BIN}" ${SH} ${SCRIPTSDIR}/actual-package-depends.sh $${depfiles} ${RUN_DEPENDS:C/(.*)\:.*/"\1"/} for self in ${SELF_DEPENDS${_SP.${sp}}}; do \
if [ "$$self" = "main" ]; then \
printf "\"%s\": {origin: \"%s\", version: \"%s\"}\n" ${PKGBASE} ${PKGORIGIN} ${PKGVERSION}; \
else \
printf "\"%s-%s\": {origin: \"%s\", version: \"%s\"}\n" ${PKGBASE} $$self ${PKGORIGIN} ${PKGVERSION}; \
fi ; \
done ; \
${SETENV} PKG_BIN="${PKG_BIN}" ${SH} ${SCRIPTSDIR}/actual-package-depends.sh $${depfiles} ${RUN_DEPENDS${_SP.${sp}}:C/(.*)\:.*/"\1"/}
. endfor
PKG_NOTES_ENV?= PKG_NOTES_ENV?=
. for note in ${PKG_NOTES} . for note in ${PKG_NOTES}
PKG_NOTES_ENV+= dp_PKG_NOTE_${note}=${PKG_NOTE_${note}:Q} PKG_NOTES_ENV+= dp_PKG_NOTE_${note}=${PKG_NOTE_${note}:Q}
. endfor . endfor
create-manifest: . for sp in ${_PKGS}
PKG_NOTES.${sp}= ${PKG_NOTES}
PKG_NOTES_ENV.${sp}= ${PKG_NOTES_ENV}
. if ${sp} != ${PKGBASE}
PKG_NOTES.${sp}+= subpackage
PKG_NOTES_ENV.${sp}+= dp_PKG_NOTE_subpackage=${_SP.${sp}:S/^.//1}
. endif
create-manifest: create-manifest.${sp}
create-manifest.${sp}:
@${SETENV} \ @${SETENV} \
dp_SCRIPTSDIR='${SCRIPTSDIR}' \ dp_SCRIPTSDIR='${SCRIPTSDIR}' \
dp_ACTUAL_PACKAGE_DEPENDS='${ACTUAL-PACKAGE-DEPENDS}' \ dp_ACTUAL_PACKAGE_DEPENDS='${ACTUAL-PACKAGE-DEPENDS${_SP.${sp}}}' \
dp_CATEGORIES='${CATEGORIES:u:S/$/,/}' \ dp_CATEGORIES='${CATEGORIES:u:S/$/,/}' \
dp_COMMENT=${COMMENT:Q} \ dp_COMMENT=${COMMENT${_SP.${sp}}:Q} \
dp_COMPLETE_OPTIONS_LIST='${COMPLETE_OPTIONS_LIST}' \ dp_COMPLETE_OPTIONS_LIST='${COMPLETE_OPTIONS_LIST}' \
dp_DEPRECATED=${DEPRECATED:Q} \ dp_DEPRECATED=${DEPRECATED:Q} \
dp_DESCR='${DESCR}' \ dp_DESCR='${DESCR${_SP.${sp}}}' \
dp_EXPIRATION_DATE='${EXPIRATION_DATE}' \ dp_EXPIRATION_DATE='${EXPIRATION_DATE}' \
dp_GROUPS='${GROUPS:u:S/$/,/}' \ dp_GROUPS='${GROUPS:u:S/$/,/}' \
dp_LICENSE='${LICENSE:u:S/$/,/}' \ dp_LICENSE='${LICENSE:u:S/$/,/}' \
dp_LICENSE_COMB='${LICENSE_COMB}' \ dp_LICENSE_COMB='${LICENSE_COMB}' \
dp_MAINTAINER='${MAINTAINER}' \ dp_MAINTAINER='${MAINTAINER}' \
dp_METADIR='${METADIR}' \ dp_METADIR='${METADIR}.${sp}' \
dp_NO_ARCH='${NO_ARCH}' \ dp_NO_ARCH='${NO_ARCH}' \
dp_PKGBASE='${PKGBASE}' \ dp_PKGBASE='${sp}' \
dp_PKGDEINSTALL='${PKGDEINSTALL}' \ dp_PKGDEINSTALL='${PKGDEINSTALL${_SP.${sp}}}' \
dp_PKGINSTALL='${PKGINSTALL}' \ dp_PKGINSTALL='${PKGINSTALL${_SP.${sp}}}' \
dp_PKGMESSAGES='${_PKGMESSAGES}' \ dp_PKGMESSAGES='${_PKGMESSAGES${_SP.${sp}}}' \
dp_PKGORIGIN='${PKGORIGIN}' \ dp_PKGORIGIN='${PKGORIGIN}' \
dp_PKGPOSTDEINSTALL='${PKGPOSTDEINSTALL}' \ dp_PKGPOSTDEINSTALL='${PKGPOSTDEINSTALL${_SP.${sp}}}' \
dp_PKGPOSTINSTALL='${PKGPOSTINSTALL}' \ dp_PKGPOSTINSTALL='${PKGPOSTINSTALL${_SP.${sp}}}' \
dp_PKGPREDEINSTALL='${PKGPREDEINSTALL}' \ dp_PKGPREDEINSTALL='${PKGPREDEINSTALL${_SP.${sp}}}' \
dp_PKGPREINSTALL='${PKGPREINSTALL}' \ dp_PKGPREINSTALL='${PKGPREINSTALL${_SP.${sp}}}' \
dp_PKGVERSION='${PKGVERSION}' \ dp_PKGVERSION='${PKGVERSION}' \
dp_PKG_BIN='${PKG_BIN}' \ dp_PKG_BIN='${PKG_BIN}' \
dp_PKG_IGNORE_DEPENDS='${PKG_IGNORE_DEPENDS}' \ dp_PKG_IGNORE_DEPENDS='${PKG_IGNORE_DEPENDS}' \
dp_PKG_NOTES='${PKG_NOTES}' \ dp_PKG_NOTES='${PKG_NOTES.${sp}}' \
dp_PORT_OPTIONS='${PORT_OPTIONS}' \ dp_PORT_OPTIONS='${PORT_OPTIONS}' \
dp_PREFIX='${PREFIX}' \ dp_PREFIX='${PREFIX}' \
dp_USERS='${USERS:u:S/$/,/}' \ dp_USERS='${USERS:u:S/$/,/}' \
dp_WWW='${WWW}' \ dp_WWW='${WWW}' \
${PKG_NOTES_ENV} \ ${PKG_NOTES_ENV.${sp}} \
${SH} ${SCRIPTSDIR}/create-manifest.sh ${SH} ${SCRIPTSDIR}/create-manifest.sh
. endfor
# Print out package names. # Print out package names.
package-depends: package-depends:
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1":"$$3}' @${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1":"$$3}'
actual-package-depends: . for sp in ${_PKGS}
@${ACTUAL-PACKAGE-DEPENDS} actual-package-depends: actual-package-depends.${sp}
actual-package-depends.${sp}:
@${ACTUAL-PACKAGE-DEPENDS${_SP.${sp}}}
. endfor
# Build packages for port and dependencies # Build packages for port and dependencies
@ -4369,12 +4478,12 @@ install-missing-packages:
# first to avoid gratuitous breakage. # first to avoid gratuitous breakage.
. if !target(describe) . if !target(describe)
_EXTRACT_DEPENDS=${EXTRACT_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} _EXTRACT_DEPENDS=${EXTRACT_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_PATCH_DEPENDS=${PATCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} _PATCH_DEPENDS=${PATCH_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_FETCH_DEPENDS=${FETCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} _FETCH_DEPENDS=${FETCH_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_LIB_DEPENDS=${LIB_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} _LIB_DEPENDS=${LIB_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_BUILD_DEPENDS=${BUILD_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS} _BUILD_DEPENDS=${BUILD_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
_RUN_DEPENDS=${RUN_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS} _RUN_DEPENDS=${RUN_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
. if exists(${DESCR}) . if exists(${DESCR})
_DESCR=${DESCR} _DESCR=${DESCR}
. else . else
@ -4399,11 +4508,11 @@ describe-${f}:
. endif # empty(FLAVORS) . endif # empty(FLAVORS)
. endif . endif
. if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR) . if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR)
. if defined(_DESCRIBE_WITH_FLAVOR) . if defined(_DESCRIBE_WITH_FLAVOR)
_JSON_OBJ_NAME="\"${FLAVOR}-${.CURDIR:T}\":" _JSON_OBJ_NAME="\"${FLAVOR}-${.CURDIR:T}\":"
. endif . endif
describe-json: describe-json:
@(${ECHO_CMD} "${_JSON_OBJ_NAME} { ";\ @(${ECHO_CMD} "${_JSON_OBJ_NAME} { ";\
@ -4450,10 +4559,10 @@ describe-json:
${ECHO_CMD} \"use_gitlab\":\"${USE_GITLAB}\", ;\ ${ECHO_CMD} \"use_gitlab\":\"${USE_GITLAB}\", ;\
${ECHO_CMD} \"www\":\"${WWW:Q}\" ;\ ${ECHO_CMD} \"www\":\"${WWW:Q}\" ;\
${ECHO_CMD} "}" >> ${INDEX_OUT}) ${ECHO_CMD} "}" >> ${INDEX_OUT})
. else # empty(FLAVORS) . else # empty(FLAVORS)
describe-json: ${FLAVORS:S/^/describe-json-/} describe-json: ${FLAVORS:S/^/describe-json-/}
_LAST_FLAVOR = ${FLAVORS:[-1]} _LAST_FLAVOR = ${FLAVORS:[-1]}
. for f in ${FLAVORS} . for f in ${FLAVORS}
describe-json-${f}: describe-json-${f}:
@if [ "${f}" == "${FLAVORS:[1]}" ]; then \ @if [ "${f}" == "${FLAVORS:[1]}" ]; then \
${ECHO_CMD} "{" ;\ ${ECHO_CMD} "{" ;\
@ -4465,8 +4574,8 @@ describe-json-${f}:
${ECHO_CMD} "}" ;\ ${ECHO_CMD} "}" ;\
fi; \ fi; \
. endfor . endfor
. endif # empty(FLAVORS) . endif # empty(FLAVORS)
www-site: www-site:
@${ECHO_CMD} ${_WWW} @${ECHO_CMD} ${_WWW}
@ -4559,6 +4668,13 @@ generate-plist: ${WRKDIR}
@for file in ${PLIST_FILES}; do \ @for file in ${PLIST_FILES}; do \
${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \ ${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \
done done
. for sp in ${_PKGS}
. if ${sp} != ${PKGBASE}
@for file in ${PLIST_FILES${_SP.${sp}}}; do \
${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's/^/@@${_SP.${sp}:S/^.//}@@/' >> ${TMPPLIST}; \
done
. endif
. endfor
. if !empty(PLIST) . if !empty(PLIST)
. for f in ${PLIST} . for f in ${PLIST}
@if [ -f "${f}" ]; then \ @if [ -f "${f}" ]; then \
@ -4572,6 +4688,13 @@ generate-plist: ${WRKDIR}
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's,^,@dir ,' >> ${TMPPLIST} @${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's,^,@dir ,' >> ${TMPPLIST}
. endfor . endfor
. for sp in ${_PKGS}
. if ${sp} != ${PKGBASE}
. for dir in ${PLIST_DIRS${_SP.${sp}}}
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's,^,@@${_SP.${sp}:S/^.//}@@@dir ,' >> ${TMPPLIST}
. endfor
. endif
. endfor
. endif . endif
${TMPPLIST}: ${TMPPLIST}:
@ -4725,20 +4848,20 @@ stage-qa:
pretty-flavors-package-names: .PHONY pretty-flavors-package-names: .PHONY
. if empty(FLAVORS) . if empty(FLAVORS)
@${ECHO_CMD} "no flavor: ${PKGNAME}" @${ECHO_CMD} "no flavor: ${_PKGS}"
. else . else
. for f in ${FLAVORS} . for f in ${FLAVORS}
@${ECHO_CMD} -n "${f}: " @${ECHO_CMD} -n "${f}: "
@cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -V PKGNAME @cd ${.CURDIR} && ${SETENV} -i FLAVOR=${f} ${MAKE} -B -V _PKGS
. endfor . endfor
. endif . endif
flavors-package-names: .PHONY flavors-package-names: .PHONY
. if empty(FLAVORS) . if empty(FLAVORS)
@${ECHO_CMD} "${PKGNAME}" @${ECHO_CMD} "${_PKGS}"
. else . else
. for f in ${FLAVORS} . for f in ${FLAVORS}
@cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -V PKGNAME @cd ${.CURDIR} && ${SETENV} -i FLAVOR=${f} ${MAKE} -B -V _PKGS | ${XARGS} -n 1
. endfor . endfor
. endif . endif
@ -4749,19 +4872,22 @@ STAGE_ARGS= -i ${STAGEDIR}
STAGE_ARGS= -N STAGE_ARGS= -N
. endif . endif
fake-pkg: . for sp in ${_PKGS}
. if defined(INSTALLS_DEPENDS) fake-pkg: fake-pkg.${sp}
. if !defined(NO_PKG_REGISTER) fake-pkg.${sp}: ${_PLIST}.${sp}
. if defined(INSTALLS_DEPENDS)
. if !defined(NO_PKG_REGISTER)
@${ECHO_MSG} "===> Registering installation for ${PKGNAME} as automatic" @${ECHO_MSG} "===> Registering installation for ${PKGNAME} as automatic"
. endif . endif
@${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} -d ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST} @${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} -d ${STAGE_ARGS} -m ${METADIR}.${sp} -f ${_PLIST}.${sp}
. else . else
. if !defined(NO_PKG_REGISTER) . if !defined(NO_PKG_REGISTER)
@${ECHO_MSG} "===> Registering installation for ${PKGNAME}" @${ECHO_MSG} "===> Registering installation for ${PKGNAME}"
. endif
@${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} ${STAGE_ARGS} -m ${METADIR}.${sp} -f ${_PLIST}.${sp}
. endif . endif
@${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST} @${RM} -r ${METADIR}.${sp}
. endif . endfor
@${RM} -r ${METADIR}
. endif . endif
# Depend is generally meaningless for arbitrary ports, but if someone wants # Depend is generally meaningless for arbitrary ports, but if someone wants