mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -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}
|
||||
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
@ -125,6 +127,13 @@ for _line in ${dp_RAWDEPENDS} ; do
|
|||
/*) ;;
|
||||
*) 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}"
|
||||
target=${dp_DEPENDS_TARGET}
|
||||
|
|
|
@ -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} ${EXTRACT_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,18 +3709,57 @@ 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)
|
||||
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue