1
0
mirror of https://git.freebsd.org/ports.git synced 2026-06-02 11:08:52 +00:00
Files
ports/Mk/bsd.options.mk
Xin LI 6a08bd33c6 Mk/bsd.options.mk: add OPTIONS_RADIO_${NAME}_${ARCH} support
This is similar to OPTIONS_DEFINE_${ARCH}, allowing radios to
be dependent on ${ARCH} too, useful for ports that requires
the user to choose exactly one execution backend or firmware
payload, where the available choices depend on the architecture
(for example, choosing between specific JIT backends on amd64
versus a different set of backends on aarch64), etc.

PR:		ports/294399
Approved by:	portmgr (mat)
2026-05-01 01:18:35 -07:00

699 lines
23 KiB
Makefile

# These variables are used in port makefiles to define the options for a port.
#
# OPTIONS_DEFINE - List of options this port accepts
# OPTIONS_DEFINE_${ARCH} - List of options this port accepts and are
# specific to ${ARCH}
# OPTIONS_DEFAULT - List of options activated by default
# OPTIONS_DEFAULT_${ARCH} - List of options activated by default for a
# given arch
#
# ${OPTION}_DESC - Description of the ${OPTION}
#
# OPTIONS_SINGLE - List of single-choice grouped options: 1 and
# only 1 among N
# OPTIONS_RADIO - List of radio-choice grouped options: 0 or 1
# among N
# OPTIONS_MULTI - List of multiple-choice grouped options: at
# least 1 among N
# OPTIONS_GROUP - List of group-choice grouped options: 0 or
# more among N
#
# OPTIONS_SINGLE_${NAME} - List of OPTIONS grouped as single choice (for
# the single named as ${NAME} as defined in
# OPTIONS_SINGLE)
# OPTIONS_RADIO_${NAME} - List of OPTIONS grouped as radio choice (for
# the radio named as ${NAME} as defined in
# OPTIONS_RADIO)
# OPTIONS_RADIO_${NAME}_${ARCH} - List of OPTIONS to append to the radio group
# named ${NAME} on architecture ${ARCH}
# OPTIONS_MULTI_${NAME} - List of OPTIONS grouped as multiple-choice
# (for the multi named as ${NAME} as defined in
# OPTIONS_MULTI)
# OPTIONS_GROUP_${NAME} - List of OPTIONS grouped as group-choice (for
# the group named as ${NAME} as defined in
# OPTIONS_GROUP)
#
# OPTIONS_EXCLUDE - List of options unsupported (useful for slave ports)
# OPTIONS_EXCLUDE_${ARCH} - List of options unsupported on a given ${ARCH}
# OPTIONS_EXCLUDE_${OPSYS} - List of options unsupported on a given ${OPSYS}
# OPTIONS_EXCLUDE_${OPSYS}_${OSREL:R} - List of options unsupported on a given
# ${OPSYS} and major version (11/12/13...)
# OPTIONS_SLAVE - This is designed for slave ports, it removes an
# option from the options list inherited from the
# master port and it always adds it to PORT_OPTIONS
# meaning activated
#
# These variables can be used in make.conf to configure options. They are
# processed in the order listed below, i.e. later variables override the effects
# of previous variables. Options saved using the options dialog are processed
# right before OPTIONS_SET_FORCE. When building a port a dialog to configure
# options will only appear if there are new options, i.e. options which have not
# been configured before either using the option dialog in a previous build or
# using the variables below. You can force the dialog to appear by running
# "make config".
#
# OPTIONS_SET - List of options to enable for all ports.
# OPTIONS_UNSET - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET - List of options to disable for a specific port.
#
# OPTIONS_SET_FORCE - List of options to enable for all ports.
# OPTIONS_UNSET_FORCE - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET_FORCE - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET_FORCE
# - List of options to disable for a specific port.
#
# These variables can be used on the command line. They override the effects of
# the make.conf variables above.
#
# WITH - Set options from the command line
# WITHOUT - Unset options from the command line
#
#
# These variables are strictly informational (read-only). They indicate the
# current state of the selected options; they are space-delimited lists.
#
# SELECTED_OPTIONS - list of options set "on"
# DESELECTED_OPTIONS - list of options set "off"
#
#
# The following knobs are there to simplify the handling of OPTIONS in simple
# cases :
#
# OPTIONS_SUB When defined it will add to PLIST_SUB:
# Option enabled ${opt}=""
# Option disabled ${opt}="@comment "
#
# ${opt}_CONFIGURE_ON When option is enabled, it will add its content to
# the CONFIGURE_ARGS.
# ${opt}_CONFIGURE_OFF When option is disabled, it will add its content to
# the CONFIGURE_ARGS.
# ${opt}_CONFIGURE_ENABLE Will add to CONFIGURE_ARGS:
# Option enabled --enable-${content}
# Option disabled --disable-${content}
# ${opt}_CONFIGURE_WITH Will add to CONFIGURE_ARGS:
# Option enabled --with-${content}
# Option disabled --without-${content}
#
# ${opt}_CMAKE_ON When option is enabled, it will add its content to
# the CMAKE_ARGS.
# ${opt}_CMAKE_OFF When option is disabled, it will add its content to
# the CMAKE_ARGS.
#
# ${opt}_CMAKE_BOOL Will add to CMAKE_ARGS:
# Option enabled -D${content}:BOOL=true
# Option disabled -D${content}:BOOL=false
# ${opt}_CMAKE_BOOL_OFF Will add to CMAKE_ARGS:
# Option enabled -D${content}:BOOL=false
# Option disabled -D${content}:BOOL=true
#
# ${opt}_QMAKE_ON When option is enabled, it will add its content to
# the QMAKE_ARGS.
# ${opt}_QMAKE_OFF When option is disabled, it will add its content to
# the QMAKE_ARGS.
#
# ${opt}_MESON_ON When option is enabled, it will add its
# content to MESON_ARGS.
# ${opt}_MESON_OFF When option is disabled, it will add its
# content to MESON_ARGS.
#
# ${opt}_MESON_TRUE Will add to MESON_ARGS:
# Option enabled -D${content}=true
# Option disabled -D${content}=false
# ${opt}_MESON_FALSE Will add to MESON_ARGS:
# Option enabled -D${content}=false
# Option disabled -D${content}=true
#
# ${opt}_MESON_YES Will add to MESON_ARGS:
# Option enabled -D${content}=yes
# Option disabled -D${content}=no
# ${opt}_MESON_NO Will add to MESON_ARGS:
# Option enabled -D${content}=no
# Option disabled -D${content}=yes
#
# ${opt}_MESON_ENABLED Will add to MESON_ARGS:
# Option enabled -D${content}=enabled
# Option disabled -D${content}=disabled
# ${opt}_MESON_DISABLED Will add to MESON_ARGS:
# Option enabled -D${content}=disabled
# Option disabled -D${content}=enabled
#
# ${opt}_IMPLIES When opt is enabled, options named in IMPLIES will
# get enabled too.
# ${opt}_PREVENTS When opt is enabled, if any options in PREVENTS are
# also enabled, it will produce an error.
# ${opt}_PREVENTS_MSG Provides a message explaining why the options
# cannot be selected together.
#
# ${opt}_USE= FOO=bar When option is enabled, it will enable
# USE_FOO+= bar
# If you need more than one option, you can do
# FOO=bar,baz and you'll get USE_FOO=bar baz
# ${opt}_USE_OFF= FOO=bar When option is disabled, it will enable
# USE_FOO+= bar
#
# ${opt}_VARS= FOO=bar When option is enabled, it will set
# FOO= bar
# ${opt}_VARS= FOO+=bar When option is enabled, it will append
# FOO+= bar
# ${opt}_VARS_OFF= FOO=bar When option is disabled, it will set
# FOO= bar
# ${opt}_VARS_OFF= FOO+=bar When option is disabled, it will append
# FOO+= bar
#
# For each of the depends target PKG FETCH EXTRACT PATCH BUILD LIB RUN,
# defining ${opt}_${deptype}_DEPENDS will add its content to the actual
# dependency when the option is enabled. Defining
# ${opt}_${deptype}_DEPENDS_OFF will add its content to the actual dependency
# when the option is disabled.
#
# For each of the variables in _OPTIONS_FLAGS below, defining
# ${opt}_${variable} will add its content to the actual variable when the
# option is enabled. Defining ${opt}_${variable}_OFF will add its content to
# the actual variable when the option is disabled.
##
# Set all the options available for the ports, beginning with the
# global ones and ending with the ones decided by the maintainer.
.if !defined(OPTIONSMKINCLUDED)
OPTIONSMKINCLUDED= bsd.options.mk
OPTIONS_NAME?= ${PKGORIGIN:S/\//_/}
OPTIONS_FILE?= ${PORT_DBDIR}/${OPTIONS_NAME}/options
_OPTIONS_FLAGS= ALL_TARGET BROKEN CABAL_EXECUTABLES CATEGORIES CFLAGS CONFIGURE_ENV \
CONFLICTS CONFLICTS_BUILD CONFLICTS_INSTALL CPPFLAGS CXXFLAGS \
DESKTOP_ENTRIES DISTFILES EXTRA_PATCHES EXTRACT_ONLY \
GH_ACCOUNT GH_PROJECT GH_SUBDIR GH_TAGNAME GH_TUPLE \
GL_ACCOUNT GL_PROJECT GL_SITE GL_SUBDIR GL_TAGNAME GL_TUPLE \
IGNORE INFO INSTALL_TARGET LDFLAGS LIBS MAKE_ARGS MAKE_ENV \
MASTER_SITES PATCHFILES PATCH_SITES PLIST_DIRS PLIST_FILES \
PLIST_SUB PORTDOCS PORTEXAMPLES SUB_FILES SUB_LIST \
TEST_TARGET USE_CABAL USES BINARY_ALIAS
_OPTIONS_DEPENDS= PKG FETCH EXTRACT PATCH BUILD LIB RUN TEST
_ALL_OPTIONS_HELPERS= ${_OPTIONS_DEPENDS:S/$/_DEPENDS/} \
${_OPTIONS_DEPENDS:S/$/_DEPENDS_OFF/} \
${_OPTIONS_FLAGS:S/$/_OFF/} ${_OPTIONS_FLAGS} \
CABAL_FLAGS CMAKE_BOOL CMAKE_BOOL_OFF CMAKE_OFF CMAKE_ON \
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 \
ZIG_BOOL ZIG_BOOL_OFF \
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 \
extract:300:pre extract:500:do extract:700:post \
patch:300:pre patch:500:do patch:700:post \
configure:300:pre configure:500:do configure:700:post \
build:300:pre build:500:do build:700:post \
install:300:pre install:500:do install:700:post \
test:300:pre test:500:do test:700:post \
package:300:pre package:500:do package:700:post \
stage:800:post
# Add per arch options
. for opt in ${OPTIONS_DEFINE_${ARCH}}
. if empty(OPTIONS_DEFINE:M${opt})
OPTIONS_DEFINE+= ${opt}
. endif
. endfor
# Add per arch radio options
. for radio in ${OPTIONS_RADIO}
. for opt in ${OPTIONS_RADIO_${radio}_${ARCH}}
. if empty(OPTIONS_RADIO_${radio}:M${opt})
OPTIONS_RADIO_${radio}+= ${opt}
. endif
. endfor
. endfor
# Add per arch defaults
. if defined(OPTIONS_DEFAULT_${ARCH})
OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${ARCH}}
. else
OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_OTHER_ARCHS}
. endif
_ALL_EXCLUDE= ${OPTIONS_EXCLUDE_${ARCH}} ${OPTIONS_EXCLUDE} \
${OPTIONS_SLAVE} ${OPTIONS_EXCLUDE_${OPSYS}} \
${OPTIONS_EXCLUDE_${OPSYS}_${OSREL:R}}
. for opt in ${OPTIONS_DEFINE:O:u}
. if !${_ALL_EXCLUDE:M${opt}}
. for opt_implied in ${${opt}_IMPLIES}
. if ${_ALL_EXCLUDE:M${opt_implied}}
_ALL_EXCLUDE+= ${opt}
. endif
. endfor
. endif
. endfor
# Remove options the port maintainer doesn't want, part 1
. for opt in ${_ALL_EXCLUDE:O:u}
OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:N${opt}}
OPTIONS_DEFINE:= ${OPTIONS_DEFINE:N${opt}}
. for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
OPTIONS_${otype}_${m}:= ${OPTIONS_${otype}_${m}:N${opt}}
. endfor
. endfor
. endfor
# Remove empty SINGLE/GROUP/RADIO/MULTI
# Can be empty because of exclude/slaves
. for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
. if empty(OPTIONS_${otype}_${m})
OPTIONS_${otype}:= ${OPTIONS_${otype}:N${m}}
. endif
. endfor
. endfor
# Sort options
ALL_OPTIONS:= ${OPTIONS_DEFINE:O:u}
OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:O:u}
# complete list
COMPLETE_OPTIONS_LIST= ${ALL_OPTIONS}
. for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
COMPLETE_OPTIONS_LIST+= ${OPTIONS_${otype}_${m}}
. endfor
. endfor
# Some options are always enabled by default.
. for _opt in DOCS NLS EXAMPLES IPV6
. if ${COMPLETE_OPTIONS_LIST:M${_opt}}
PORT_OPTIONS+= ${_opt}
. endif
. endfor
# Remove options the port maintainer doesn't want, part 2
. for opt in ${_ALL_EXCLUDE:O:u}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
. endfor
## Now create the list of activated options
. if defined(OPTIONS_OVERRIDE)
# Special case $OPTIONS_OVERRIDE; if it is defined forget about anything done
# before
NEW_OPTIONS=
PORT_OPTIONS:= ${OPTIONS_OVERRIDE}
. else
NEW_OPTIONS= ${COMPLETE_OPTIONS_LIST}
## Set default options defined by the port maintainer
PORT_OPTIONS+= ${OPTIONS_DEFAULT}
## Set system-wide defined options (set by user in make.conf)
. for opt in ${OPTIONS_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Remove the options excluded system-wide (set by user in make.conf)
. for opt in ${OPTIONS_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Set the options specified per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Unset the options excluded per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## options files (from dialog)
. if exists(${OPTIONS_FILE}) && !make(rmconfig)
. include "${OPTIONS_FILE}"
. endif
. sinclude "${OPTIONS_FILE}.local"
_OPTIONS_UNIQUENAME= ${PKGNAMEPREFIX}${PORTNAME}
. for _k in SET UNSET SET_FORCE UNSET_FORCE
. if defined(${_OPTIONS_UNIQUENAME}_${_k})
WARNING+= "You are using ${_OPTIONS_UNIQUENAME}_${_k} which is not supported any more, use:"
WARNING+= "${OPTIONS_NAME}_${_k}= ${${_OPTIONS_UNIQUENAME}_${_k}}"
. endif
. endfor
## Finish by using the options set by the port config dialog, if any
. for opt in ${OPTIONS_FILE_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
. for opt in ${OPTIONS_FILE_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
. endif
## FORCE
## Set system-wide defined options (set by user in make.conf)
. for opt in ${OPTIONS_SET_FORCE}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Remove the options excluded system-wide (set by user in make.conf)
. for opt in ${OPTIONS_UNSET_FORCE}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Set the options specified per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_SET_FORCE}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Unset the options excluded per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_UNSET_FORCE}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Cmdline always win over the rest
. for opt in ${WITH}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
. for opt in ${WITHOUT}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Enable options implied by other options
# _PREVENTS is handled in bsd.port.mk:pre-check-config
## 1) Build dependency chain in A.B format:
_DEPCHAIN=
. for opt in ${COMPLETE_OPTIONS_LIST}
. for o in ${${opt}_IMPLIES}
_DEPCHAIN+= ${opt}.$o
. endfor
. endfor
## 2) Check each dependency pair and if LHS is in PORT_OPTIONS then add RHS.
## All of RHS of "RHS.*" (i.e. indirect dependency) are also added for
## fast convergence.
_PORT_OPTIONS:= ${PORT_OPTIONS}
. for _count in _0 ${COMPLETE_OPTIONS_LIST}
count= ${_count}
### Check if all of the nested dependency are resolved already.
. if ${count} == _0 || ${_PORT_OPTIONS} != ${PORT_OPTIONS}
PORT_OPTIONS:= ${_PORT_OPTIONS}
. for dc in ${_DEPCHAIN}
. for opt in ${_PORT_OPTIONS}
_opt=${opt}
### Add all of direct and indirect dependency only if
### they are not in ${PORT_OPTIONS}.
. if !empty(_opt:M${dc:R})
. for d in ${dc:E} ${_DEPCHAIN:M${dc:E}.*:E}
. if empty(_PORT_OPTIONS:M$d)
_PORT_OPTIONS+= $d
. endif
. endfor
. endif
. endfor
. endfor
. endif
. endfor
# Finally, add options required by slave ports
PORT_OPTIONS+= ${OPTIONS_SLAVE}
# Sort options and eliminate duplicates
PORT_OPTIONS:= ${PORT_OPTIONS:O:u}
_REALLY_ALL_POSSIBLE_OPTIONS:= ${COMPLETE_OPTIONS_LIST} ${_ALL_EXCLUDE}
_REALLY_ALL_POSSIBLE_OPTIONS:= ${_REALLY_ALL_POSSIBLE_OPTIONS:O:u}
# Handle PORTDOCS and PORTEXAMPLES
. for _type in DOCS EXAMPLES
. if !empty(_REALLY_ALL_POSSIBLE_OPTIONS:M${_type})
. if empty(PORT_OPTIONS:M${_type})
PLIST_SUB+= PORT${_type}="@comment "
. else
PLIST_SUB+= PORT${_type}=""
. endif
. endif
. endfor
. if defined(NO_OPTIONS_SORT)
ALL_OPTIONS= ${OPTIONS_DEFINE}
. endif
. for target in ${_OPTIONS_TARGETS:C/:.*//:u}
_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?=
SUB_LIST?=
. if defined(OPTIONS_SUB)
. if ! ${PLIST_SUB:M${opt}=*}
. if ${PORT_OPTIONS:M${opt}}
PLIST_SUB:= ${PLIST_SUB} ${opt}="" NO_${opt}="@comment "
. else
PLIST_SUB:= ${PLIST_SUB} ${opt}="@comment " NO_${opt}=""
. endif
. endif
. if ! ${SUB_LIST:M${opt}=*}
. if ${PORT_OPTIONS:M${opt}}
SUB_LIST:= ${SUB_LIST} ${opt}="" NO_${opt}="@comment "
. else
SUB_LIST:= ${SUB_LIST} ${opt}="@comment " NO_${opt}=""
. endif
. endif
. endif
. if ${PORT_OPTIONS:M${opt}}
. if defined(${opt}_USE)
. for option in ${${opt}_USE:C/=.*//:O:u}
_u= ${option}
USE_${_u:tu}+= ${${opt}_USE:M${option}=*:C/.*=//g:C/,/ /g}
. endfor
. endif
. if defined(${opt}_VARS)
. for var in ${${opt}_VARS:C/=.*//:O:u}
_u= ${var}
. if ${_u:M*+}
${_u:C/.$//:tu}+= ${${opt}_VARS:M${var}=*:C/[^+]*\+=//:C/^"(.*)"$$/\1/}
. else
${_u:tu}= ${${opt}_VARS:M${var}=*:C/[^=]*=//:C/^"(.*)"$$/\1/}
. endif
. endfor
. endif
. if defined(${opt}_CONFIGURE_ENABLE)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_ENABLE:S/^/--enable-/}
. endif
. if defined(${opt}_CONFIGURE_WITH)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_WITH:S/^/--with-/}
. endif
. if defined(${opt}_CMAKE_BOOL)
CMAKE_ARGS+= ${${opt}_CMAKE_BOOL:C/.*/-D&:BOOL=true/}
. endif
. if defined(${opt}_CMAKE_BOOL_OFF)
CMAKE_ARGS+= ${${opt}_CMAKE_BOOL_OFF:C/.*/-D&:BOOL=false/}
. endif
. if defined(${opt}_MESON_TRUE)
MESON_ARGS+= ${${opt}_MESON_TRUE:C/.*/-D&=true/}
. endif
. if defined(${opt}_MESON_FALSE)
MESON_ARGS+= ${${opt}_MESON_FALSE:C/.*/-D&=false/}
. endif
. if defined(${opt}_MESON_YES)
MESON_ARGS+= ${${opt}_MESON_YES:C/.*/-D&=yes/}
. endif
. if defined(${opt}_MESON_NO)
MESON_ARGS+= ${${opt}_MESON_NO:C/.*/-D&=no/}
. endif
. if defined(${opt}_MESON_ENABLED)
MESON_ARGS+= ${${opt}_MESON_ENABLED:C/.*/-D&=enabled/}
. endif
. if defined(${opt}_MESON_DISABLED)
MESON_ARGS+= ${${opt}_MESON_DISABLED:C/.*/-D&=disabled/}
. endif
. if defined(${opt}_CABAL_FLAGS)
CABAL_FLAGS+= ${${opt}_CABAL_FLAGS}
. endif
. if defined(${opt}_ZIG_BOOL)
ZIG_ARGS+= ${${opt}_ZIG_BOOL:C/.*/-D&=true/}
. endif
. for configure in CONFIGURE CMAKE MESON QMAKE
. if defined(${opt}_${configure}_ON)
${configure}_ARGS+= ${${opt}_${configure}_ON}
. endif
. endfor
. for flags in ${_OPTIONS_FLAGS}
. if defined(${opt}_${flags})
${flags}+= ${${opt}_${flags}}
. endif
. endfor
. for deptype in ${_OPTIONS_DEPENDS}
. 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/:.*//}
_prio= ${target:C/.*:(.*):.*/\1/}
_type= ${target:C/.*://}
_OPTIONS_${_target}:= ${_OPTIONS_${_target}} ${_prio}:${_type}-${_target}-${opt}-on
. endfor
. else
. if defined(${opt}_USE_OFF)
. for option in ${${opt}_USE_OFF:C/=.*//:O:u}
_u= ${option}
USE_${_u:tu}+= ${${opt}_USE_OFF:M${option}=*:C/.*=//g:C/,/ /g}
. endfor
. endif
. if defined(${opt}_VARS_OFF)
. for var in ${${opt}_VARS_OFF:C/=.*//:O:u}
_u= ${var}
. if ${_u:M*+}
${_u:C/.$//:tu}+= ${${opt}_VARS_OFF:M${var}=*:C/[^+]*\+=//:C/^"(.*)"$$/\1/}
. else
${_u:tu}= ${${opt}_VARS_OFF:M${var}=*:C/[^=]*=//:C/^"(.*)"$$/\1/}
. endif
. endfor
. endif
. if defined(${opt}_CONFIGURE_ENABLE)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_ENABLE:S/^/--disable-/:C/=.*//}
. endif
. if defined(${opt}_CONFIGURE_WITH)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_WITH:S/^/--without-/:C/=.*//}
. endif
. if defined(${opt}_CMAKE_BOOL)
CMAKE_ARGS+= ${${opt}_CMAKE_BOOL:C/.*/-D&:BOOL=false/}
. endif
. if defined(${opt}_CMAKE_BOOL_OFF)
CMAKE_ARGS+= ${${opt}_CMAKE_BOOL_OFF:C/.*/-D&:BOOL=true/}
. endif
. if defined(${opt}_MESON_TRUE)
MESON_ARGS+= ${${opt}_MESON_TRUE:C/.*/-D&=false/}
. endif
. if defined(${opt}_MESON_FALSE)
MESON_ARGS+= ${${opt}_MESON_FALSE:C/.*/-D&=true/}
. endif
. if defined(${opt}_MESON_YES)
MESON_ARGS+= ${${opt}_MESON_YES:C/.*/-D&=no/}
. endif
. if defined(${opt}_MESON_NO)
MESON_ARGS+= ${${opt}_MESON_NO:C/.*/-D&=yes/}
. endif
. if defined(${opt}_MESON_ENABLED)
MESON_ARGS+= ${${opt}_MESON_ENABLED:C/.*/-D&=disabled/}
. endif
. if defined(${opt}_MESON_DISABLED)
MESON_ARGS+= ${${opt}_MESON_DISABLED:C/.*/-D&=enabled/}
. endif
. if defined(${opt}_CABAL_FLAGS)
CABAL_FLAGS+= -${${opt}_CABAL_FLAGS}
. endif
. if defined(${opt}_ZIG_BOOL)
ZIG_ARGS+= ${${opt}_ZIG_BOOL:C/.*/-D&=false/}
. endif
. for configure in CONFIGURE CMAKE MESON QMAKE
. if defined(${opt}_${configure}_OFF)
${configure}_ARGS+= ${${opt}_${configure}_OFF}
. endif
. endfor
. for flags in ${_OPTIONS_FLAGS}
. if defined(${opt}_${flags}_OFF)
${flags}+= ${${opt}_${flags}_OFF}
. endif
. endfor
. for deptype in ${_OPTIONS_DEPENDS}
. 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/:.*//}
_prio= ${target:C/.*:(.*):.*/\1/}
_type= ${target:C/.*://}
_OPTIONS_${_target}:= ${_OPTIONS_${_target}} ${_prio}:${_type}-${_target}-${opt}-off
. endfor
. endif
. endfor
# Collect which options helpers are defined at this point for
# bsd.sanity.mk later to make sure no other options helper is
# defined after bsd.port.options.mk.
_OPTIONS_HELPERS_SEEN=
. for opt in ${_REALLY_ALL_POSSIBLE_OPTIONS}
. for helper in ${_ALL_OPTIONS_HELPERS}
. if defined(${opt}_${helper})
_OPTIONS_HELPERS_SEEN+= ${opt}_${helper}
. endif
. endfor
. endfor
.undef (SELECTED_OPTIONS)
.undef (DESELECTED_OPTIONS)
# Wait to expand PORT_OPTIONS until the last moment in case something modifies
# the selected OPTIONS after bsd.port.options.mk is included. This uses
# bmake's :@ for loop.
_SELECTED_OPTIONS= ${ALL_OPTIONS:@opt@${PORT_OPTIONS:M${opt}}@}
_DESELECTED_OPTIONS= ${ALL_OPTIONS:@opt@${"${PORT_OPTIONS:M${opt}}":?:${opt}}@}
. for otype in MULTI GROUP SINGLE RADIO
. for m in ${OPTIONS_${otype}}
_SELECTED_OPTIONS+= ${OPTIONS_${otype}_${m}:@opt@${PORT_OPTIONS:M${opt}}@}
_DESELECTED_OPTIONS+= ${OPTIONS_${otype}_${m}:@opt@${"${PORT_OPTIONS:M${opt}}":?:${opt}}@}
. endfor
. endfor
SELECTED_OPTIONS= ${_SELECTED_OPTIONS:O:u}
DESELECTED_OPTIONS= ${_DESELECTED_OPTIONS:O:u}
.endif