mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 09:49:18 -04:00
Generic FLAVORS work.
- Enable FLAVORS. - Make make describe flavors aware. - Add a qa check for unique package names amongst flavors. - Make MOVEDlint understand flavors. - Add a bit of sanity check to make sure FLAVORS stay lowercase. - Various fixes. Reviewed by: portmgr Sponsored by: Absolight Differential Revision: https://reviews.freebsd.org/D12577
This commit is contained in:
parent
9d8e2a3c3d
commit
30c4ca5784
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=455205
4 changed files with 139 additions and 17 deletions
27
CHANGES
27
CHANGES
|
@ -10,6 +10,33 @@ in the release notes and/or placed into UPDATING.
|
||||||
|
|
||||||
All ports committers are allowed to commit to this file.
|
All ports committers are allowed to commit to this file.
|
||||||
|
|
||||||
|
20171130:
|
||||||
|
AUTHOR: mat@FreeBSD.org
|
||||||
|
|
||||||
|
Flavors are a way to have multiple variations of a port. The port is built
|
||||||
|
multiple times, with the variations. To declare flavors, set the FLAVORS
|
||||||
|
variable to the flavors you want defined. The first flavor will be the
|
||||||
|
default:
|
||||||
|
|
||||||
|
FLAVORS= flavor1 flavor2
|
||||||
|
|
||||||
|
The flavors MUST be lowercase, and can contain [[:lower:][:digit:]_].
|
||||||
|
|
||||||
|
Then, when building the port, pass the FLAVOR as an argument after make to
|
||||||
|
select the flavor.
|
||||||
|
|
||||||
|
$ make install FLAVOR=flavor2
|
||||||
|
|
||||||
|
In the port, you can then change the behavior depending on the value of the
|
||||||
|
FLAVOR variable. Note that the different flavors MUST have different
|
||||||
|
PKGNAMEs. Be sure to guard against an empty FLAVOR variable by using
|
||||||
|
${FLAVOR:U}:
|
||||||
|
|
||||||
|
.if ${FLAVOR:U} == flavor2
|
||||||
|
PKGNAMESUFFIX= -foo
|
||||||
|
OPTIONS_DEFAULT+= FOO
|
||||||
|
.endif
|
||||||
|
|
||||||
20171020:
|
20171020:
|
||||||
AUTHOR: ak@FreeBSD.org
|
AUTHOR: ak@FreeBSD.org
|
||||||
|
|
||||||
|
|
|
@ -841,9 +841,26 @@ gemdeps()
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flavors()
|
||||||
|
{
|
||||||
|
local rc pkgnames uniques
|
||||||
|
rc=0
|
||||||
|
if [ -n "${FLAVOR}" ]; then
|
||||||
|
pkgnames=$(make -C "${CURDIR}" flavors-package-names|sort)
|
||||||
|
uniques=$(echo "${pkgnames}"|uniq)
|
||||||
|
if [ "$pkgnames" != "${uniques}" ]; then
|
||||||
|
err "Package names are not uniques with flavors:"
|
||||||
|
make -C "${CURDIR}" pretty-flavors-package-names >&2
|
||||||
|
err "maybe use <flavor>_PKGNAMEPREFIX/SUFFIX".
|
||||||
|
rc=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return ${rc}
|
||||||
|
}
|
||||||
|
|
||||||
checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo"
|
checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo"
|
||||||
checks="$checks suidfiles libtool libperl prefixvar baselibs terminfo"
|
checks="$checks suidfiles libtool libperl prefixvar baselibs terminfo"
|
||||||
checks="$checks proxydeps sonames perlcore no_arch gemdeps"
|
checks="$checks proxydeps sonames perlcore no_arch gemdeps flavors"
|
||||||
|
|
||||||
ret=0
|
ret=0
|
||||||
cd ${STAGEDIR}
|
cd ${STAGEDIR}
|
||||||
|
|
|
@ -1065,8 +1065,7 @@ FLAVOR?=
|
||||||
.if !defined(_FLAVOR)
|
.if !defined(_FLAVOR)
|
||||||
_FLAVOR:= ${FLAVOR}
|
_FLAVOR:= ${FLAVOR}
|
||||||
.endif
|
.endif
|
||||||
# XXX: We have no real FLAVORS support in ports or tools yet.
|
PORTS_FEATURES+= FLAVORS
|
||||||
#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} \
|
||||||
|
@ -1082,18 +1081,6 @@ _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
|
# Do not leak flavors to childs make
|
||||||
.MAKEOVERRIDES:= ${MAKEOVERRIDES:NFLAVOR=*}
|
.MAKEOVERRIDES:= ${MAKEOVERRIDES:NFLAVOR=*}
|
||||||
|
|
||||||
|
@ -1470,6 +1457,32 @@ ${_f}_ARGS:= ${f:C/^[^\:]*(\:|\$)//:S/,/ /g}
|
||||||
.include "${USESDIR}/${f:C/\:.*//}.mk"
|
.include "${USESDIR}/${f:C/\:.*//}.mk"
|
||||||
.endfor
|
.endfor
|
||||||
|
|
||||||
|
.if !empty(FLAVORS)
|
||||||
|
. if ${FLAVORS:Mall}
|
||||||
|
DEV_ERROR+= "FLAVORS cannot contain 'all', it is a reserved value"
|
||||||
|
. endif
|
||||||
|
. for f in ${FLAVORS}
|
||||||
|
. if ${f:C/[[:lower:][:digit:]_]//g}
|
||||||
|
_BAD_FLAVOR_NAMES+= ${f}
|
||||||
|
. endif
|
||||||
|
. endfor
|
||||||
|
. if !empty(_BAD_FLAVOR_NAMES)
|
||||||
|
DEV_ERROR+= "FLAVORS contains flavors that are not all [a-z0-9_]: ${_BAD_FLAVOR_NAMES}"
|
||||||
|
. endif
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.if !empty(FLAVOR)
|
||||||
|
. if empty(FLAVORS)
|
||||||
|
IGNORE= FLAVOR is defined (to ${FLAVOR}) 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
|
||||||
|
|
||||||
EXTRACT_SUFX?= .tar.gz
|
EXTRACT_SUFX?= .tar.gz
|
||||||
|
|
||||||
.if defined(USE_LINUX_PREFIX)
|
.if defined(USE_LINUX_PREFIX)
|
||||||
|
@ -1562,6 +1575,9 @@ QA_ENV+= STAGEDIR=${STAGEDIR} \
|
||||||
LOCALBASE=${LOCALBASE} \
|
LOCALBASE=${LOCALBASE} \
|
||||||
"STRIP=${STRIP}" \
|
"STRIP=${STRIP}" \
|
||||||
TMPPLIST=${TMPPLIST} \
|
TMPPLIST=${TMPPLIST} \
|
||||||
|
CURDIR='${.CURDIR}' \
|
||||||
|
FLAVOR=${FLAVOR} \
|
||||||
|
FLAVORS='${FLAVORS}' \
|
||||||
BUNDLE_LIBS=${BUNDLE_LIBS} \
|
BUNDLE_LIBS=${BUNDLE_LIBS} \
|
||||||
LDCONFIG_DIR="${LDCONFIG_DIR}" \
|
LDCONFIG_DIR="${LDCONFIG_DIR}" \
|
||||||
PKGORIGIN=${PKGORIGIN} \
|
PKGORIGIN=${PKGORIGIN} \
|
||||||
|
@ -4025,11 +4041,17 @@ deinstall-depends:
|
||||||
fetch-specials:
|
fetch-specials:
|
||||||
@${ECHO_MSG} "===> Fetching all distfiles required by ${PKGNAME} for building"
|
@${ECHO_MSG} "===> Fetching all distfiles required by ${PKGNAME} for building"
|
||||||
@for dir in ${_DEPEND_SPECIALS}; do \
|
@for dir in ${_DEPEND_SPECIALS}; do \
|
||||||
|
case $${dir} in \
|
||||||
|
*@*) \
|
||||||
|
flavor=$${dir#*@}; \
|
||||||
|
dir=$${dir%@*}; \
|
||||||
|
;; \
|
||||||
|
esac; \
|
||||||
case $$dir in \
|
case $$dir in \
|
||||||
/*) ;; \
|
/*) ;; \
|
||||||
*) dir=${PORTSDIR}/$$dir ;; \
|
*) dir=${PORTSDIR}/$$dir ;; \
|
||||||
esac; \
|
esac; \
|
||||||
(cd $$dir; ${MAKE} fetch); \
|
(cd $$dir; ${MAKE} FLAVOR=$${flavor} fetch); \
|
||||||
done
|
done
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
@ -4323,6 +4345,7 @@ INDEX_OUT=${INDEX_TMPDIR}/${INDEXFILE}.desc.aggr
|
||||||
INDEX_OUT=/dev/stdout
|
INDEX_OUT=/dev/stdout
|
||||||
. endif
|
. endif
|
||||||
|
|
||||||
|
. if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR)
|
||||||
describe:
|
describe:
|
||||||
@(${ECHO_CMD} -n "${PKGNAME}|${.CURDIR}|${PREFIX}|"; \
|
@(${ECHO_CMD} -n "${PKGNAME}|${.CURDIR}|${PREFIX}|"; \
|
||||||
${ECHO_CMD} -n ${COMMENT:Q}; \
|
${ECHO_CMD} -n ${COMMENT:Q}; \
|
||||||
|
@ -4337,6 +4360,13 @@ describe:
|
||||||
;; \
|
;; \
|
||||||
esac; \
|
esac; \
|
||||||
done < ${DESCR}; ${ECHO_CMD}) >>${INDEX_OUT}
|
done < ${DESCR}; ${ECHO_CMD}) >>${INDEX_OUT}
|
||||||
|
. else # empty(FLAVORS)
|
||||||
|
describe: ${FLAVORS:S/^/describe-/}
|
||||||
|
. for f in ${FLAVORS}
|
||||||
|
describe-${f}:
|
||||||
|
@cd ${.CURDIR} && ${MAKE} -B FLAVOR=${f} -D_DESCRIBE_WITH_FLAVOR describe
|
||||||
|
. endfor
|
||||||
|
. endif # empty(FLAVORS)
|
||||||
. endif
|
. endif
|
||||||
|
|
||||||
www-site:
|
www-site:
|
||||||
|
@ -4618,6 +4648,25 @@ stage-qa:
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
pretty-flavors-package-names: .PHONY
|
||||||
|
.if empty(FLAVORS)
|
||||||
|
@${ECHO_CMD} "no flavor: ${PKGNAME}"
|
||||||
|
.else
|
||||||
|
.for f in ${FLAVORS}
|
||||||
|
@${ECHO_CMD} -n "${f}: "
|
||||||
|
@cd ${.CURDIR} && ${MAKE} -B FLAVOR=${f} -V PKGNAME
|
||||||
|
.endfor
|
||||||
|
.endif
|
||||||
|
|
||||||
|
flavors-package-names: .PHONY
|
||||||
|
.if empty(FLAVORS)
|
||||||
|
@${ECHO_CMD} "${PKGNAME}"
|
||||||
|
.else
|
||||||
|
.for f in ${FLAVORS}
|
||||||
|
@cd ${.CURDIR} && ${MAKE} -B FLAVOR=${f} -V PKGNAME
|
||||||
|
.endfor
|
||||||
|
.endif
|
||||||
|
|
||||||
# Fake installation of package so that user can pkg delete it later.
|
# Fake installation of package so that user can pkg delete it later.
|
||||||
.if !target(fake-pkg)
|
.if !target(fake-pkg)
|
||||||
STAGE_ARGS= -i ${STAGEDIR}
|
STAGE_ARGS= -i ${STAGEDIR}
|
||||||
|
|
|
@ -80,15 +80,44 @@ $3 !~ /^20[0-3][0-9]-[01][0-9]-[0-3][0-9]$/ {
|
||||||
}
|
}
|
||||||
lastdate = $3
|
lastdate = $3
|
||||||
|
|
||||||
|
from_flavor=""
|
||||||
|
if ($1 ~ "@") {
|
||||||
|
from_flavor=$1
|
||||||
|
sub("@.*", "", $1)
|
||||||
|
sub(".*@", "", from_flavor)
|
||||||
|
}
|
||||||
|
|
||||||
if (system("test -f " portsdir "/" $1 "/Makefile")) {
|
if (system("test -f " portsdir "/" $1 "/Makefile")) {
|
||||||
delete missing[$1]
|
delete missing[$1]
|
||||||
} else {
|
} else {
|
||||||
printf "%5d: %s must be marked as resurrected\n", NR, $1 | sort
|
if (from_flavor != "") {
|
||||||
|
if (!system("test \"" from_flavor "\" = \"`make -C " portsdir "/" $1 " -VFLAVORS:M" from_flavor "`\"")) {
|
||||||
|
printf "%5d: %s still has the %s flavor\n", NR, $1, from_flavor | sort
|
||||||
|
}
|
||||||
|
# No else because the port is there but does not have the flavor,
|
||||||
|
# so it should be ok.
|
||||||
|
} else {
|
||||||
|
printf "%5d: %s must be marked as resurrected\n", NR, $1 | sort
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($2) {
|
if ($2) {
|
||||||
|
to_flavor=""
|
||||||
|
if ($2 ~ "@") {
|
||||||
|
to_flavor=$2
|
||||||
|
sub("@.*", "", $2)
|
||||||
|
sub(".*@", "", to_flavor)
|
||||||
|
}
|
||||||
|
|
||||||
if (system("test -f " portsdir "/" $2 "/Makefile"))
|
if (system("test -f " portsdir "/" $2 "/Makefile"))
|
||||||
missing[$2] = NR
|
missing[$2] = NR
|
||||||
|
else
|
||||||
|
if (to_flavor != "") {
|
||||||
|
if (system("test \"" to_flavor "\" = \"`make -C " portsdir "/" $2 " -VFLAVORS:M" to_flavor "`\"")) {
|
||||||
|
printf "%5d: %s does not have the %s flavor\n", NR, $2, to_flavor | sort
|
||||||
|
error[NR] = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Produces too many false positives
|
# Produces too many false positives
|
||||||
|
|
Loading…
Add table
Reference in a new issue