[BACK]Return to bsd.options.mk CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / mk

File: [cvs.NetBSD.org] / pkgsrc / mk / bsd.options.mk (download)

Revision 1.6, Tue Aug 10 05:33:05 2004 UTC (19 years, 8 months ago) by schmonz
Branch: MAIN
Changes since 1.5: +2 -2 lines

Fix spell-o.

# $NetBSD: bsd.options.mk,v 1.6 2004/08/10 05:33:05 schmonz 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

.PHONY: pre-install-depends supported-options-message
pre-install-depends: supported-options-message
.if !defined(PKG_SUPPORTED_OPTIONS)
supported-options-message: # do nothing
.else
supported-options-message: ${WRKDIR}/.som_done
${WRKDIR}/.som_done: ${WRKDIR}
.  if !empty(PKG_SUPPORTED_OPTIONS)
	@${ECHO} "=========================================================================="
	@${ECHO} "The supported build options for this package are:"
	@${ECHO} ""
	@${ECHO} "${PKG_SUPPORTED_OPTIONS}" | ${XARGS} -n 1 | ${SORT} |	\
	${AWK} '							\
		BEGIN { printwidth = 40; line = "" }			\
		{							\
			if (length(line) > 0)				\
				line = line" "$$0;			\
			else						\
				line = $$0;				\
			if (length(line) > 40) {			\
				print "	"line;				\
				line = "";				\
			}						\
		}							\
		END { if (length(line) > 0) print "	"line }		\
	'
	@${ECHO} ""
	@${ECHO} "You can select which build options to use by setting the following"
	@${ECHO} "variables.  Their 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_
	@${ECHO} ""
	@${ECHO} "=========================================================================="
	@${TOUCH} ${.TARGET}
.  endif
.endif