bsd.options.mk provides boilerplate code for standard naming conventions

for handling per-package build options.

Before including this file, the following variables should 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
		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_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: "yes".

After including this file, the following variables are defined:

	PKG_OPTIONS
		This is the list of the selected build options, properly
		filtered to remove unsupported and duplicate options.

Example usage:

-------------8<-------------8<-------------8<-------------8<-------------
# Global and legacy options
.if defined(USE_OPENLDAP) || defined(USE_SASL2)
.  if !defined(PKG_OPTIONS.wibble)
.    if defined(USE_OPENLDAP) && !empty(USE_OPENLDAP:M[yY][eE][sS])
PKG_OPTIONS.wibble+=	ldap
.    endif
.    if defined(USE_SASL2) && !empty(USE_SASL2:M[yY][eE][sS])
PKG_OPTIONS.wibble+=	sasl
.    endif
.  endif
.endif

PKG_OPTIONS_VAR=	PKG_OPTIONS.wibble
PKG_SUPPORTED_OPTIONS=	ldap sasl
.include "../../mk/bsd.options.mk"

# Package-specific option-handling

###
### LDAP support
###
.if !empty(PKG_OPTIONS:Mldap)
.  include "../../databases/openldap/buildlink3.mk"
CONFIGURE_ARGS+=	--enable-ldap=${BUILDLINK_PREFIX.openldap}
.endif

###
### SASL authentication
###
.if !empty(PKG_OPTIONS:Msasl)
.  include "../../security/cyrus-sasl2/buildlink3.mk"
CONFIGURE_ARGS+=	--enable-sasl=${BUILDLINK_PREFIX.sasl}
.endif
-------------8<-------------8<-------------8<-------------8<-------------
This commit is contained in:
jlam 2004-07-30 20:59:08 +00:00
parent 0d19bcb7f6
commit 85306a8348
2 changed files with 170 additions and 1 deletions

164
mk/bsd.options.mk Normal file
View file

@ -0,0 +1,164 @@
# $NetBSD: bsd.options.mk,v 1.1 2004/07/30 20:59:08 jlam 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:
#
# 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
# 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_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: "yes".
#
# After including this file, the following variables are defined:
#
# PKG_OPTIONS
# This is the list of the selected build options, properly
# filtered to remove unsupported and duplicate options.
#
# Example usage:
#
# -------------8<-------------8<-------------8<-------------8<-------------
# # Global and legacy options
# .if defined(USE_OPENLDAP) || defined(USE_SASL2)
# . if !defined(PKG_OPTIONS.wibble)
# . if defined(USE_OPENLDAP) && !empty(USE_OPENLDAP:M[yY][eE][sS])
# PKG_OPTIONS.wibble+= ldap
# . endif
# . if defined(USE_SASL2) && !empty(USE_SASL2:M[yY][eE][sS])
# PKG_OPTIONS.wibble+= sasl
# . endif
# . endif
# .endif
#
# PKG_OPTIONS_VAR= PKG_OPTIONS.wibble
# PKG_SUPPORTED_OPTIONS= ldap sasl
# .include "../../mk/bsd.options.mk"
#
# # Package-specific option-handling
#
# ###
# ### LDAP support
# ###
# .if !empty(PKG_OPTIONS:Mldap)
# . include "../../databases/openldap/buildlink3.mk"
# CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap}
# .endif
#
# ###
# ### SASL authentication
# ###
# .if !empty(PKG_OPTIONS:Msasl)
# . include "../../security/cyrus-sasl2/buildlink3.mk"
# CONFIGURE_ARGS+= --enable-sasl=${BUILDLINK_PREFIX.sasl}
# .endif
# -------------8<-------------8<-------------8<-------------8<-------------
.include "../../mk/bsd.prefs.mk"
# Check for variable definitions required before including this file.
.if !defined(PKG_SUPPORTED_OPTIONS)
PKG_FAIL_REASON+= "bsd.options.mk: PKG_SUPPORTED_OPTIONS is not defined."
.endif
.if !defined(PKG_OPTIONS_VAR)
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
.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?= yes
# 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
# Store the result in the +BUILD_INFO file so we can query for the build
# options using "pkg_info -Q PKG_OPTIONS <pkg>".
#
BUILD_DEFS+= PKG_OPTIONS

View file

@ -1,4 +1,4 @@
# $NetBSD: bsd.prefs.mk,v 1.163 2004/07/30 07:38:01 xtraeme Exp $
# $NetBSD: bsd.prefs.mk,v 1.164 2004/07/30 20:59:08 jlam Exp $
#
# Make file, included to get the site preferences, if any. Should
# only be included by package Makefiles before any .if defined()
@ -298,9 +298,11 @@ PKG_INSTALLATION_TYPE?= none
. if empty(USE_INET6:M[Yy][Ee][Ss]) || defined(USE_SOCKS)
USE_INET6= NO
. else
PKG_DEFAULT_OPTIONS+= inet6
USE_INET6= YES
. endif
.elif empty(_OPSYS_HAS_INET6:M[nN][oO]) && !defined(USE_SOCKS)
PKG_DEFAULT_OPTIONS+= inet6
USE_INET6= YES
.else
USE_INET6= NO
@ -496,4 +498,7 @@ WRKDIR?= ${BUILD_DIR}/${WRKDIR_BASENAME}
#
WRKLOG?= ${WRKDIR}/.work.log
PKG_DEFAULT_OPTIONS?= # empty
PKG_OPTIONS?= # empty
.endif # BSD_PKG_MK