freebsd-ports/Mk/bsd.options.mk
Baptiste Daroussin 35982b23be Replace OPTIONSFILE by OPTIONS_FILE which is a more robust variable with unicity
insurance in its path to avoid collision.

A compatibility layer is available to automatically load and migration from
OPTIONSFILE to OPTIONS_FILE (this is all transparent for users.)

It is recommanded that ports that used to overwrite OPTIONSFILE to prevent the
known bugs should keep the OPTIONSFILE overwrite for a while (6 month) to allow
the migration to happen automatically and users to not lose their old save
options.

New options file is now based on the PKGORIGIN therefor the definition of the
PKGORIGIN has been moved ealier in bsd.port.mk to allow it's usage from withing
bsd.options.mk

PR:		ports/148637
Reviewed by:	bdrewery
2013-06-26 07:22:06 +00:00

367 lines
10 KiB
Makefile

#-*- tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
# These variables are used in port makefiles to define the options for a port.
#
# OPTIONS_DEFINE - List of options this ports accept
# OPTIONS_DEFINE_${ARCH} - List of options this ports accept 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_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_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.
# ${UNIQUENAME}_SET - List of options to enable for a specific port.
# ${UNIQUENAME}_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.
# ${UNIQUENAME}_SET_FORCE - List of options to enable for a specific port.
# ${UNIQUENAME}_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
##
# 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/\//_/}
OPTIONSFILE?= ${PORT_DBDIR}/${UNIQUENAME}/options
OPTIONS_FILE?= ${PORT_DBDIR}/${OPTIONS_NAME}/options
# Set the default values for the global options, as defined by portmgr
.if !defined(NOPORTDOCS)
PORT_OPTIONS+= DOCS
.endif
.if !defined(WITHOUT_NLS)
PORT_OPTIONS+= NLS
.endif
.if !defined(NOPORTEXAMPLES)
PORT_OPTIONS+= EXAMPLES
.endif
PORT_OPTIONS+= IPV6
# Add per arch options
.for opt in ${OPTIONS_DEFINE_${ARCH}}
.if empty(OPTIONS_DEFINE:M${opt})
OPTIONS_DEFINE+= ${opt}
.endif
.endfor
# Add per arch defaults
OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${ARCH}}
# Remove options the port maintainer doesn't want
.for opt in ${OPTIONS_EXCLUDE_${ARCH}} ${OPTIONS_EXCLUDE} ${OPTIONS_SLAVE}
OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:N${opt}}
OPTIONS_DEFINE:= ${OPTIONS_DEFINE:N${opt}}
PORT_OPTIONS:= ${PORT_OPTIONS: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
## 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
# XXX To remove once UNIQUENAME will be removed
## Set the options specified per-port (set by user in make.conf)
. for opt in ${${UNIQUENAME}_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 ${${UNIQUENAME}_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
# XXX To remove once UNIQUENAME will be removed
## 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}
. endif
. endfor
PORT_OPTIONS:= ${PORT_OPTIONS:O:u}
## Unset the options excluded per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
. endfor
# XXX to remove once UNIQUENAME is removed
## options files (from dialog)
. if exists(${OPTIONSFILE}) && !make(rmconfig)
. include "${OPTIONSFILE}"
. endif
. if exists(${OPTIONSFILE}.local)
. include "${OPTIONSFILE}.local"
. endif
# XXX to remove once UNIQUENAME is removed
## options files (from dialog)
. if exists(${OPTIONS_FILE}) && !make(rmconfig)
. include "${OPTIONS_FILE}"
. endif
. if exists(${OPTIONS_FILE}.local)
. include "${OPTIONS_FILE}.local"
. endif
### convert WITH and WITHOUT found in make.conf or reloaded from old optionsfile
.for opt in ${ALL_OPTIONS}
.if defined(WITH_${opt})
PORT_OPTIONS+= ${opt}
.endif
.if defined(WITHOUT_${opt})
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
.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 ${${UNIQUENAME}_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 ${${UNIQUENAME}_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
# Finally, add options required by slave ports
PORT_OPTIONS+= ${OPTIONS_SLAVE}
# Sort options and eliminate duplicates
PORT_OPTIONS:= ${PORT_OPTIONS:O:u}
## Now some compatibility
.if empty(PORT_OPTIONS:MDOCS)
NOPORTDOCS= yes
.endif
.if empty(PORT_OPTIONS:MEXAMPLES)
NOPORTEXAMPLES= yes
.endif
.if empty(PORT_OPTIONS:MNLS)
WITHOUT_NLS= yes
.endif
.if defined(NO_OPTIONS_SORT)
ALL_OPTIONS= ${OPTIONS_DEFINE}
.endif
### to be removed once old OPTIONS disappear
.for opt in ${ALL_OPTIONS}
.if empty(PORT_OPTIONS:M${opt})
. if !defined(WITH_${opt}) && !defined(WITHOUT_${opt})
WITHOUT_${opt}:= true
. endif
.else
. if !defined(WITH_${opt}) && !defined(WITHOUT_${opt})
WITH_${opt}:= true
. endif
.endif
.endfor
###
.for opt in ${COMPLETE_OPTIONS_LIST}
# PLIST_SUB
PLIST_SUB?=
. if defined(OPTIONS_SUB)
. if ! ${PLIST_SUB:M${opt}=*}
. if ${PORT_OPTIONS:M${opt}}
PLIST_SUB:= ${PLIST_SUB} ${opt}=""
. else
PLIST_SUB:= ${PLIST_SUB} ${opt}="@comment "
. endif
. endif
. endif
. if ${PORT_OPTIONS:M${opt}}
. if defined(${opt}_CONFIGURE_ENABLE)
CONFIGURE_ARGS+= --enable-${${opt}_CONFIGURE_ENABLE}
. endif
. if defined(${opt}_CONFIGURE_ON)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_ON}
. endif
. if defined(${opt}_CMAKE_ON)
CMAKE_ARGS+= ${${opt}_CMAKE_ON}
. endif
. for flags in CFLAGS CXXFLAGS LDFLAGS CONFIGURE_ENV MAKE_ENV USES DISTFILES
. if defined(${opt}_${flags})
${flags}+= ${${opt}_${flags}}
. endif
. endfor
. for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN
. if defined(${opt}_${deptype}_DEPENDS)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS}
. endif
. endfor
. else
. if defined(${opt}_CONFIGURE_ENABLE)
CONFIGURE_ARGS+= --disable-${${opt}_CONFIGURE_ENABLE}
. endif
. if defined(${opt}_CONFIGURE_OFF)
CONFIGURE_ARGS+= ${${opt}_CONFIGURE_OFF}
. endif
. if defined(${opt}_CMAKE_OFF)
CMAKE_ARGS+= ${${opt}_CMAKE_OFF}
. endif
. endif
.endfor
.endif