diff options
Diffstat (limited to 'am')
-rw-r--r-- | am/grecs.m4 | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/am/grecs.m4 b/am/grecs.m4 index 72c6432..dfed409 100644 --- a/am/grecs.m4 +++ b/am/grecs.m4 @@ -1,4 +1,4 @@ -# This file is part of grecs - Gray's Extensible Configuration System +# This file is part of grecs - Gray's Extensible Configuration System -*- autoconf -*- # Copyright (C) 2007, 2009, 2010 Sergey Poznyakoff # # Grex is free software; you can redistribute it and/or modify @@ -14,12 +14,48 @@ # You should have received a copy of the GNU General Public License # along with Grex. If not, see <http://www.gnu.org/licenses/>. -# GRECS_SETUP([no-preproc]) +# _GRECS_MANGLE_OPTION(NAME) +# ------------------------- +# Convert NAME to a valid m4 identifier, by replacing invalid characters +# with underscores, and prepend the _GRECS_OPTION_ suffix to it. +AC_DEFUN([_GRECS_MANGLE_OPTION], +[[_GRECS_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _GRECS_SET_OPTION(NAME) +# ---------------------- +# Set option NAME. +AC_DEFUN([_GRECS_SET_OPTION], +[m4_define(_GRECS_MANGLE_OPTION([$1]), 1)]) + +# _GRECS_IF_OPTION_SET(NAME,IF-SET,IF-NOT-SET) +# ------------------------------------------- +# Check if option NAME is set. +AC_DEFUN([_GRECS_IF_OPTION_SET], +[m4_ifset(_GRECS_MANGLE_OPTION([$1]),[$2],[$3])]) + +# _GRECS_OPTION_SWITCH(NAME1,IF-SET1,[NAME2,IF-SET2,[...]],[IF-NOT-SET]) +# ------------------------------------------------------------------------ +# If NAME1 is set, run IF-SET1. Otherwise, if NAME2 is set, run IF-SET2. +# Continue the process for all name-if-set pairs within [...]. If none +# of the options is set, run IF-NOT-SET. +AC_DEFUN([_GRECS_OPTION_SWITCH], +[m4_if([$4],,[_GRECS_IF_OPTION_SET($@)],dnl +[$3],,[_GRECS_IF_OPTION_SET($@)],dnl +[_GRECS_IF_OPTION_SET([$1],[$2],[_GRECS_OPTION_SWITCH(m4_shift(m4_shift($@)))])])]) + +# _GRECS_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Gint options. +AC_DEFUN([_GRECS_SET_OPTIONS], +[m4_foreach_w([_GRECS_Option], [$1], [_GRECS_SET_OPTION(_GRECS_Option)])]) + +# GRECS_SETUP([no-preproc std-pp-setup pp-setup-option],[pp-setup-file]) AC_DEFUN([GRECS_SETUP],[ + _GRECS_SET_OPTIONS([$1]) # ********************** # Preprocessor # ********************** - m4_if($1,[no-preproc], + _GRECS_IF_OPTION_SET([no-preproc], [use_ext_pp=no], [AC_ARG_WITH([preprocessor], AC_HELP_STRING([--without-preprocessor], @@ -48,9 +84,25 @@ AC_DEFUN([GRECS_SETUP],[ DEFAULT_PREPROCESSOR=$PPBIN if test -n "$DEFAULT_PREPROCESSOR"; then DEFAULT_PREPROCESSOR="$DEFAULT_PREPROCESSOR $PREPROC_OPTIONS" - case $PPBIN in - *m4) AC_SUBST(PP_SETUP_FILE,'pp-setup');; # Install default pp-setup - esac + _GRECS_IF_OPTION_SET([std-pp-setup], + [PP_SETUP_FILE='pp-setup'], + [m4_if([$2],,[PP_SETUP_FILE=],[PP_SETUP_FILE='$2'])]) + AC_SUBST(PP_SETUP_FILE) + if test -n "$PP_SETUP_FILE"; then + _GRECS_IF_OPTION_SET([pp-setup-option], + [AC_ARG_WITH([pp-setup-file], + AC_HELP_STRING([--with-pp-setup-file], + [install the default pp-setup file]), + [case "${withval}" in + yes) ;; + no) PP_SETUP_FILE=;; + *) AC_MSG_ERROR([bad value ${withval} for --with-pp-setup-file]) ;; + esac])], + [case $PPBIN in + *m4) ;; # Install default pp-setup + *) PP_SETUP_FILE=;; # Skip it + esac]) + fi fi PATH=$save_PATH DEFAULT_PREPROCESSOR="\\\"$DEFAULT_PREPROCESSOR\\\"" |