Date: Tue, 26 Sep 2017 14:14:45 +0000 (UTC) From: Mathieu Arnold <mat@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r450663 - in head/Mk: . Scripts Message-ID: <201709261414.v8QEEjvQ079525@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mat Date: Tue Sep 26 14:14:44 2017 New Revision: 450663 URL: https://svnweb.freebsd.org/changeset/ports/450663 Log: Implement basic flavors. **Do not start migrating any ports, a hook will prevent it** This has been a long awaiting feature, most of the work has been done by bapt, bdrewery and antoine, I am just the one actually doing the commit. All this informations, and more to come are in the first link to our wiki in the bottom block. A roadmap is in the second link. To define a different flavors in a port, before any include, set: FLAVORS= flavor1 flavor2 [...] The first flavor in the list will be the default. You can then check for flavors after includ'ing bsd.port.options.mk with: .if ${FLAVOR} == flavor2 [some stuff] .endif To build flavor2, simply run: make FLAVOR=flavor2 To depend on a specific flavor, write @<flavor> at the end of the depend string, like: RUN_DEPENDS= something:origin@foo Submitted by: bapt, bdrewery, antoine Reviewed by: portmgr More infos: https://wiki.freebsd.org/Ports/FlavorsMigration Todo List: https://wiki.freebsd.org/Ports/FlavorsAndSubPackages With hat: portmgr Differential Revision: https://reviews.freebsd.org/D10327 Modified: head/Mk/Scripts/depends-list.sh (contents, props changed) head/Mk/Scripts/do-depends.sh (contents, props changed) head/Mk/bsd.port.mk (contents, props changed) Modified: head/Mk/Scripts/depends-list.sh ============================================================================== --- head/Mk/Scripts/depends-list.sh Tue Sep 26 13:20:00 2017 (r450662) +++ head/Mk/Scripts/depends-list.sh Tue Sep 26 14:14:44 2017 (r450663) @@ -59,8 +59,13 @@ check_dep() { IFS=${myifs} case "${2}" in - /*) d=${2} ;; - *) d=${PORTSDIR}/${2} ;; + /*) d=${2} ;; + *) d=${PORTSDIR}/${2} ;; + esac + + case "${d}" in + *@*/*) ;; # Ignore @ in the path which would not be a flavor + *@*) d=${d%@*} ;; esac case " ${checked} " in Modified: head/Mk/Scripts/do-depends.sh ============================================================================== --- head/Mk/Scripts/do-depends.sh Tue Sep 26 13:20:00 2017 (r450662) +++ head/Mk/Scripts/do-depends.sh Tue Sep 26 14:14:44 2017 (r450663) @@ -94,13 +94,15 @@ find_lib() anynotfound=0 err=0 for _line in ${dp_RAWDEPENDS} ; do + # ensure we never leak flavors + unset FLAVOR myifs=${IFS} IFS=: set -- ${_line} IFS=${myifs} if [ $# -lt 2 -o $# -gt 3 ]; then echo "Error: bad dependency syntax in ${dp_DEPTYPE}" >&2 - echo "expecting: pattern:origin[:target]" >&2 + echo "expecting: pattern:origin[@flavour][:target]" >&2 echo "got: ${_line}" >&2 err=1 continue @@ -124,6 +126,13 @@ for _line in ${dp_RAWDEPENDS} ; do case "${origin}" in /*) ;; *) origin="${PORTSDIR}/${origin}" ;; + esac + case "${origin}" in + *@*/*) ;; # Ignore @ in the path which would not be a flavor + *@*) + export FLAVOR="${origin##*@}" + origin=${origin%@*} + ;; esac depends_args="${dp_DEPENDS_ARGS}" Modified: head/Mk/bsd.port.mk ============================================================================== --- head/Mk/bsd.port.mk Tue Sep 26 13:20:00 2017 (r450662) +++ head/Mk/bsd.port.mk Tue Sep 26 14:14:44 2017 (r450663) @@ -1056,6 +1056,9 @@ SCRIPTSDIR?= ${PORTSDIR}/Mk/Scripts LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib STAGEDIR?= ${WRKDIR}/stage NOTPHONY?= +FLAVORS?= +FLAVOR?= +PORTS_FEATURES+= FLAVORS MINIMAL_PKG_VERSION= 1.6.0 _PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} ${EXTRACT_WRKDIR} \ @@ -1071,6 +1074,21 @@ _PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} .include "${PORTSDIR}/Mk/bsd.commands.mk" +.if !empty(FLAVOR) +. if empty(FLAVORS) +IGNORE= FLAVOR is defined while this port does not have FLAVORS. +. elif ! ${FLAVORS:M${FLAVOR}} +IGNORE= Unknown flavor '${FLAVOR}', possible flavors: ${FLAVORS}. +. endif +.endif + +.if !empty(FLAVORS) && empty(FLAVOR) +FLAVOR= ${FLAVORS:[1]} +.endif + +# Do not leak flavors to childs make +.MAKEOVERRIDES:= ${MAKEOVERRIDES:NFLAVOR=*} + .if defined(CROSS_TOOLCHAIN) .if !defined(CROSS_SYSROOT) IGNORE= CROSS_SYSROOT should be defined @@ -1508,6 +1526,11 @@ PKG_NOTES+= expiration_date PKG_NOTE_expiration_date= ${EXPIRATION_DATE} .endif +.if !empty(FLAVOR) +PKG_NOTES+= flavor +PKG_NOTE_flavor= ${FLAVOR} +.endif + TEST_ARGS?= ${MAKE_ARGS} TEST_ENV?= ${MAKE_ENV} @@ -1576,7 +1599,13 @@ MAKE_ENV+= NM=${NM} \ CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${CROSS_SYSROOT}" .endif -WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work +.if empty(FLAVOR) +_WRKDIR= work +.else +_WRKDIR= work-${FLAVOR} +.endif + +WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/${_WRKDIR} .if !defined(IGNORE_MASTER_SITE_GITHUB) && defined(USE_GITHUB) && empty(USE_GITHUB:Mnodefault) WRKSRC?= ${WRKDIR}/${GH_PROJECT}-${GH_TAGNAME_EXTRACT} .endif @@ -3680,20 +3709,59 @@ do-clean: .endif .if !target(clean) -clean: +pre-clean: clean-msg +clean-msg: + @${ECHO_MSG} "===> Cleaning for ${PKGNAME}" + +.if empty(FLAVORS) +CLEAN_DEPENDENCIES= .if !defined(NOCLEANDEPENDS) +CLEAN_DEPENDENCIES+= limited-clean-depends-noflavor +limited-clean-depends-noflavor: @cd ${.CURDIR} && ${MAKE} limited-clean-depends .endif - @${ECHO_MSG} "===> Cleaning for ${PKGNAME}" .if target(pre-clean) - @cd ${.CURDIR} && ${MAKE} pre-clean +CLEAN_DEPENDENCIES+= pre-clean-noflavor +pre-clean-noflavor: + @cd ${.CURDIR} && ${SETENV} ${MAKE} pre-clean .endif - @cd ${.CURDIR} && ${MAKE} do-clean +CLEAN_DEPENDENCIES+= do-clean-noflavor +do-clean-noflavor: + @cd ${.CURDIR} && ${SETENV} ${MAKE} do-clean .if target(post-clean) - @cd ${.CURDIR} && ${MAKE} post-clean +CLEAN_DEPENDENCIES+= post-clean-noflavor +post-clean-${_f}: + @cd ${.CURDIR} && ${SETENV} ${MAKE} post-clean .endif +.ORDER: ${CLEAN_DEPENDENCIES} +clean: ${CLEAN_DEPENDENCIES} .endif +.for _f in ${FLAVORS} +CLEAN_DEPENDENCIES= +.if !defined(NOCLEANDEPENDS) +CLEAN_DEPENDENCIES+= limited-clean-depends-${_f} +limited-clean-depends-${_f}: + @cd ${.CURDIR} && ${MAKE} FLAVOR=${_f} limited-clean-depends +.endif +.if target(pre-clean) +CLEAN_DEPENDENCIES+= pre-clean-${_f} +pre-clean-${_f}: + @cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} pre-clean +.endif +CLEAN_DEPENDENCIES+= do-clean-${_f} +do-clean-${_f}: + @cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} do-clean +.if target(post-clean) +CLEAN_DEPENDENCIES+= post-clean-${_f} +post-clean-${_f}: + @cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} post-clean +.endif +.ORDER: ${CLEAN_DEPENDENCIES} +clean: ${CLEAN_DEPENDENCIES} +.endfor +.endif + .if !target(distclean) distclean: clean @cd ${.CURDIR} && ${MAKE} delete-distfiles RESTRICTED_FILES="${_DISTFILES:Q} ${_PATCHFILES:Q}" @@ -4217,12 +4285,12 @@ 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: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} . if exists(${DESCR}) _DESCR=${DESCR} . else
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709261414.v8QEEjvQ079525>