From 56dffda7c7841b6e255526603cdd2584fdbdde1a Mon Sep 17 00:00:00 2001 From: dillo Date: Sun, 8 May 2005 13:43:30 +0000 Subject: 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 --- mk/bsd.options.mk | 209 +++++++++++++++++++++++++----------------------------- 1 file changed, 98 insertions(+), 111 deletions(-) (limited to 'mk/bsd.options.mk') 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. (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,26 +47,22 @@ # 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 # ### @@ -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 -- cgit v1.2.3