pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/mk Rewrite how PKG_OPTIONS is computed:



details:   https://anonhg.NetBSD.org/pkgsrc/rev/a792724ababe
branches:  trunk
changeset: 493521:a792724ababe
user:      dillo <dillo%pkgsrc.org@localhost>
date:      Sun May 08 13:43:30 2005 +0000

description:
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:

 mk/bsd.options.mk               |  213 ++++++++++++++++------------------
 mk/defaults/mk.conf             |   10 +-
 mk/defaults/obsolete.mk         |   98 +++++----------
 mk/defaults/options.description |  242 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 377 insertions(+), 186 deletions(-)

diffs (truncated from 658 to 300 lines):

diff -r 20518eb119ad -r a792724ababe mk/bsd.options.mk
--- a/mk/bsd.options.mk Sun May 08 13:29:09 2005 +0000
+++ b/mk/bsd.options.mk Sun May 08 13:43:30 2005 +0000
@@ -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.
+#               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_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".
+#      ${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_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}.
+# 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
+
+.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_DEFAULT_OPTIONS=  # empty
-.for _opt_ in ${PKG_DEFAULT_OPTIONS}
-.  if !empty(PKG_SUPPORTED_OPTIONS:M${_opt_})
-_PKG_DEFAULT_OPTIONS+= ${_opt_}
+# 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
+
+#
+# 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_
-_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
-.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-*}
-.endfor
-_PKG_NO_OPTIONS=       # contains the "negative" options
-.for _var_ in ${_PKG_OPTIONS_VAR}
-_PKG_NO_OPTIONS+=      ${${_var_}:M-*:S/^-//}
-.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
-.  endif
-.endfor
+.undef _tmp_
+.undef _PKG_OPTIONS_NOT
+.undef _PKG_OPTIONS_USER
 
 _PKG_OPTIONS_WORDWRAP_FILTER=                                          \
        ${AWK} '                                                        \
@@ -176,10 +149,20 @@
                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 @@
        @${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
diff -r 20518eb119ad -r a792724ababe mk/defaults/mk.conf
--- a/mk/defaults/mk.conf       Sun May 08 13:29:09 2005 +0000
+++ b/mk/defaults/mk.conf       Sun May 08 13:43:30 2005 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mk.conf,v 1.39 2005/05/07 22:17:00 wiz Exp $
+# $NetBSD: mk.conf,v 1.40 2005/05/08 13:43:30 dillo Exp $
 #
 
 # A file providing defaults for pkgsrc and the packages collection.
@@ -2443,11 +2443,3 @@
 #      ftp://ftp2.fr.NetBSD.org/pub/NetBSD/packages/distfiles/
 #MASTER_SITE_LOCAL=    \
 #      ftp://ftp.fr.NetBSD.org/pub/NetBSD/packages/distfiles/LOCAL_PORTS/
-
-.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
diff -r 20518eb119ad -r a792724ababe mk/defaults/obsolete.mk
--- a/mk/defaults/obsolete.mk   Sun May 08 13:29:09 2005 +0000
+++ b/mk/defaults/obsolete.mk   Sun May 08 13:43:30 2005 +0000
@@ -1,4 +1,4 @@



Home | Main Index | Thread Index | Old Index