Introduce AE_FEATURE to manage configure features
authorMichael Jeanson <mjeanson@efficios.com>
Thu, 10 Sep 2020 15:06:28 +0000 (11:06 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 28 Oct 2020 20:26:55 +0000 (16:26 -0400)
The new AE_FEATURE set of macros are wrappers over autoconf's
AC_ARG_ENABLE. The main objective is to make the m4sh code more readable
to the less seasoned autotools enthusiast among us and reduce the
duplication of code with it's associated bugs.

The AE prefix was chosen to mean "Autotools EfficiOS" and is part of an
effort to standardize our custom macros across all our autotools based
projects.

Change-Id: I7f802cb026ab4a386e05b27aaed56a5f189d0391
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
configure.ac
m4/ae_config_feature.m4 [new file with mode: 0644]

index 85677c83dc64507171e0599db34790c42f4c253d..24a2d212a2f09afca0d75ff411ec120e471cfefe 100644 (file)
@@ -61,12 +61,11 @@ AM_SILENT_RULES([yes])
 ##                      ##
 
 MINGW32=no
-DEFAULT_ENABLE_DEBUG_INFO=yes
 LT_NO_UNDEFINED=""
 AS_CASE([$host_os],
   [solaris*|darwin*],
     [
-       DEFAULT_ENABLE_DEBUG_INFO=no
+       AE_FEATURE_DISABLE([debug-info])
     ],
   [freebsd*],
     [
@@ -74,13 +73,13 @@ AS_CASE([$host_os],
     ],
   [cygwin*],
     [
-       DEFAULT_ENABLE_DEBUG_INFO=no
+       AE_FEATURE_DISABLE([debug-info])
        LT_NO_UNDEFINED="-no-undefined"
     ],
   [mingw*],
     [
        MINGW32=yes
-       DEFAULT_ENABLE_DEBUG_INFO=no
+       AE_FEATURE_DISABLE([debug-info])
        LT_NO_UNDEFINED="-no-undefined"
     ]
 )
@@ -309,6 +308,7 @@ AC_CHECK_LIB([c], [posix_fallocate],
   [AC_DEFINE_UNQUOTED([BABELTRACE_HAVE_POSIX_FALLOCATE], 1, [Has posix_fallocate support.])]
 )
 
+
 ##                 ##
 ## User variables  ##
 ##                 ##
@@ -355,143 +355,128 @@ AS_IF([test "x$BABELTRACE_DEBUG_MODE" = x1], [
 
 # Python bindings
 # Disabled by default
-AC_ARG_ENABLE([python-bindings],
-  [AS_HELP_STRING([--enable-python-bindings],[build the Python bindings])],
-  [], dnl AC_ARG_ENABLE will fill enable_python_bindings with the user choice
-  [enable_python_bindings=unspecified]
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([python-bindings],[build the Python bindings])
 
 # Python bindings documentation
 # Disabled by default
-AC_ARG_ENABLE([python-bindings-doc],
-  [AS_HELP_STRING([--enable-python-bindings-doc],[build the Python bindings documentation])],
-  [], dnl AC_ARG_ENABLE will fill enable_python_bindings_doc with the user choice
-  [enable_python_bindings_doc=no]
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([python-bindings-doc],[build the Python bindings documentation])
 
 # Python plugins
 # Disabled by default
-AC_ARG_ENABLE([python-plugins],
-  [AS_HELP_STRING([--enable-python-plugins],[enable the Python plugins support for the library and converter])]
-  dnl AC_ARG_ENABLE will fill enable_python_plugins with the user choice
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([python-plugins],[enable the Python plugins support for the library and converter])
 
 # Debug info
 # Enabled by default, except on some platforms
-AC_ARG_ENABLE([debug-info],
-  [AS_HELP_STRING([--disable-debug-info],[disable the debug info support (default on macOS, Solaris and Windows)])],
-  [], dnl AC_ARG_ENABLE will fill enable_debug_info with the user choice
-  [enable_debug_info="$DEFAULT_ENABLE_DEBUG_INFO"]
-)
+AE_FEATURE_DEFAULT_ENABLE
+AE_FEATURE([debug-info],[disable the debug info support (default on macOS, Solaris and Windows)])
 
 # API documentation
 # Disabled by default
-AC_ARG_ENABLE([api-doc],
-  [AS_HELP_STRING([--enable-api-doc],[build the HTML API documentation])],
-  [enable_api_doc=$enableval]
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([api-doc],[build the HTML API documentation])
 
 # Built-in plugins
 # Disabled by default
-AC_ARG_ENABLE([built-in-plugins],
-  [AS_HELP_STRING([--enable-built-in-plugins],[Statically-link in-tree plug-ins into the babeltrace2 executable])]
-  dnl AC_ARG_ENABLE will fill enable_built_in_plugins with the user choice
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([built-in-plugins],[Statically-link in-tree plug-ins into the babeltrace2 executable])
 
 # Built-in python plugin support
 # Disabled by default
-AC_ARG_ENABLE([built-in-python-plugin-support],
-  [AS_HELP_STRING([--enable-built-in-python-plugin-support],[Statically-link Python plugin support into the babeltrace library])]
-  dnl AC_ARG_ENABLE will fill enable_built_in_python_plugin_support with the user choice
-)
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([built-in-python-plugin-support],[Statically-link Python plugin support into the babeltrace library])
 
 # Man pages
 # Enabled by default
-AC_ARG_ENABLE([man-pages],
-  [AS_HELP_STRING([--disable-man-pages], [Do not build and install man pages (already built in a distributed tarball])],
-  [], dnl AC_ARG_ENABLE will fill enable_man_pages with the user choice
-  [enable_man_pages=yes]
-)
+AE_FEATURE_DEFAULT_ENABLE
+AE_FEATURE([man-pages],[Do not build and install man pages (already built in a distributed tarball])
 
+# When given, add -Werror to WARN_CFLAGS.
+# Disabled by default
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([Werror],[Treat compiler warnings as errors.])
 
-# Set automake variables for optionnal feature conditionnals in Makefile.am
-AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS], [test "x$enable_python_bindings" = xyes])
-AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS_DOC], [test "x$enable_python_bindings_doc" = xyes])
-AM_CONDITIONAL([ENABLE_PYTHON_PLUGINS], [test "x$enable_python_plugins" = xyes])
-AM_CONDITIONAL([ENABLE_DEBUG_INFO], [test "x$enable_debug_info" = xyes])
-AM_CONDITIONAL([ENABLE_API_DOC], [test "x$enable_api_doc" = xyes])
-AM_CONDITIONAL([ENABLE_BUILT_IN_PLUGINS], [test "x$enable_built_in_plugins" = xyes])
-AM_CONDITIONAL([ENABLE_BUILT_IN_PYTHON_PLUGIN_SUPPORT], [test "x$enable_built_in_python_plugin_support" = xyes])
-AM_CONDITIONAL([ENABLE_MAN_PAGES], [test "x$enable_man_pages" = xyes])
-AM_CONDITIONAL([ENABLE_PYTHON_COMMON_DEPS], [test "x$enable_python_bindings" = xyes || test "x$enable_python_plugins" = xyes])
 
-# Set defines for optionnal features conditionnals in the source code
+##                                          ##
+## Check for conflicting features selection ##
+##                                          ##
 
-AS_IF([test "x$enable_built_in_plugins" = xyes],
-  [AC_DEFINE([BT_BUILT_IN_PLUGINS], [1], [Define to 1 to register plug-in attributes in static executable sections])]
-)
+# Check for conflicting Python related features user choices.
+AE_IF_FEATURE_ENABLED([python-plugins], [
+  AE_IF_FEATURE_UNDEF([python-bindings], [
+    # --enable-python-plugins was provided but --enable-python-bindings was
+    # omitted. Turn the Python bindings ON anyway because it's needed to
+    # use the Python plugins.
+    AE_FEATURE_ENABLE([python-bindings])
+  ], [
+    AE_IF_FEATURE_DISABLED([python-bindings], [
+      # --enable-python-plugins _and_ --disable-python-bindings were
+      # used. This is invalid because Python plugins need the Python
+      # bindings to be useful.
+      AC_MSG_ERROR(--enable-python-bindings must be used to support Python plugins)
+    ])
+  ])
+])
 
-AS_IF([test "x$enable_built_in_python_plugin_support" = xyes],
-  [AC_DEFINE([BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT], [1], [Define to 1 to register plug-in attributes in static executable sections])]
-)
+# Check for conflicting optional features user choices
+AE_IF_FEATURE_ENABLED([built-in-plugins], [
+    # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
+    AE_IF_FEATURE_NOT_ENABLED([static], [AC_MSG_ERROR(--enable-static must be used to bundle plug-ins in the babeltrace2 executable)])
+    AE_IF_FEATURE_ENABLED([shared], [AC_MSG_ERROR(--disable-shared must be used to bundle plug-ins in the babeltrace2 executable)])
+])
 
-AS_IF([test "x$enable_debug_info" = xyes],
-  [ENABLE_DEBUG_INFO_VAL=1],
-  [ENABLE_DEBUG_INFO_VAL=0]
-)
+AE_IF_FEATURE_ENABLED([built-in-python-plugin-support], [
+    AE_IF_FEATURE_NOT_ENABLED([python-plugins], [AC_MSG_ERROR([--enable-python-plugins must be used to bundle Python plugin support in the babeltrace2 executable])])
+    # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
+    AE_IF_FEATURE_NOT_ENABLED([static], [AC_MSG_ERROR(--enable-static must be used to bundle Python plugin support in the babeltrace2 executable)])
+    AE_IF_FEATURE_ENABLED([shared], [AC_MSG_ERROR(--disable-shared must be used to bundle Python plugin support in the babeltrace2 executable)])
+])
 
-AC_SUBST([ENABLE_DEBUG_INFO_VAL])
 
-# Check for conflicting Python related features user choices.
-AS_IF([test "x$enable_python_plugins" = xyes],
-  [
-    AS_IF([test "x$enable_python_bindings" = xunspecified],
-      [
-        # --enable-python-plugins was provided but --enable-python-bindings was
-        # omitted. Turn the Python bindings ON anyway because it's needed to
-        # use the Python plugins.
-        enable_python_bindings=yes
-      ],
-      [
-        AS_IF([test "x$enable_python_bindings" = xno],
-          [
-            # --enable-python-plugins _and_ --disable-python-bindings were
-            # used. This is invalid because Python plugins need the Python
-            # bindings to be useful.
-            AC_MSG_ERROR(--enable-python-bindings must be used to support Python plugins)
-          ]
-        )
-      ]
-    )
-  ]
-)
+##                                                                           ##
+## Set automake variables for optionnal feature conditionnals in Makefile.am ##
+##                                                                           ##
 
-# Check for conflicting optional features user choices
+AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS], AE_IS_FEATURE_ENABLED([python-bindings]))
+AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS_DOC], AE_IS_FEATURE_ENABLED([python-bindings-doc]))
+AM_CONDITIONAL([ENABLE_PYTHON_PLUGINS], AE_IS_FEATURE_ENABLED([python-plugins]))
+AM_CONDITIONAL([ENABLE_DEBUG_INFO], AE_IS_FEATURE_ENABLED([debug-info]))
+AM_CONDITIONAL([ENABLE_API_DOC], AE_IS_FEATURE_ENABLED([api-doc]))
+AM_CONDITIONAL([ENABLE_BUILT_IN_PLUGINS], AE_IS_FEATURE_ENABLED([built-in-plugins]))
+AM_CONDITIONAL([ENABLE_BUILT_IN_PYTHON_PLUGIN_SUPPORT], AE_IS_FEATURE_ENABLED([built-in-python-plugin-support]))
+AM_CONDITIONAL([ENABLE_MAN_PAGES], AE_IS_FEATURE_ENABLED([man-pages]))
+AM_CONDITIONAL([ENABLE_PYTHON_COMMON_DEPS], AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins]))
 
-AS_IF([test "x$enable_built_in_plugins" = xyes],
-  [
-    # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
-    AS_IF([test "x$enable_static" != xyes], [AC_MSG_ERROR(--enable-static must be used to bundle plug-ins in the babeltrace2 executable)])
-    AS_IF([test "x$enable_shared" = xyes], [AC_MSG_ERROR(--disable-shared must be used to bundle plug-ins in the babeltrace2 executable)])
-  ]
+
+##                                                                     ##
+## Set defines for optionnal features conditionnals in the source code ##
+##                                                                     ##
+
+AE_IF_FEATURE_ENABLED([built-in-plugins],
+  [AC_DEFINE([BT_BUILT_IN_PLUGINS], [1], [Define to 1 to register plug-in attributes in static executable sections])]
 )
 
-AS_IF([test "x$enable_built_in_python_plugin_support" = xyes],
-  [
-    AS_IF([test "x$enable_python_plugins" != xyes], [AC_MSG_ERROR([--enable-python-plugins must be used to bundle Python plugin support in the babeltrace2 executable])])
-    # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
-    AS_IF([test "x$enable_static" != xyes], [AC_MSG_ERROR(--enable-static must be used to bundle Python plugin support in the babeltrace2 executable)])
-    AS_IF([test "x$enable_shared" = xyes], [AC_MSG_ERROR(--disable-shared must be used to bundle Python plugin support in the babeltrace2 executable)])
-  ]
+AE_IF_FEATURE_ENABLED([built-in-python-plugin-support],
+  [AC_DEFINE([BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT], [1], [Define to 1 to register plug-in attributes in static executable sections])]
 )
 
+AE_IF_FEATURE_ENABLED([debug-info], [ENABLE_DEBUG_INFO_VAL=1], [ENABLE_DEBUG_INFO_VAL=0])
+AC_SUBST([ENABLE_DEBUG_INFO_VAL])
+
 
-# Check for optionnal features dependencies
+##                                           ##
+## Check for optionnal features dependencies ##
+##                                           ##
 
-AS_IF([test "x$enable_python_bindings" = xyes],
+# The Python bindings require SWIG
+AE_IF_FEATURE_ENABLED([python-plugins],
   [AX_PKG_SWIG(2.0.0, [], [AC_MSG_ERROR([SWIG 2.0.0 or newer is required to build the python bindings])])]
 )
 
+# Always check for python, we will fail later if some features require it and
+# it's unavailable.
 AM_PATH_PYTHON([3.0], [
   AM_PATH_PYTHON_MODULES([PYTHON])
 
@@ -532,26 +517,26 @@ AS_IF([test -n "$PYTHON_CONFIG"], [have_python_dev=yes], [have_python_dev=no])
 AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = xyes])
 AM_CONDITIONAL([HAVE_PYTHON_DEV], [test "x$have_python_dev" = xyes])
 
-AS_IF([test "x$enable_python_bindings" = xyes || test "x$enable_python_plugins" = xyes], [
+AS_IF([AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins])], [
   AS_IF([test "x$have_python_dev" = xno], [
     AC_MSG_ERROR([Cannot find a suitable python-config. You can override the python-config path with the PYTHON_CONFIG environment variable.])
   ])
 ])
 
-AS_IF([test "x$enable_python_bindings_doc" = xyes],
+AE_IF_FEATURE_ENABLED([python-bindings-doc],
   [
     AM_CHECK_PYTHON_SPHINX([PYTHON])
     AS_IF([test "x$PYTHON_SPHINX_EXISTS" = xno], [
       AC_MSG_ERROR([The Sphinx package for Python 3 is required to build the Python bindings documentation])
     ])
 
-    AS_IF([test "x$enable_python_bindings" != xyes], [
+    AE_IF_FEATURE_NOT_ENABLED([python-bindings], [
       AC_MSG_ERROR([The Python bindings are required to build their documentation])
     ])
   ]
 )
 
-AS_IF([test "x$enable_debug_info" = xyes], [
+AE_IF_FEATURE_ENABLED([debug-info], [
   # Check if libelf and libdw are present
   PKG_CHECK_MODULES([ELFUTILS], [libelf >= 0.154 libdw >= 0.154],
     [
@@ -563,7 +548,7 @@ AS_IF([test "x$enable_debug_info" = xyes], [
 ])
 AC_SUBST([ELFUTILS_LIBS])
 
-AS_IF([test "x$enable_api_doc" = "xyes"],
+AE_IF_FEATURE_ENABLED([api-doc],
   [
     DX_DOXYGEN_FEATURE(ON)
     DX_DOT_FEATURE(OFF)
@@ -588,7 +573,7 @@ warn_prebuilt_man_pages=no
 AC_PATH_PROG([ASCIIDOC], [asciidoc], [no])
 AC_PATH_PROG([XMLTO], [xmlto], [no])
 
-AS_IF([test "x$enable_man_pages" = "xyes"], [
+AE_IF_FEATURE_ENABLED([man-pages], [
   AS_IF([test "x$ASCIIDOC" = "xno" || test "x$XMLTO" = "xno"], [
     AS_IF([test "x$in_git_repo" = "xyes"], [
       # this is an error because we're in the Git repo, which
@@ -631,6 +616,9 @@ AS_IF([test "x$exec_prefix" = xNONE], [
 
 AC_SUBST(LIBDIR)
 
+
+
+
 # CFLAGS from libraries (the glib ones are needed for the following sizeof
 # test).
 AM_CFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS}"
@@ -715,13 +703,7 @@ AX_APPEND_COMPILE_FLAGS([ dnl
        [WARN_CFLAGS],
        [-Werror])
 
-# When given, add -Werror to WARN_CFLAGS.
-AC_ARG_ENABLE([Werror],
-       [AS_HELP_STRING([--enable-Werror], [Treat compiler warnings as errors.])]
-)
-AS_IF([test "x$enable_Werror" = "xyes"],
-       [WARN_CFLAGS="${WARN_CFLAGS} -Werror"]
-)
+AE_IF_FEATURE_ENABLED([Werror], [WARN_CFLAGS="${WARN_CFLAGS} -Werror"])
 
 # The test used in AX_APPEND_COMPILE_FLAGS, generated using AC_LANG_PROGRAM, is
 # written in such a way that it triggers warnings with the following warning
@@ -897,7 +879,7 @@ AS_IF([test "x$have_python_dev" = "xyes"], [
   PPRINT_PROP_STRING([Python include paths], [$PYTHON_INCLUDE])
   PPRINT_PROP_STRING([Python linker flags], [$PYTHON_LDFLAGS])
 ])
-AS_IF([test "x$enable_python_bindings" = "xyes"], [
+AE_IF_FEATURE_ENABLED([python-bindings], [
   PPRINT_PROP_STRING([SWIG executable], [$SWIG])
   PPRINT_PROP_STRING([SWIG library], [$SWIG_LIB])
 ])
diff --git a/m4/ae_config_feature.m4 b/m4/ae_config_feature.m4
new file mode 100644 (file)
index 0000000..7582c00
--- /dev/null
@@ -0,0 +1,258 @@
+#
+# SYNOPSIS
+#
+#   AE_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
+#              ACTION-IF-GIVEN?, ACTION-IF-NOT-GIVEN?,
+#              ACTION-IF-ENABLED?, ACTION-IF-NOT-ENABLED?)
+#
+# DESCRIPTION
+#
+#   AE_FEATURE is a simple wrapper for AC_ARG_ENABLE.
+#
+#   FEATURE-NAME should consist only of alphanumeric characters, dashes,
+#   plus signs, and dots.
+#
+#   FEATURE-DESCRIPTION will be formatted with AS_HELP_STRING.
+#
+#   If the user gave configure the option --enable-FEATURE or --disable-FEATURE,
+#   run shell commands ACTION-IF-GIVEN. If neither option was given, run shell
+#   commands ACTION-IF-NOT-GIVEN. The name feature indicates an optional
+#
+#   If the feature is enabled, run shell commands ACTION-IF-ENABLED, if it is
+#   disabled, run shell commands ACTION-IF-NOT-ENABLED.
+#
+#   A FEATURE has 3 different states, enabled, disabled and undefined. The first
+#   two are self explanatory, the third state means it's disabled by default
+#   and it was not explicitly enabled or disabled by the user or by the
+#   AE_FEATURE_ENABLE and AE_FEATURE_DISABLE macros.
+#
+#   A feature is disabled by default, in order to change this behaviour use the
+#   AE_FEATURE_DEFAULT_ENABLE and AE_FEATURE_DEFAULT_DISABLE
+#   macros.
+#
+#   A simple example:
+#
+#     AE_FEATURE_DEFAULT_ENABLE
+#     AE_FEATURE(feature_xxxxx, [turns on/off XXXXX support])
+#
+#     ...
+#
+#     AE_FEATURE_DEFAULT_DISABLE
+#     AE_FEATURE(feature_yyyyy, [turns on/off YYYYY support])
+#     AM_CONDITIONAL(YYYYY, AE_IS_FEATURE_ENABLED([feature_yyyyy]))
+#
+#     AE_FEATURE_DEFAULT_ENABLE
+#     AE_FEATURE(...)
+#
+#     ...
+#
+#   Use AE_FEATURE_ENABLE or AE_FEATURE_DISABLE in order to
+#   enable or disable a specific feature.
+#
+#   Another simple example:
+#
+#     AS_IF([some_test_here],[AE_FEATURE_ENABLE(feature_xxxxx)],[])
+#
+#     AE_FEATURE(feature_xxxxx, [turns on/off XXXXX support],
+#                       HAVE_XXXXX, [Define if you want XXXXX support])
+#     AE_FEATURE(feature_yyyyy, [turns on/off YYYYY support],
+#                       HAVE_YYYYY, [Define if you want YYYYY support])
+#
+#     ...
+#
+#   NOTE: AE_FEATURE_ENABLE/DISABLE() must be placed first of the relative
+#   AE_FEATURE() macro if you want the the proper ACTION-IF-ENABLED and
+#   ACTION-IF-NOT-ENABLED to run.
+#
+# LICENSE
+#
+#   Copyright (c) 2020 Michael Jeanson <mjeanson@efficios.com>
+#   Copyright (c) 2008 Francesco Salvestrini <salvestrini@users.sourceforge.net>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 1
+
+
+# AE_FEATURE_DEFAULT_ENABLE: The next feature defined with AE_FEATURE will
+# default to enable.
+AC_DEFUN([AE_FEATURE_DEFAULT_ENABLE], [
+  m4_define([ae_feature_default_arg], [yes])
+  m4_define([ae_feature_default_switch], [disable])
+])
+
+
+# AE_FEATURE_DEFAULT_DISABLE: The next feature defined with AE_FEATURE will
+# default to disable.
+#
+AC_DEFUN([AE_FEATURE_DEFAULT_DISABLE], [
+  m4_define([ae_feature_default_arg], [no])
+  m4_define([ae_feature_default_switch], [enable])
+])
+
+
+# AE_FEATURE_ENABLE(FEATURE-NAME): Enable the FEATURE, this will override the
+# user's choice if it was made.
+#
+AC_DEFUN([AE_FEATURE_ENABLE],[ dnl
+  enable_[]patsubst([$1], -, _)[]=yes
+])
+
+
+# AE_FEATURE_DISABLE(FEATURE-NAME): Disable the FEATURE, this will override the
+# user's choice if it was made.
+#
+AC_DEFUN([AE_FEATURE_DISABLE],[ dnl
+  enable_[]patsubst([$1], -, _)[]=no
+])
+
+
+# AE_IF_FEATURE_ENABLED(FEATURE-NAME, ACTION-IF-ENABLED, ACTION-IF-NOT-ENABLED?):
+# Run shell code ACTION-IF-ENABLED if the FEATURE is enabled, otherwise run
+# shell code ACTION-IF-NOT-ENABLED.
+#
+AC_DEFUN([AE_IF_FEATURE_ENABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" = yes],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_NOT_ENABLED(FEATURE-NAME, ACTION-IF-NOT-ENABLED,
+#                           ACTION-IF-NOT-NOT-ENABLED?):
+# Run shell code ACTION-IF-NOT-ENABLED if the FEATURE is not explicitly
+# enabled, otherwise run shell code ACTION-IF-NOT-NOT-DISABLED.
+#
+# The distinction with AE_IF_FEATURE_DISABLED is that this will also
+# match a feature that is undefined.
+#
+# A feature is undefined when it's disabled by default and was not explicitly
+# enabled or disabled by the user or by AE_FEATURE_ENABLE/DISABLE.
+#
+AC_DEFUN([AE_IF_FEATURE_NOT_ENABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" != yes],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_DISABLED(FEATURE-NAME, ACTION-IF-DISABLED, ACTION-IF-NOT-DISABLED?):
+# Run shell code ACTION-IF-DISABLED if the FEATURE is disabled, otherwise run
+# shell code ACTION-IF-NOT-DISABLED.
+#
+AC_DEFUN([AE_IF_FEATURE_DISABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" = no],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_UNDEF(FEATURE-NAME, ACTION-IF-UNDEF, ACTION-IF-NOT-UNDEF?):
+# Run shell code ACTION-IF-UNDEF if the FEATURE is undefined, otherwise run
+# shell code ACTION-IF-NOT-UNDEF.
+#
+# A feature is undefined when it's disabled by default and was not explicitly
+# enabled or disabled by the user or by AE_FEATURE_ENABLE/DISABLE.
+#
+AC_DEFUN([AE_IF_FEATURE_UNDEF],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "x$enable_[]FEATURE[]" = x],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IS_FEATURE_ENABLED(FEATURE-NAME): outputs a shell condition (suitable
+# for use in a shell if statement) that will return true if the FEATURE is
+# enabled.
+#
+AC_DEFUN([AE_IS_FEATURE_ENABLED],[dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+ test "x$enable_[]FEATURE[]" = xyes dnl
+])
+
+
+dnl Disabled by default, unless already overriden
+m4_ifndef([ae_feature_default_arg],[AE_FEATURE_DEFAULT_DISABLE])
+
+
+# AE_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
+#            ACTION-IF-GIVEN?, ACTION-IF-NOT-GIVEN?,
+#            ACTION-IF-ENABLED?, ACTION-IF-NOT-ENABLED?):
+#
+#
+AC_DEFUN([AE_FEATURE],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+dnl If the option wasn't specified and the default is enabled, set enable_FEATURE to yes
+AS_IF([test "x$enable_[]FEATURE[]" = x && test "ae_feature_default_arg" = yes],[ dnl
+  enable_[]FEATURE[]="ae_feature_default_arg"
+])
+
+AC_ARG_ENABLE([$1],
+  AS_HELP_STRING([--ae_feature_default_switch-$1],dnl
+                 [$2 [default=ae_feature_default_arg]]),[
+case "${enableval}" in
+   yes)
+     enable_[]FEATURE[]=yes
+     ;;
+   no)
+     enable_[]FEATURE[]=no
+     ;;
+   *)
+     AC_MSG_ERROR([bad value ${enableval} for feature --$1])
+     ;;
+esac
+
+$3
+],[: dnl
+$4
+])
+
+AS_IF([test "$enable_[]FEATURE[]" = yes],[: dnl
+  $5
+],[: dnl
+  $6
+])
+
+m4_popdef([FEATURE])dnl
+])
This page took 0.031129 seconds and 4 git commands to generate.