FreeBSD Bugzilla – Attachment 247172 Details for
Bug 275735
Introduce SUBPACKAGE support in the framework
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch with fix
subpkg.patch (text/plain), 29.04 KB, created by
Luca Pizzamiglio
on 2023-12-20 18:33:44 UTC
(
hide
)
Description:
Patch with fix
Filename:
MIME Type:
Creator:
Luca Pizzamiglio
Created:
2023-12-20 18:33:44 UTC
Size:
29.04 KB
patch
obsolete
>diff --git a/Mk/Scripts/depends-list.sh b/Mk/Scripts/depends-list.sh >index ab724b58ab1e..8eec46229728 100644 >--- a/Mk/Scripts/depends-list.sh >+++ b/Mk/Scripts/depends-list.sh >@@ -69,6 +69,12 @@ check_dep() { > 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 >index 0351d3d4ab02..238a8f221b18 100644 >--- a/Mk/Scripts/do-depends.sh >+++ b/Mk/Scripts/do-depends.sh >@@ -21,15 +21,22 @@ install_depends() > { > 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 @@ for _line in ${dp_RAWDEPENDS} ; do > 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 @@ for _line in ${dp_RAWDEPENDS} ; do > 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 >index 892f2a7218de..0d786af3d242 100644 >--- 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 >index cc3b8f29f478..89b7b4c3f2e7 100644 >--- a/Mk/bsd.licenses.mk >+++ b/Mk/bsd.licenses.mk >@@ -152,11 +152,13 @@ _LICENSE_LIST_PORT_VARS= PERMS NAME GROUPS > # bsd.port.mk to avoid creating LICENSE_{REQ,SEQ} for a > # 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 +773,47 @@ ${_LICENSE_COOKIE}: > # 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 >index 09656bb0e1e9..dba8829e7d73 100644 >--- a/Mk/bsd.options.mk >+++ b/Mk/bsd.options.mk >@@ -197,8 +197,8 @@ _ALL_OPTIONS_HELPERS= ${_OPTIONS_DEPENDS:S/$/_DEPENDS/} \ > 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 @@ ALL_OPTIONS= ${OPTIONS_DEFINE} > _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 @@ ${flags}+= ${${opt}_${flags}} > . 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 @@ ${flags}+= ${${opt}_${flags}_OFF} > . 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 >index dae7b5772f40..98bd4a6201a5 100644 >--- a/Mk/bsd.port.mk >+++ b/Mk/bsd.port.mk >@@ -2196,6 +2196,7 @@ PKGMESSAGE?= ${PKGDIR}/pkg-message > _PKGMESSAGES+= ${PKGMESSAGE} > > TMPPLIST?= ${WRKDIR}/.PLIST.mktmp >+_PLIST?= ${WRKDIR}/.PLIST > > # backward compatibility for users > . if defined(_PKG_TRANSITIONING_TO_NEW_EXT) >@@ -2229,11 +2230,6 @@ ALL_TARGET?= all > 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 @@ check-categories: > > 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 @@ PKGOLDLATESTFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT} > 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 @@ do-test: > _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 @@ ${PKGOLDSIGFILE}: ${PKGLATESTREPOSITORY} > . 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 @@ do-package: ${_EXTRA_PACKAGE_TARGET_DEP} ${WRKDIR}/pkg > > . 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 @@ _INSTALL_PKG_ARGS= -f > . 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 @@ install-message: > 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 @@ deinstall: > ${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 @@ package-name: > 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 @@ package-noinstall: package > 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 @@ ${deptype:tl}-depends: > > # 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-LIST= ${DEPENDS-LIST} -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} > 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 @@ fetch-required: fetch > @${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 @@ fetch-required-list: fetch-list > . 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: > @${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 @@ PACKAGE-DEPENDS-LIST?= \ > 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 @@ PACKAGE-DEPENDS-LIST?= \ > 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 @@ install-missing-packages: > # 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 >@@ -4559,6 +4668,13 @@ generate-plist: ${WRKDIR} > @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 @@ generate-plist: ${WRKDIR} > @${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 @@ stage-qa: > > 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= -i ${STAGEDIR} > 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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 275735
:
247015
|
247172
|
247292