Clean up ecpg's use of mmerror(): const-ify the format argument, add an
[PostgreSQL.git] / config / general.m4
blob6765d07829564058592da56c8cc3d7ef6a3fc8a2
1 # $PostgreSQL$
3 # This file defines new macros to process configure command line
4 # arguments, to replace the brain-dead AC_ARG_WITH and AC_ARG_ENABLE.
5 # The flaw in these is particularly that they only differentiate
6 # between "given" and "not given" and do not provide enough help to
7 # process arguments that only accept "yes/no", that require an
8 # argument (other than "yes/no"), etc.
10 # The point of this implementation is to reduce code size and
11 # redundancy in configure.in and to improve robustness and consistency
12 # in the option evaluation code.
15 # Convert type and name to shell variable name (e.g., "enable_long_strings")
16 m4_define([pgac_arg_to_variable],
17           [$1[]_[]patsubst($2, -, _)])
20 # PGAC_ARG(TYPE, NAME, HELP-STRING-LHS-EXTRA, HELP-STRING-RHS,
21 #          [ACTION-IF-YES], [ACTION-IF-NO], [ACTION-IF-ARG],
22 #          [ACTION-IF-OMITTED])
23 # ------------------------------------------------------------
24 # This is the base layer. TYPE is either "with" or "enable", depending
25 # on what you like.  NAME is the rest of the option name.
26 # HELP-STRING-LHS-EXTRA is a string to append to the option name on
27 # the left-hand side of the help output, e.g., an argument name.  If
28 # set to "-", append nothing, but let the option appear in the
29 # negative form (disable/without).  HELP-STRING-RHS is the option
30 # description, for the right-hand side of the help output.
31 # ACTION-IF-YES is executed if the option is given without an argument
32 # (or "yes", which is the same); similar for ACTION-IF-NO.
34 AC_DEFUN([PGAC_ARG],
36 pgac_args="$pgac_args pgac_arg_to_variable([$1],[$2])"
37 m4_case([$1],
39 enable, [
40 AC_ARG_ENABLE([$2], [AS_HELP_STRING([--]m4_if($3, -, disable, enable)[-$2]m4_if($3, -, , $3), [$4])], [
41   case [$]enableval in
42     yes)
43       m4_default([$5], :)
44       ;;
45     no)
46       m4_default([$6], :)
47       ;;
48     *)
49       $7
50       ;;
51   esac
53 [$8])[]dnl AC_ARG_ENABLE
56 with, [
57 AC_ARG_WITH([$2], [AS_HELP_STRING([--]m4_if($3, -, without, with)[-$2]m4_if($3, -, , $3), [$4])], [
58   case [$]withval in
59     yes)
60       m4_default([$5], :)
61       ;;
62     no)
63       m4_default([$6], :)
64       ;;
65     *)
66       $7
67       ;;
68   esac
70 [$8])[]dnl AC_ARG_WITH
73 [m4_fatal([first argument of $0 must be 'enable' or 'with', not '$1'])]
75 ])# PGAC_ARG
77 # PGAC_ARG_CHECK()
78 # ----------------
79 # Checks if the user passed any --with/without/enable/disable
80 # arguments that were not defined. Just prints out a warning message,
81 # so this should be called near the end, so the user will see it.
83 AC_DEFUN([PGAC_ARG_CHECK],
84 [for pgac_var in `set | sed 's/=.*//' | $EGREP 'with_|enable_'`; do
85   for pgac_arg in $pgac_args with_gnu_ld; do
86     if test "$pgac_var" = "$pgac_arg"; then
87       continue 2
88     fi
89   done
90   pgac_txt=`echo $pgac_var | sed 's/_/-/g'`
91   AC_MSG_WARN([option ignored: --$pgac_txt])
92 done])# PGAC_ARG_CHECK
94 # PGAC_ARG_BOOL(TYPE, NAME, DEFAULT, HELP-STRING-RHS,
95 #               [ACTION-IF-YES], [ACTION-IF-NO])
96 # ---------------------------------------------------
97 # Accept a boolean option, that is, one that only takes yes or no.
98 # ("no" is equivalent to "disable" or "without"). DEFAULT is what
99 # should be done if the option is omitted; it should be "yes" or "no".
100 # (Consequently, one of ACTION-IF-YES and ACTION-IF-NO will always
101 # execute.)
103 AC_DEFUN([PGAC_ARG_BOOL],
104 [dnl The following hack is necessary because in a few instances this
105 dnl macro is called twice for the same option with different default
106 dnl values.  But we only want it to appear once in the help.  We achieve
107 dnl that by making the help string look the same, which is why we need to
108 dnl save the default that was passed in previously.
109 m4_define([_pgac_helpdefault], m4_ifdef([pgac_defined_$1_$2_bool], [m4_defn([pgac_defined_$1_$2_bool])], [$3]))dnl
110 PGAC_ARG([$1], [$2], [m4_if(_pgac_helpdefault, yes, -)], [$4], [$5], [$6], 
111           [AC_MSG_ERROR([no argument expected for --$1-$2 option])],
112           [m4_case([$3],
113                    yes, [pgac_arg_to_variable([$1], [$2])=yes
114 $5],
115                    no,  [pgac_arg_to_variable([$1], [$2])=no
116 $6],
117                    [m4_fatal([third argument of $0 must be 'yes' or 'no', not '$3'])])])[]dnl
118 m4_define([pgac_defined_$1_$2_bool], [$3])dnl
119 ])# PGAC_ARG_BOOL
122 # PGAC_ARG_REQ(TYPE, NAME, HELP-ARGNAME, HELP-STRING-RHS,
123 #              [ACTION-IF-GIVEN], [ACTION-IF-NOT-GIVEN])
124 # -------------------------------------------------------
125 # This option will require an argument; "yes" or "no" will not be
126 # accepted.  HELP-ARGNAME is a name for the argument for the help output.
128 AC_DEFUN([PGAC_ARG_REQ],
129 [PGAC_ARG([$1], [$2], [=$3], [$4],
130           [AC_MSG_ERROR([argument required for --$1-$2 option])],
131           [AC_MSG_ERROR([argument required for --$1-$2 option])],
132           [$5],
133           [$6])])# PGAC_ARG_REQ
136 # PGAC_ARG_OPTARG(TYPE, NAME, HELP-ARGNAME, HELP-STRING-RHS,
137 #                 [DEFAULT-ACTION], [ARG-ACTION],
138 #                 [ACTION-ENABLED], [ACTION-DISABLED])
139 # ----------------------------------------------------------
140 # This will create an option that behaves as follows: If omitted, or
141 # called with "no", then set the enable_variable to "no" and do
142 # nothing else. If called with "yes", then execute DEFAULT-ACTION. If
143 # called with argument, set enable_variable to "yes" and execute
144 # ARG-ACTION. Additionally, execute ACTION-ENABLED if we ended up with
145 # "yes" either way, else ACTION-DISABLED.
147 # The intent is to allow enabling a feature, and optionally pass an
148 # additional piece of information.
150 AC_DEFUN([PGAC_ARG_OPTARG],
151 [PGAC_ARG([$1], [$2], [@<:@=$3@:>@], [$4], [$5], [],
152           [pgac_arg_to_variable([$1], [$2])=yes
153 $6],
154           [pgac_arg_to_variable([$1], [$2])=no])
155 dnl Add this code only if there's a ACTION-ENABLED or ACTION-DISABLED.
156 m4_ifval([$7[]$8],
158 if test "[$]pgac_arg_to_variable([$1], [$2])" = yes; then
159   m4_default([$7], :)
160 m4_ifval([$8],
161 [else
162   $8
163 ])[]dnl
165 ])[]dnl
166 ])# PGAC_ARG_OPTARG