summaryrefslogtreecommitdiff
path: root/mk/bsd.options.mk
diff options
context:
space:
mode:
authordillo <dillo@pkgsrc.org>2005-05-08 13:43:30 +0000
committerdillo <dillo@pkgsrc.org>2005-05-08 13:43:30 +0000
commit56dffda7c7841b6e255526603cdd2584fdbdde1a (patch)
tree7c82c5447c6c43ecc08a14a00017065f4d1817ec /mk/bsd.options.mk
parente86bd09e3c721c7d15ea9c83f025b227e3528c48 (diff)
downloadpkgsrc-56dffda7c7841b6e255526603cdd2584fdbdde1a.tar.gz
Rewrite how PKG_OPTIONS is computed:
- PKG_SUGGESTED_OPTIONS (set by pkg maintainer in pkg Makefile) lists options enabled by default. - PKG_DEFAULT_OPTIONS (set by user in /etc/mk.conf) enables or disables (when prefixed with `-') options for all packages, takes precedence over PKG_SUGGESTED_OPTIONS - PKG_OPTIONS.foo (set by user in /etc/mk.conf) enables or disables (when prefixed with `-') options for a specific package, takes precedence over PKG_DEFAULT_OPTIONS and PKG_SUGGESTED_OPTIONS Also simplify conversion of legacy USE_XXX variables to options via the new PKG_OPTIONS_LEGACY_VARS variable and emit warnings if legacy variables are in use. Add a new target describe-options that lists all supported options with a one-line description, the options enabled by default and the currently enabled optoions. Reviewed by jlam and wiz. XXX: defaults/options.description has to be filled in XXX: the pkgsrc guide has to be updated
Diffstat (limited to 'mk/bsd.options.mk')
-rw-r--r--mk/bsd.options.mk209
1 files changed, 98 insertions, 111 deletions
diff --git a/mk/bsd.options.mk b/mk/bsd.options.mk
index 130864e9b50..a1325ce65c6 100644
--- a/mk/bsd.options.mk
+++ b/mk/bsd.options.mk
@@ -1,54 +1,42 @@
-# $NetBSD: bsd.options.mk,v 1.19 2005/04/28 21:58:44 jlam Exp $
+# $NetBSD: bsd.options.mk,v 1.20 2005/05/08 13:43:30 dillo Exp $
#
# This Makefile fragment provides boilerplate code for standard naming
# conventions for handling per-package build options.
#
-# Before including this file, the following variables should be defined:
+# Before including this file, the following variables can be defined:
#
-# PKG_OPTIONS_VAR
-# This is a list of the name of the make(1) variables that
-# contain the options the user wishes to select. This
-# variable should be set in a package Makefile. E.g.,
-#
-# PKG_OPTIONS_VAR= WIBBLE_OPTIONS
-# or
-# PKG_OPTIONS_VAR= FOO_OPTIONS BAR_OPTIONS
-#
-# PKG_SUPPORTED_OPTIONS
+# PKG_SUPPORTED_OPTIONS (must be defined)
# This is a list of build options supported by the package.
# This variable should be set in a package Makefile. E.g.,
#
# PKG_SUPPORTED_OPTIONS= kerberos ldap ssl
#
-# Optionally, the following variables may also be defined:
+# PKG_OPTION_VAR (must be defined)
+# The variable the user can set to enable or disable
+# options specifically for this package.
+#
+# PKG_SUGGESTED_OPTIONS (defaults to empty)
+# This is a list of build options which are enabled by default.
+#
+# PKG_OPTION_LEGACY_VARS
+# This is a list of USE_VARIABLE:option pairs that
+# map legacy /etc/mk.conf variables to their option
+# counterparts.
+#
+#
+# Optionally, the user may define the following variables in /etc/mk.conf:
#
# PKG_DEFAULT_OPTIONS
-# This is a list the options that should be built into
-# every package, if that option is supported. This
-# variable should be set in /etc/mk.conf.
-#
-# ${PKG_OPTIONS_VAR} (the variables named in PKG_OPTIONS_VAR)
-# These variables list the selected build options and
-# override any default options given in PKG_DEFAULT_OPTIONS.
-# If any of the options begin with a '-', then that option
-# is always removed from the selected build options, e.g.
-#
-# PKG_DEFAULT_OPTIONS= kerberos ldap sasl
-# PKG_OPTIONS_VAR= WIBBLE_OPTIONS
-# WIBBLE_OPTIONS= ${PKG_DEFAULT_OPTIONS} -sasl
-# # implies PKG_OPTIONS == "kerberos ldap"
-# or
-# PKG_OPTIONS_VAR= WIBBLE_OPTIONS
-# WIBBLE_OPTIONS= kerberos -ldap ldap
-# # implies PKG_OPTIONS == "kerberos"
-#
-# This variable should be set in /etc/mk.conf.
-#
-# PKG_FAIL_UNSUPPORTED_OPTIONS
-# If this is set to "yes", then the presence of unsupported
-# options in PKG_OPTIONS.<pkg> (see below) causes the build
-# to fail. Set this to "no" to silently ignore unsupported
-# options. Default: "no".
+# This variable can be used to override default
+# options for every package. Options listed in this
+# variable will be enabled in every package that
+# supports them. If you prefix an option with `-',
+# it will be disabled in every package.
+#
+# ${PKG_OPTIONS_VAR}
+# This variable can be used to override default
+# options and options listed in PKG_DEFAULT_OPTIONS.
+# The syntax is the same as PKG_DEFAULT_OPTIONS.
#
# After including this file, the following variables are defined:
#
@@ -59,27 +47,23 @@
# Example usage:
#
# -------------8<-------------8<-------------8<-------------8<-------------
-# # Global and legacy options
-# .if defined(WIBBLE_USE_OPENLDAP) && !empty(WIBBLE_USE_OPENLDAP:M[yY][eE][sS])
-# PKG_DEFAULT_OPTIONS+= ldap
-# .endif
-# .if defined(WIBBLE_USE_SASL2) && !empty(WIBBLE_USE_SASL2:M[yY][eE][sS])
-# PKG_DEFAULT_OPTIONS+= sasl
-# .endif
+# PKG_SUPPORTED_OPTIONS= foo ldap sasl
+# PKG_SUGGESTED_OPTIONS= foo
+# PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap
+# PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_SASL2:sasl
#
-# PKG_OPTIONS_VAR= PKG_OPTIONS.wibble
-# PKG_SUPPORTED_OPTIONS= ldap sasl
-# #
-# # Default options for ``wibble'' package.
-# #
-# .if !defined(PKG_OPTIONS.wibble)
-# PKG_DEFAULT_OPTIONS+= sasl
-# .endif
# .include "../../mk/bsd.options.mk"
#
# # Package-specific option-handling
#
# ###
+# ### FOO support
+# ###
+# .if !empty(PKG_OPTIONS:Mfoo)
+# CONFIGURE_ARGS+= --enable-foo
+# .endif
+
+# ###
# ### LDAP support
# ###
# .if !empty(PKG_OPTIONS:Mldap)
@@ -106,59 +90,48 @@ PKG_FAIL_REASON+= "bsd.options.mk: PKG_SUPPORTED_OPTIONS is not defined."
PKG_FAIL_REASON+= "bsd.options.mk: PKG_OPTIONS_VAR is not defined."
.endif
-# If none of the variables listed in PKG_OPTIONS_VAR is defined, then use
-# the global options provided in ${PKG_DEFAULT_OPTIONS}.
-#
-_PKG_DEFAULT_OPTIONS= # empty
-.for _opt_ in ${PKG_DEFAULT_OPTIONS}
-. if !empty(PKG_SUPPORTED_OPTIONS:M${_opt_})
-_PKG_DEFAULT_OPTIONS+= ${_opt_}
-. endif
-.endfor
-.undef _opt_
-_PKG_OPTIONS_VAR= # empty
-.for _var_ in ${PKG_OPTIONS_VAR}
-. if defined(${_var_})
-_PKG_OPTIONS_VAR+= ${_var_}
-. endif
-.endfor
-.undef _var_
-.if empty(_PKG_OPTIONS_VAR)
-_PKG_OPTIONS_VAR= _PKG_DEFAULT_OPTIONS
+# include deprecated variable to options mapping
+.if exists(${.CURDIR}/mk/defaults/obsolete.mk)
+. include "${.CURDIR}/mk/defaults/obsolete.mk"
+.elif exists(${.CURDIR}/../mk/defaults/obsolete.mk)
+. include "${.CURDIR}/../mk/defaults/obsolete.mk"
+.elif exists(${.CURDIR}/../../mk/defaults/obsolete.mk)
+. include "${.CURDIR}/../../mk/defaults/obsolete.mk"
.endif
-# If this is set to "yes", then the presence of unsupported options in
-# the variable named by ${PKG_OPTIONS_VAR} causes the build to fail. Set
-# this to "no" to silently ignore unsupported options.
-#
-PKG_FAIL_UNSUPPORTED_OPTIONS?= no
-
-# Separate out the selected options into "positive" and "negative" lists.
-_PKG_YES_OPTIONS= # contains the "positive" options
-.for _var_ in ${_PKG_OPTIONS_VAR}
-_PKG_YES_OPTIONS+= ${${_var_}:N-*}
+.for _m_ in ${PKG_OPTIONS_LEGACY_VARS}
+.if !empty(PKG_SUPPORTED_OPTIONS:M${_m_:C/.*://}) && defined(${_m_:C/:.*//}) && !empty(${_m_:C/:.*//}:M[yY][eE][sS])
+_PKG_LEGACY_OPTIONS+=${_m_:C/.*://}
+_DEPRECATED_WARNING+="Deprecated variable "${_m_:C/:.*//:Q}" used, use PKG_DEFAULT_OPTIONS+="${_m_:C/.*://:Q}" instead."
+.endif
.endfor
-_PKG_NO_OPTIONS= # contains the "negative" options
-.for _var_ in ${_PKG_OPTIONS_VAR}
-_PKG_NO_OPTIONS+= ${${_var_}:M-*:S/^-//}
+
+#
+# reverse options in PKG_OPTIONS_VAR for backwards compatibility to
+# PKG_OPTIONS.foo=${PKG_DEFAULT_OPTIONS} -foo
+#
+_PKG_OPTIONS_USER=#empty
+.for _opt_ in ${${PKG_OPTIONS_VAR}}
+_PKG_OPTIONS_USER:=${_opt_} ${_PKG_OPTIONS_USER}
.endfor
-.undef _var_
-# Filter out unsupported and duplicate build options and store the result
-# in PKG_OPTIONS. We keep all of the "positive" options first, then remove
-# all of the "negative" options last, so "negative" options always have
-# the strongest effect.
-#
-PKG_OPTIONS= # empty
-.for _opt_ in ${_PKG_YES_OPTIONS}
-. if empty(_PKG_NO_OPTIONS:M${_opt_}) && empty(PKG_OPTIONS:M${_opt_})
-. if !empty(PKG_SUPPORTED_OPTIONS:M${_opt_})
-PKG_OPTIONS+= ${_opt_}
-. elif !empty(PKG_FAIL_UNSUPPORTED_OPTIONS:M[yY][eE][sS])
-PKG_FAIL_REASON+= "\"${_opt_}\" is not a supported build option."
-. endif
+#
+# process options from specific to generic
+#
+PKG_OPTIONS=#empty
+_PKG_OPTIONS_NOT=#empty
+.for _opt_ in ${_PKG_OPTIONS_USER} ${PKG_DEFAULT_OPTIONS} ${_PKG_LEGACY_OPTIONS} ${PKG_SUGGESTED_OPTIONS}
+_tmp_=${_opt_}
+. if !empty(_tmp_:M-*) && empty(_PKG_OPTIONS_NOT:M${_opt_})
+_PKG_OPTIONS_NOT+=${_opt_}
+. elif empty(PKG_OPTIONS:M${_opt_}) && !empty(PKG_SUPPORTED_OPTIONS:M${_opt_}) && empty(_PKG_OPTIONS_NOT:M-${_opt_})
+PKG_OPTIONS+=${_opt_}
. endif
.endfor
+.undef _opt_
+.undef _tmp_
+.undef _PKG_OPTIONS_NOT
+.undef _PKG_OPTIONS_USER
_PKG_OPTIONS_WORDWRAP_FILTER= \
${AWK} ' \
@@ -176,10 +149,20 @@ _PKG_OPTIONS_WORDWRAP_FILTER= \
END { if (length(line) > 0) print " "line } \
'
+.PHONY: describe-options
+describe-options:
+ @${ECHO} The following options are supported by this package:
+.for _opt_ in ${PKG_SUPPORTED_OPTIONS:O}
+ @${ECHO} " "${_opt_:Q}" "`${SED} -n "s/^"${_opt_:Q}" //p" ../../mk/defaults/options.description`
+.endfor
+ @${ECHO}
+ @${ECHO} "These options are enabled by default: "${PKG_SUGGESTED_OPTIONS:O:Q}
+ @${ECHO} "These options are currently enabled: "${PKG_OPTIONS:O:Q}
+
.PHONY: show-options
show-options:
@${ECHO} "available: "${PKG_SUPPORTED_OPTIONS:O:Q}
- @${ECHO} "default: "${PKG_DEFAULT_OPTIONS:O:Q}
+ @${ECHO} "default: "${PKG_SUGGESTED_OPTIONS:O:Q}
@${ECHO} "enabled: "${PKG_OPTIONS:O:Q}
.if defined(PKG_SUPPORTED_OPTIONS)
@@ -198,17 +181,21 @@ supported-options-message:
@${ECHO} ${PKG_OPTIONS:O:Q} | ${XARGS} -n 1 | ${_PKG_OPTIONS_WORDWRAP_FILTER}
. endif
@${ECHO} ""
- @${ECHO} "You can select which build options to use by setting the following"
- @${ECHO} "variables. Their current value is shown:"
+ @${ECHO} "You can select which build options to use by setting PKG_DEFAULT_OPTIONS"
+ @${ECHO} "or the following variable. Its current value is shown:"
@${ECHO} ""
-. for _var_ in ${PKG_OPTIONS_VAR}
-. if !defined(${_var_})
- @${ECHO} " ${_var_} (not defined)"
-. else
- @${ECHO} " ${_var_} = ${${_var_}}"
-. endif
-. endfor
-. undef _var_
+. if !defined(${PKG_OPTIONS_VAR})
+ @${ECHO} " ${PKG_OPTIONS_VAR} (not defined)"
+. else
+ @${ECHO} " ${PKG_OPTIONS_VAR} = ${${PKG_OPTIONS_VAR}}"
+. endif
+. if defined(_DEPRECATED_WARNING)
+ @${ECHO}
+ @for l in ${_DEPRECATED_WARNING}; \
+ do \
+ ${ECHO} "$$l"; \
+ done
+. endif
@${ECHO} ""
@${ECHO} "=========================================================================="
. endif