general.m4 4.7 KB
Newer Older
1
# $PostgreSQL: pgsql/config/general.m4,v 1.9 2006/11/30 22:21:23 tgl Exp $
2 3 4 5 6 7 8 9 10 11 12 13 14 15

# This file defines new macros to process configure command line
# arguments, to replace the brain-dead AC_ARG_WITH and AC_ARG_ENABLE.
# The flaw in these is particularly that they only differentiate
# between "given" and "not given" and do not provide enough help to
# process arguments that only accept "yes/no", that require an
# argument (other than "yes/no"), etc.
#
# The point of this implementation is to reduce code size and
# redundancy in configure.in and to improve robustness and consistency
# in the option evaluation code.


# Convert type and name to shell variable name (e.g., "enable_long_strings")
16 17
m4_define([pgac_arg_to_variable],
          [$1[]_[]patsubst($2, -, _)])
18 19 20 21 22 23 24 25 26


# PGAC_ARG(TYPE, NAME, HELP-STRING,
#          [ACTION-IF-YES], [ACTION-IF-NO], [ACTION-IF-ARG],
#          [ACTION-IF-OMITTED])
# ----------------------------------------------------------
# This is the base layer. TYPE is either "with" or "enable", depending
# on what you like. NAME is the rest of the option name, HELP-STRING
# as usual. ACTION-IF-YES is executed if the option is given without
Alvaro Herrera's avatar
Alvaro Herrera committed
27
# an argument (or "yes", which is the same); similar for ACTION-IF-NO.
28 29

AC_DEFUN([PGAC_ARG],
30
[
31
pgac_args="$pgac_args pgac_arg_to_variable([$1],[$2])"
32 33 34 35 36
m4_case([$1],

enable, [
AC_ARG_ENABLE([$2], [$3], [
  case [$]enableval in
37
    yes)
38
      m4_default([$4], :)
39 40
      ;;
    no)
41
      m4_default([$5], :)
42
      ;;
43
    *)
44 45
      $6
      ;;
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
  esac
],
[$7])[]dnl AC_ARG_ENABLE
],

with, [
AC_ARG_WITH([$2], [$3], [
  case [$]withval in
    yes)
      m4_default([$4], :)
      ;;
    no)
      m4_default([$5], :)
      ;;
    *)
      $6
      ;;
  esac
],
[$7])[]dnl AC_ARG_WITH
],

[m4_fatal([first argument of $0 must be 'enable' or 'with', not '$1'])]
)
70 71
])# PGAC_ARG

72 73 74 75 76
# PGAC_ARG_CHECK()
# ----------------
# Checks if the user passed any --with/without/enable/disable
# arguments that were not defined. Just prints out a warning message,
# so this should be called near the end, so the user will see it.
77

78 79 80 81 82 83
AC_DEFUN([PGAC_ARG_CHECK],
[for pgac_var in `set | sed 's/=.*//' | $EGREP 'with_|enable_'`; do
  for pgac_arg in $pgac_args with_gnu_ld; do
    if test "$pgac_var" = "$pgac_arg"; then
      continue 2
    fi
84
  done
85
  pgac_txt=`echo $pgac_var | sed 's/_/-/g'`
86 87
  AC_MSG_WARN([option ignored: --$pgac_txt])
done])# PGAC_ARG_CHECK
88 89 90 91 92 93 94 95 96 97 98

# PGAC_ARG_BOOL(TYPE, NAME, DEFAULT, HELP-STRING, 
#               [ACTION-IF-YES], [ACTION-IF-NO])
# -----------------------------------------------
# Accept a boolean option, that is, one that only takes yes or no.
# ("no" is equivalent to "disable" or "without"). DEFAULT is what
# should be done if the option is omitted; it should be "yes" or "no".
# (Consequently, one of ACTION-IF-YES and ACTION-IF-NO will always
# execute.)

AC_DEFUN([PGAC_ARG_BOOL],
99
[PGAC_ARG([$1], [$2], [$4], [$5], [$6], 
100
          [AC_MSG_ERROR([no argument expected for --$1-$2 option])],
101 102
          [m4_case([$3],
                   yes, [pgac_arg_to_variable([$1], [$2])=yes
103
$5],
104
                   no,  [pgac_arg_to_variable([$1], [$2])=no
105
$6],
106
                   [m4_fatal([third argument of $0 must be 'yes' or 'no', not '$3'])])])[]dnl
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
])# PGAC_ARG_BOOL


# PGAC_ARG_REQ(TYPE, NAME, HELP-STRING, [ACTION-IF-GIVEN], [ACTION-IF-NOT-GIVEN])
# -------------------------------------------------------------------------------
# This option will require an argument; "yes" or "no" will not be
# accepted.

AC_DEFUN([PGAC_ARG_REQ],
[PGAC_ARG([$1], [$2], [$3],
          [AC_MSG_ERROR([argument required for --$1-$2 option])],
          [AC_MSG_ERROR([argument required for --$1-$2 option])],
          [$4],
          [$5])])# PGAC_ARG_REQ


# PGAC_ARG_OPTARG(TYPE, NAME, HELP-STRING, [DEFAULT-ACTION], [ARG-ACTION]
#                 [ACTION-ENABLED], [ACTION-DISABLED])
# -----------------------------------------------------------------------
# This will create an option that behaves as follows: If omitted, or
# called with "no", then set the enable_variable to "no" and do
# nothing else. If called with "yes", then execute DEFAULT-ACTION. If
# called with argument, set enable_variable to "yes" and execute
# ARG-ACTION. Additionally, execute ACTION-ENABLED if we ended up with
# "yes" either way, else ACTION-DISABLED.
#
# The intent is to allow enabling a feature, and optionally pass an
# additional piece of information.

AC_DEFUN([PGAC_ARG_OPTARG],
[PGAC_ARG([$1], [$2], [$3], [$4], [],
          [pgac_arg_to_variable([$1], [$2])=yes
$5],
          [pgac_arg_to_variable([$1], [$2])=no])
dnl Add this code only if there's a ACTION-ENABLED or ACTION-DISABLED.
142
m4_ifval([$6[]$7],
143 144
[
if test "[$]pgac_arg_to_variable([$1], [$2])" = yes; then
145 146
  m4_default([$6], :)
m4_ifval([$7],
147 148 149 150 151 152
[else
  $7
])[]dnl
fi
])[]dnl
])# PGAC_ARG_OPTARG