mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 09:49:18 -04:00
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
This commit is contained in:
parent
e6f5dab676
commit
e2e97eb2bc
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=450663
3 changed files with 97 additions and 15 deletions
|
@ -59,8 +59,13 @@ check_dep() {
|
||||||
IFS=${myifs}
|
IFS=${myifs}
|
||||||
|
|
||||||
case "${2}" in
|
case "${2}" in
|
||||||
/*) d=${2} ;;
|
/*) d=${2} ;;
|
||||||
*) d=${PORTSDIR}/${2} ;;
|
*) d=${PORTSDIR}/${2} ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${d}" in
|
||||||
|
*@*/*) ;; # Ignore @ in the path which would not be a flavor
|
||||||
|
*@*) d=${d%@*} ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case " ${checked} " in
|
case " ${checked} " in
|
||||||
|
|
|
@ -94,13 +94,15 @@ find_lib()
|
||||||
anynotfound=0
|
anynotfound=0
|
||||||
err=0
|
err=0
|
||||||
for _line in ${dp_RAWDEPENDS} ; do
|
for _line in ${dp_RAWDEPENDS} ; do
|
||||||
|
# ensure we never leak flavors
|
||||||
|
unset FLAVOR
|
||||||
myifs=${IFS}
|
myifs=${IFS}
|
||||||
IFS=:
|
IFS=:
|
||||||
set -- ${_line}
|
set -- ${_line}
|
||||||
IFS=${myifs}
|
IFS=${myifs}
|
||||||
if [ $# -lt 2 -o $# -gt 3 ]; then
|
if [ $# -lt 2 -o $# -gt 3 ]; then
|
||||||
echo "Error: bad dependency syntax in ${dp_DEPTYPE}" >&2
|
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
|
echo "got: ${_line}" >&2
|
||||||
err=1
|
err=1
|
||||||
continue
|
continue
|
||||||
|
@ -125,6 +127,13 @@ for _line in ${dp_RAWDEPENDS} ; do
|
||||||
/*) ;;
|
/*) ;;
|
||||||
*) origin="${PORTSDIR}/${origin}" ;;
|
*) origin="${PORTSDIR}/${origin}" ;;
|
||||||
esac
|
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}"
|
depends_args="${dp_DEPENDS_ARGS}"
|
||||||
target=${dp_DEPENDS_TARGET}
|
target=${dp_DEPENDS_TARGET}
|
||||||
|
|
|
@ -1056,6 +1056,9 @@ SCRIPTSDIR?= ${PORTSDIR}/Mk/Scripts
|
||||||
LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib
|
LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib
|
||||||
STAGEDIR?= ${WRKDIR}/stage
|
STAGEDIR?= ${WRKDIR}/stage
|
||||||
NOTPHONY?=
|
NOTPHONY?=
|
||||||
|
FLAVORS?=
|
||||||
|
FLAVOR?=
|
||||||
|
PORTS_FEATURES+= FLAVORS
|
||||||
MINIMAL_PKG_VERSION= 1.6.0
|
MINIMAL_PKG_VERSION= 1.6.0
|
||||||
|
|
||||||
_PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} ${EXTRACT_WRKDIR} \
|
_PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} ${EXTRACT_WRKDIR} \
|
||||||
|
@ -1071,6 +1074,21 @@ _PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} ${EXTRACT_WRKDIR} \
|
||||||
|
|
||||||
.include "${PORTSDIR}/Mk/bsd.commands.mk"
|
.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_TOOLCHAIN)
|
||||||
.if !defined(CROSS_SYSROOT)
|
.if !defined(CROSS_SYSROOT)
|
||||||
IGNORE= CROSS_SYSROOT should be defined
|
IGNORE= CROSS_SYSROOT should be defined
|
||||||
|
@ -1508,6 +1526,11 @@ PKG_NOTES+= expiration_date
|
||||||
PKG_NOTE_expiration_date= ${EXPIRATION_DATE}
|
PKG_NOTE_expiration_date= ${EXPIRATION_DATE}
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.if !empty(FLAVOR)
|
||||||
|
PKG_NOTES+= flavor
|
||||||
|
PKG_NOTE_flavor= ${FLAVOR}
|
||||||
|
.endif
|
||||||
|
|
||||||
TEST_ARGS?= ${MAKE_ARGS}
|
TEST_ARGS?= ${MAKE_ARGS}
|
||||||
TEST_ENV?= ${MAKE_ENV}
|
TEST_ENV?= ${MAKE_ENV}
|
||||||
|
|
||||||
|
@ -1576,7 +1599,13 @@ MAKE_ENV+= NM=${NM} \
|
||||||
CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${CROSS_SYSROOT}"
|
CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${CROSS_SYSROOT}"
|
||||||
.endif
|
.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)
|
.if !defined(IGNORE_MASTER_SITE_GITHUB) && defined(USE_GITHUB) && empty(USE_GITHUB:Mnodefault)
|
||||||
WRKSRC?= ${WRKDIR}/${GH_PROJECT}-${GH_TAGNAME_EXTRACT}
|
WRKSRC?= ${WRKDIR}/${GH_PROJECT}-${GH_TAGNAME_EXTRACT}
|
||||||
.endif
|
.endif
|
||||||
|
@ -3680,18 +3709,57 @@ do-clean:
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if !target(clean)
|
.if !target(clean)
|
||||||
clean:
|
pre-clean: clean-msg
|
||||||
|
clean-msg:
|
||||||
|
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
|
||||||
|
|
||||||
|
.if empty(FLAVORS)
|
||||||
|
CLEAN_DEPENDENCIES=
|
||||||
.if !defined(NOCLEANDEPENDS)
|
.if !defined(NOCLEANDEPENDS)
|
||||||
|
CLEAN_DEPENDENCIES+= limited-clean-depends-noflavor
|
||||||
|
limited-clean-depends-noflavor:
|
||||||
@cd ${.CURDIR} && ${MAKE} limited-clean-depends
|
@cd ${.CURDIR} && ${MAKE} limited-clean-depends
|
||||||
.endif
|
.endif
|
||||||
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
|
|
||||||
.if target(pre-clean)
|
.if target(pre-clean)
|
||||||
@cd ${.CURDIR} && ${MAKE} pre-clean
|
CLEAN_DEPENDENCIES+= pre-clean-noflavor
|
||||||
|
pre-clean-noflavor:
|
||||||
|
@cd ${.CURDIR} && ${SETENV} ${MAKE} pre-clean
|
||||||
.endif
|
.endif
|
||||||
@cd ${.CURDIR} && ${MAKE} do-clean
|
CLEAN_DEPENDENCIES+= do-clean-noflavor
|
||||||
|
do-clean-noflavor:
|
||||||
|
@cd ${.CURDIR} && ${SETENV} ${MAKE} do-clean
|
||||||
.if target(post-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
|
.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
|
.endif
|
||||||
|
|
||||||
.if !target(distclean)
|
.if !target(distclean)
|
||||||
|
@ -4217,12 +4285,12 @@ 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:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
|
||||||
_PATCH_DEPENDS=${PATCH_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,}
|
_FETCH_DEPENDS=${FETCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
|
||||||
_LIB_DEPENDS=${LIB_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}
|
_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}
|
_RUN_DEPENDS=${RUN_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
|
||||||
. if exists(${DESCR})
|
. if exists(${DESCR})
|
||||||
_DESCR=${DESCR}
|
_DESCR=${DESCR}
|
||||||
. else
|
. else
|
||||||
|
|
Loading…
Add table
Reference in a new issue