Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102044214
D40549.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
28 KB
Referenced Files
None
Subscribers
None
D40549.diff
View Options
diff --git a/Mk/Scripts/depends-list.sh b/Mk/Scripts/depends-list.sh
--- a/Mk/Scripts/depends-list.sh
+++ b/Mk/Scripts/depends-list.sh
@@ -69,6 +69,12 @@
d=${overlay}/${2}
f=
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
*@*)
f=${d##*@}
diff --git a/Mk/Scripts/do-depends.sh b/Mk/Scripts/do-depends.sh
--- a/Mk/Scripts/do-depends.sh
+++ b/Mk/Scripts/do-depends.sh
@@ -21,15 +21,22 @@
{
origin=$1
target=$2
- depends_args=$3
+ subpkg=$3
+ depends_args=$4
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}
return 0
fi
- port_var_fetch "${origin}" "${depends_args}" \
- PKGFILE pkgfile \
- PKGBASE pkgbase
+ if [ -z "${subpkg}" ]; then
+ port_var_fetch "${origin}" "${depends_args}" \
+ 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
echo "===> Installing existing package ${pkgfile}"
@@ -123,12 +130,18 @@
continue
fi
+ subpkg=
case "${origin}" in
*@*/*) ;; # Ignore @ in the path which would not be a flavor
*@*)
export FLAVOR="${origin##*@}"
origin=${origin%@*}
;;
+ *~*/*) ;; # Ignore ~ in the path which would not be a subpackage
+ *~*)
+ subpkg="${origin##*~}"
+ origin=${origin%~*}
+ ;;
esac
case "${origin}" in
@@ -194,7 +207,7 @@
fi
# 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
[ "${fct}" = "false" ] || ${fct} "${pattern}"
echo "===> Returning to build of ${dp_PKGNAME}"
diff --git a/Mk/Scripts/functions.sh b/Mk/Scripts/functions.sh
--- a/Mk/Scripts/functions.sh
+++ b/Mk/Scripts/functions.sh
@@ -6,7 +6,8 @@
# Strip (owner,group,perm) from keywords
_strip_perms() {
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
diff --git a/Mk/bsd.licenses.mk b/Mk/bsd.licenses.mk
--- a/Mk/bsd.licenses.mk
+++ b/Mk/bsd.licenses.mk
@@ -153,10 +153,13 @@
# few more targets only.
_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_CATALOG?= ${_LICENSE_DIR}/catalog.mk
_LICENSE_CATALOG_TMP?= ${WRKDIR}/.license-catalog.mk
-_LICENSE_REPORT?= ${_LICENSE_DIR}/LICENSE
_LICENSE_REPORT_TMP?= ${WRKDIR}/.license-report
_LICENSE_COOKIE?= ${WRKDIR}/.license_done.${PORTNAME}.${PREFIX:S/\//_/g}
@@ -771,30 +774,47 @@
# Package list entries, and installation
. if !defined(NO_LICENSES_INSTALL)
-PLIST_FILES+= ${_LICENSE_CATALOG} \
- ${_LICENSE_REPORT}
-
-. if ${_LICENSE_COMB} == "single"
-PLIST_FILES+= ${_LICENSE_DIR}/${_LICENSE}
-. else
-. for lic in ${_LICENSE}
-. if defined(_LICENSE_FILE_${lic})
-PLIST_FILES+= ${_LICENSE_DIR}/${lic}
+. for sp in ${_PKGS}
+. if ${sp} == ${PKGBASE}
+PLIST_FILES+= ${_LICENSE_CATALOG.${sp}} \
+ ${_LICENSE_REPORT.${sp}}
+. if ${_LICENSE_COMB} == "single"
+PLIST_FILES+= ${_LICENSE_DIR.${sp}}/${_LICENSE}
+. else
+. for lic in ${_LICENSE}
+. if defined(_LICENSE_FILE_${lic})
+PLIST_FILES+= ${_LICENSE_DIR.${sp}}/${lic}
+. endif
+. endfor
. endif
-. endfor
-. endif
+. else
+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_DATA} ${_LICENSE_CATALOG_TMP} ${STAGEDIR}${_LICENSE_CATALOG}
- @${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${STAGEDIR}${_LICENSE_REPORT}
-. if ${_LICENSE_COMB} == "single"
- @${INSTALL_DATA} ${_LICENSE_FILE} ${STAGEDIR}${_LICENSE_DIR}/${_LICENSE}
-. else
-. for lic in ${_LICENSE}
- @${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${STAGEDIR}${_LICENSE_DIR}/${lic}
-. endfor
-. endif
+
+install-license: install-license.${sp}
+install-license.${sp}:
+ @${MKDIR} ${STAGEDIR}${_LICENSE_DIR.${sp}}
+ @${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${STAGEDIR}${_LICENSE_CATALOG.${sp}}
+ @${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${STAGEDIR}${_LICENSE_REPORT.${sp}}
+. if ${_LICENSE_COMB} == "single"
+ @${INSTALL_DATA} ${_LICENSE_FILE} ${STAGEDIR}${_LICENSE_DIR.${sp}}/${_LICENSE}
+. else
+. for lic in ${_LICENSE}
+ @${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${STAGEDIR}${_LICENSE_DIR.${sp}}/${lic}
+. endfor
+. endif
+. endfor
. endif
. else # !LICENSE
diff --git a/Mk/bsd.options.mk b/Mk/bsd.options.mk
--- a/Mk/bsd.options.mk
+++ b/Mk/bsd.options.mk
@@ -197,8 +197,8 @@
CONFIGURE_ENABLE CONFIGURE_OFF CONFIGURE_ON \
CONFIGURE_WITH IMPLIES MESON_ARGS MESON_DISABLED \
MESON_ENABLED MESON_FALSE MESON_OFF MESON_ON MESON_TRUE \
- PREVENTS PREVENTS_MSG QMAKE_OFF QMAKE_ON USE USE_OFF \
- VARS VARS_OFF
+ PREVENTS PREVENTS_MSG QMAKE_OFF QMAKE_ON \
+ SUBPACKAGES SUBPACKAGES_OFF USE USE_OFF VARS VARS_OFF
# The format here is target_family:priority:target-type
_OPTIONS_TARGETS= fetch:300:pre fetch:500:do fetch:700:post \
@@ -455,6 +455,19 @@
_OPTIONS_${target}?=
. 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}
# PLIST_SUB
PLIST_SUB?=
@@ -540,6 +553,11 @@
. if defined(${opt}_${deptype}_DEPENDS)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS}
. endif
+. for p in ${SUBPACKAGES}
+. if defined(${opt}_${deptype}_DEPENDS.${p})
+${deptype}_DEPENDS.{p}+= ${${opt}_${deptype}_DEPENDS.${p}}
+. endif
+. endfor
. endfor
. for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//}
@@ -611,6 +629,11 @@
. if defined(${opt}_${deptype}_DEPENDS_OFF)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS_OFF}
. endif
+. for p in ${SUBPACKAGES}
+. if defined(${opt}_${deptype}_DEPENDS_OFF.${p})
+${deptype}_DEPENDS.{p}+= ${${opt}_${deptype}_DEPENDS_OFF.${p}}
+. endif
+. endfor
. endfor
. for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//}
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -2196,6 +2196,7 @@
_PKGMESSAGES+= ${PKGMESSAGE}
TMPPLIST?= ${WRKDIR}/.PLIST.mktmp
+_PLIST?= ${WRKDIR}/.PLIST
# backward compatibility for users
. if defined(_PKG_TRANSITIONING_TO_NEW_EXT)
@@ -2229,11 +2230,6 @@
INSTALL_TARGET?= install
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
.include "${PORTSDIR}/Mk/bsd.sites.mk"
@@ -2607,14 +2603,6 @@
PKGREPOSITORYSUBDIR?= All
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 '-'
PKGLATESTREPOSITORY?= ${PACKAGES}/Latest
@@ -2627,6 +2615,75 @@
PKGOLDSIGFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}.sig
. 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_CMD?= ./${CONFIGURE_SCRIPT}
CONFIGURE_TARGET?= ${HOSTARCH}-portbld-${OPSYS:tl}${OSREL}
@@ -3402,10 +3459,6 @@
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGFILE}
_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"
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGLATESTREPOSITORY}
_PORTS_DIRECTORIES+= ${PKGLATESTREPOSITORY}
@@ -3431,14 +3484,29 @@
. endif
# from here this will become a loop for subpackages
-${WRKDIR_PKGFILE}: ${TMPPLIST} create-manifest ${WRKDIR}/pkg
- @if ! ${SETENV} ${PKG_ENV} ${PKG_CREATE} ${PKG_CREATE_ARGS} -m ${METADIR} -p ${TMPPLIST} -o ${WRKDIR}/pkg ${PKGNAME}; then \
+. for sp in ${_PKGS}
+${_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; \
exit 1; \
fi
- #
-# Temporary will be later dynamically added per subpackages
-_EXTRA_PACKAGE_TARGET_DEP+= ${WRKDIR_PKGFILE}
+
+_EXTRA_PACKAGE_TARGET_DEP+= ${WRKDIR_PKGFILE${_SP.${sp}}}
+
+${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
. if !target(do-package)
@@ -3455,14 +3523,18 @@
. if !target(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
- @${RM} ${PKGFILE} ${WRKDIR_PKGFILE} 2>/dev/null || :
+ @${RM} ${PKGFILE${_SP.${sp}}} ${WRKDIR_PKGFILE${_SP.${sp}}} 2>/dev/null || :
+. endfor
. endif
. if !target(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
# Used by scripts and users to install a package from local repository.
@@ -3474,13 +3546,16 @@
. if defined(INSTALLS_DEPENDS)
_INSTALL_PKG_ARGS+= -A
. endif
-install-package:
- @if [ -f "${WRKDIR}/pkg/${PKGNAME}${PKG_SUFX}" ]; then \
- _pkgfile="${WRKDIR_PKGFILE}"; \
+. for sp in ${_PKGS}
+install-package: install-package.${sp}
+install-package.${sp}:
+ @if [ -f "${WRKDIR_PKGFILE${_SP.${sp}}}" ]; then \
+ _pkgfile="${WRKDIR_PKGFILE${_SP.${sp}}}"; \
else \
- _pkgfile="${PKGFILE}"; \
+ _pkgfile="${PKGFILE${_SP.${sp}}}"; \
fi; \
${PKG_ADD} ${_INSTALL_PKG_ARGS} $${_pkgfile}
+. endfor
. endif
# Utility targets follow
@@ -3673,7 +3748,7 @@
test-message:
@${ECHO_MSG} "===> Testing for ${PKGNAME}"
package-message:
- @${ECHO_MSG} "===> Building package for ${PKGNAME}"
+ @${ECHO_MSG} "===> Building packages for ${PKGNAME}"
# Empty pre-* and post-* targets
@@ -3743,14 +3818,16 @@
${SU_CMD} "${MAKE} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
. else
- @${ECHO_MSG} "===> Deinstalling for ${PKGBASE}"
- @if ${PKG_INFO} -e ${PKGBASE}; then \
- p=`${PKG_INFO} -q -O ${PKGBASE}`; \
+. for _sp in ${_PKGS}
+ @${ECHO_MSG} "===> Deinstalling for ${_sp}"
+ @if ${PKG_INFO} -e ${_sp}; then \
+ p=`${PKG_INFO} -q -O ${_sp}`; \
${ECHO_MSG} "===> Deinstalling $${p}"; \
- ${PKG_DELETE} -f ${PKGBASE} ; \
+ ${PKG_DELETE} -f ${_sp} ; \
else \
- ${ECHO_MSG} "===> ${PKGBASE} not installed, skipping"; \
+ ${ECHO_MSG} "===> ${_sp} not installed, skipping"; \
fi
+. endfor
@${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
. endif
. endif
@@ -3976,7 +4053,7 @@
repackage: pre-repackage package
pre-repackage:
- @${RM} ${PACKAGE_COOKIE}
+ @${RM} ${PACKAGE_COOKIE} ${TMPPLIST}*
. endif
# Build a package but don't check the cookie for installation, also don't
@@ -3994,10 +4071,13 @@
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 sp in ${_PKGS}
+${deptype}_DEPENDS_ALL+= ${${deptype}_DEPENDS${_SP.${sp}}}
+. endfor
${deptype:tl}-depends:
-. if defined(${deptype}_DEPENDS) && !defined(NO_DEPENDS)
+. if !empty(${deptype}_DEPENDS_ALL) && !defined(NO_DEPENDS)
@${SETENV} \
- dp_RAWDEPENDS="${${deptype}_DEPENDS}" \
+ dp_RAWDEPENDS="${${deptype}_DEPENDS_ALL}" \
dp_DEPTYPE="${deptype}_DEPENDS" \
dp_DEPENDS_TARGET="${DEPENDS_TARGET}" \
dp_DEPENDS_PRECLEAN="${DEPENDS_PRECLEAN}" \
@@ -4026,7 +4106,7 @@
# 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,}
. for d in ${_UNIFIED_DEPENDS:M*\:/*}
@@ -4079,9 +4159,9 @@
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}
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}"
-RUN-DEPENDS-LIST= ${DEPENDS-LIST} "${LIB_DEPENDS} ${RUN_DEPENDS}"
-TEST-DEPENDS-LIST= ${DEPENDS-LIST} ${TEST_DEPENDS:Q}
+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_ALL} ${RUN_DEPENDS_ALL}"
+TEST-DEPENDS-LIST= ${DEPENDS-LIST} ${TEST_DEPENDS_ALL:Q}
CLEAN-DEPENDS-LIST= ${DEPENDS-LIST} -wr ${_UNIFIED_DEPENDS:Q}
CLEAN-DEPENDS-LIMITED-LIST= ${DEPENDS-LIST} -w ${_UNIFIED_DEPENDS:Q}
@@ -4170,7 +4250,7 @@
@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
. for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
. if defined(${deptype}_DEPENDS)
- @targ=fetch; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST}
+ @targ=fetch; deps="${${deptype}_DEPENDS_ALL}"; ${FETCH_LIST}
. endif
. endfor
. endif
@@ -4182,7 +4262,7 @@
. if !defined(NO_DEPENDS)
. for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
. if defined(${deptype}_DEPENDS)
- @targ=fetch-list; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST}
+ @targ=fetch-list; deps="${${deptype}_DEPENDS_ALL}"; ${FETCH_LIST}
. endif
. endfor
. endif
@@ -4221,7 +4301,7 @@
@${PACKAGE-DEPENDS-LIST}
. endif
-_LIB_RUN_DEPENDS= ${LIB_DEPENDS} ${RUN_DEPENDS}
+_LIB_RUN_DEPENDS= ${LIB_DEPENDS_ALL} ${RUN_DEPENDS_ALL}
PACKAGE-DEPENDS-LIST?= \
if [ "${CHILD_DEPENDS}" ]; then \
installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null || \
@@ -4240,6 +4320,11 @@
for dir in ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}; do \
unset flavor; \
case $${dir} in \
+ *~*) \
+ dir=$${dir%~*}; \
+ ;; \
+ esac; \
+ case $${dir} in \
*@*) \
flavor=$${dir\#*@}; \
dir=$${dir%@*}; \
@@ -4268,61 +4353,85 @@
fi; \
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="" ; \
- 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}`" ; \
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?=
. for note in ${PKG_NOTES}
PKG_NOTES_ENV+= dp_PKG_NOTE_${note}=${PKG_NOTE_${note}:Q}
. 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} \
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_COMMENT=${COMMENT:Q} \
+ dp_COMMENT=${COMMENT${_SP.${sp}}:Q} \
dp_COMPLETE_OPTIONS_LIST='${COMPLETE_OPTIONS_LIST}' \
dp_DEPRECATED=${DEPRECATED:Q} \
- dp_DESCR='${DESCR}' \
+ dp_DESCR='${DESCR${_SP.${sp}}}' \
dp_EXPIRATION_DATE='${EXPIRATION_DATE}' \
dp_GROUPS='${GROUPS:u:S/$/,/}' \
dp_LICENSE='${LICENSE:u:S/$/,/}' \
dp_LICENSE_COMB='${LICENSE_COMB}' \
dp_MAINTAINER='${MAINTAINER}' \
- dp_METADIR='${METADIR}' \
+ dp_METADIR='${METADIR}.${sp}' \
dp_NO_ARCH='${NO_ARCH}' \
- dp_PKGBASE='${PKGBASE}' \
- dp_PKGDEINSTALL='${PKGDEINSTALL}' \
- dp_PKGINSTALL='${PKGINSTALL}' \
- dp_PKGMESSAGES='${_PKGMESSAGES}' \
+ dp_PKGBASE='${sp}' \
+ dp_PKGDEINSTALL='${PKGDEINSTALL${_SP.${sp}}}' \
+ dp_PKGINSTALL='${PKGINSTALL${_SP.${sp}}}' \
+ dp_PKGMESSAGES='${_PKGMESSAGES${_SP.${sp}}}' \
dp_PKGORIGIN='${PKGORIGIN}' \
- dp_PKGPOSTDEINSTALL='${PKGPOSTDEINSTALL}' \
- dp_PKGPOSTINSTALL='${PKGPOSTINSTALL}' \
- dp_PKGPREDEINSTALL='${PKGPREDEINSTALL}' \
- dp_PKGPREINSTALL='${PKGPREINSTALL}' \
+ dp_PKGPOSTDEINSTALL='${PKGPOSTDEINSTALL${_SP.${sp}}}' \
+ dp_PKGPOSTINSTALL='${PKGPOSTINSTALL${_SP.${sp}}}' \
+ dp_PKGPREDEINSTALL='${PKGPREDEINSTALL${_SP.${sp}}}' \
+ dp_PKGPREINSTALL='${PKGPREINSTALL${_SP.${sp}}}' \
dp_PKGVERSION='${PKGVERSION}' \
dp_PKG_BIN='${PKG_BIN}' \
dp_PKG_IGNORE_DEPENDS='${PKG_IGNORE_DEPENDS}' \
- dp_PKG_NOTES='${PKG_NOTES}' \
+ dp_PKG_NOTES='${PKG_NOTES.${sp}}' \
dp_PORT_OPTIONS='${PORT_OPTIONS}' \
dp_PREFIX='${PREFIX}' \
dp_USERS='${USERS:u:S/$/,/}' \
dp_WWW='${WWW}' \
- ${PKG_NOTES_ENV} \
+ ${PKG_NOTES_ENV.${sp}} \
${SH} ${SCRIPTSDIR}/create-manifest.sh
+. endfor
# Print out package names.
package-depends:
@${PACKAGE-DEPENDS-LIST} | ${AWK} '{print $$1":"$$3}'
-actual-package-depends:
- @${ACTUAL-PACKAGE-DEPENDS}
+. for sp in ${_PKGS}
+actual-package-depends: actual-package-depends.${sp}
+actual-package-depends.${sp}:
+ @${ACTUAL-PACKAGE-DEPENDS${_SP.${sp}}}
+. endfor
# Build packages for port and dependencies
@@ -4369,12 +4478,12 @@
# first to avoid gratuitous breakage.
. if !target(describe)
-_EXTRACT_DEPENDS=${EXTRACT_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
-_PATCH_DEPENDS=${PATCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
-_FETCH_DEPENDS=${FETCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
-_LIB_DEPENDS=${LIB_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
-_BUILD_DEPENDS=${BUILD_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
-_RUN_DEPENDS=${RUN_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
+_EXTRACT_DEPENDS=${EXTRACT_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
+_PATCH_DEPENDS=${PATCH_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
+_FETCH_DEPENDS=${FETCH_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
+_LIB_DEPENDS=${LIB_DEPENDS_ALL:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
+_BUILD_DEPENDS=${BUILD_DEPENDS_ALL: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})
_DESCR=${DESCR}
. else
@@ -4399,11 +4508,11 @@
. endif # empty(FLAVORS)
. 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}\":"
-. endif
+. endif
describe-json:
@(${ECHO_CMD} "${_JSON_OBJ_NAME} { ";\
@@ -4450,10 +4559,10 @@
${ECHO_CMD} \"use_gitlab\":\"${USE_GITLAB}\", ;\
${ECHO_CMD} \"www\":\"${WWW:Q}\" ;\
${ECHO_CMD} "}" >> ${INDEX_OUT})
-. else # empty(FLAVORS)
+. else # empty(FLAVORS)
describe-json: ${FLAVORS:S/^/describe-json-/}
_LAST_FLAVOR = ${FLAVORS:[-1]}
-. for f in ${FLAVORS}
+. for f in ${FLAVORS}
describe-json-${f}:
@if [ "${f}" == "${FLAVORS:[1]}" ]; then \
${ECHO_CMD} "{" ;\
@@ -4465,8 +4574,8 @@
${ECHO_CMD} "}" ;\
fi; \
-. endfor
-. endif # empty(FLAVORS)
+. endfor
+. endif # empty(FLAVORS)
www-site:
@${ECHO_CMD} ${_WWW}
@@ -4559,6 +4668,13 @@
@for file in ${PLIST_FILES}; do \
${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \
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)
. for f in ${PLIST}
@if [ -f "${f}" ]; then \
@@ -4572,6 +4688,13 @@
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's,^,@dir ,' >> ${TMPPLIST}
. 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
${TMPPLIST}:
@@ -4725,20 +4848,20 @@
pretty-flavors-package-names: .PHONY
. if empty(FLAVORS)
- @${ECHO_CMD} "no flavor: ${PKGNAME}"
+ @${ECHO_CMD} "no flavor: ${_PKGS}"
. else
. for f in ${FLAVORS}
@${ECHO_CMD} -n "${f}: "
- @cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -V PKGNAME
+ @cd ${.CURDIR} && ${SETENV} -i FLAVOR=${f} ${MAKE} -B -V _PKGS
. endfor
. endif
flavors-package-names: .PHONY
. if empty(FLAVORS)
- @${ECHO_CMD} "${PKGNAME}"
+ @${ECHO_CMD} "${_PKGS}"
. else
. 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
. endif
@@ -4749,19 +4872,22 @@
STAGE_ARGS= -N
. endif
-fake-pkg:
-. if defined(INSTALLS_DEPENDS)
-. if !defined(NO_PKG_REGISTER)
+. for sp in ${_PKGS}
+fake-pkg: fake-pkg.${sp}
+fake-pkg.${sp}: ${_PLIST}.${sp}
+. if defined(INSTALLS_DEPENDS)
+. if !defined(NO_PKG_REGISTER)
@${ECHO_MSG} "===> Registering installation for ${PKGNAME} as automatic"
-. endif
- @${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} -d ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST}
-. else
-. if !defined(NO_PKG_REGISTER)
+. endif
+ @${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} -d ${STAGE_ARGS} -m ${METADIR}.${sp} -f ${_PLIST}.${sp}
+. else
+. if !defined(NO_PKG_REGISTER)
@${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
- @${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST}
-. endif
- @${RM} -r ${METADIR}
+ @${RM} -r ${METADIR}.${sp}
+. endfor
. endif
# Depend is generally meaningless for arbitrary ports, but if someone wants
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 7, 10:07 PM (17 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14521763
Default Alt Text
D40549.diff (28 KB)
Attached To
Mode
D40549: Subpackages!
Attached
Detach File
Event Timeline
Log In to Comment