Blame gnulib/m4/onceonly.m4

Packit Service 51e54d
# onceonly.m4 serial 9
Packit Service 51e54d
dnl Copyright (C) 2002-2003, 2005-2006, 2008-2014 Free Software Foundation,
Packit Service 51e54d
dnl Inc.
Packit Service 51e54d
dnl
Packit Service 51e54d
dnl This file is free software; you can redistribute it and/or modify
Packit Service 51e54d
dnl it under the terms of the GNU General Public License as published by
Packit Service 51e54d
dnl the Free Software Foundation; either version 3 of the License, or
Packit Service 51e54d
dnl (at your option) any later version.
Packit Service 51e54d
dnl
Packit Service 51e54d
dnl This file is distributed in the hope that it will be useful,
Packit Service 51e54d
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 51e54d
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 51e54d
dnl GNU General Public License for more details.
Packit Service 51e54d
dnl
Packit Service 51e54d
dnl You should have received a copy of the GNU General Public License
Packit Service 51e54d
dnl along with this file.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 51e54d
dnl
Packit Service 51e54d
dnl As a special exception to the GNU General Public License,
Packit Service 51e54d
dnl this file may be distributed as part of a program
Packit Service 51e54d
dnl that contains a configuration script generated by Autoconf, under
Packit Service 51e54d
dnl the same distribution terms as the rest of that program.
Packit Service 51e54d
Packit Service 51e54d
dnl This file defines some "once only" variants of standard autoconf macros.
Packit Service 51e54d
dnl   AC_CHECK_HEADERS_ONCE          like  AC_CHECK_HEADERS
Packit Service 51e54d
dnl   AC_CHECK_FUNCS_ONCE            like  AC_CHECK_FUNCS
Packit Service 51e54d
dnl   AC_CHECK_DECLS_ONCE            like  AC_CHECK_DECLS
Packit Service 51e54d
dnl   AC_REQUIRE([AC_FUNC_STRCOLL])  like  AC_FUNC_STRCOLL
Packit Service 51e54d
dnl The advantage is that the check for each of the headers/functions/decls
Packit Service 51e54d
dnl will be put only once into the 'configure' file. It keeps the size of
Packit Service 51e54d
dnl the 'configure' file down, and avoids redundant output when 'configure'
Packit Service 51e54d
dnl is run.
Packit Service 51e54d
dnl The drawback is that the checks cannot be conditionalized. If you write
Packit Service 51e54d
dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
Packit Service 51e54d
dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
Packit Service 51e54d
dnl empty, and the check will be inserted before the body of the AC_DEFUNed
Packit Service 51e54d
dnl function.
Packit Service 51e54d
Packit Service 51e54d
dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
Packit Service 51e54d
dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
Packit Service 51e54d
dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
Packit Service 51e54d
dnl headers at once, thus reducing the size of 'configure'. It is known to work
Packit Service 51e54d
dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
Packit Service 51e54d
Packit Service 51e54d
dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
Packit Service 51e54d
dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
Packit Service 51e54d
dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
Packit Service 51e54d
dnl argument!
Packit Service 51e54d
AC_PREREQ([2.59])
Packit Service 51e54d
Packit Service 51e54d
# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
Packit Service 51e54d
# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
Packit Service 51e54d
AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
Packit Service 51e54d
  :
Packit Service 51e54d
  m4_foreach_w([gl_HEADER_NAME], [$1], [
Packit Service 51e54d
    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
Packit Service 51e54d
                                                    [./-], [___])), [
Packit Service 51e54d
      m4_divert_text([INIT_PREPARE],
Packit Service 51e54d
        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
Packit Service 51e54d
      gl_HEADERS_EXPANSION
Packit Service 51e54d
      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
Packit Service 51e54d
        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
Packit Service 51e54d
    ])
Packit Service 51e54d
    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
Packit Service 51e54d
                                                      [./-], [___])))
Packit Service 51e54d
  ])
Packit Service 51e54d
])
Packit Service 51e54d
m4_define([gl_HEADERS_EXPANSION], [
Packit Service 51e54d
  m4_divert_text([DEFAULTS], [gl_header_list=])
Packit Service 51e54d
  AC_CHECK_HEADERS([$gl_header_list])
Packit Service 51e54d
  m4_define([gl_HEADERS_EXPANSION], [])
Packit Service 51e54d
])
Packit Service 51e54d
Packit Service 51e54d
# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
Packit Service 51e54d
# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
Packit Service 51e54d
AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
Packit Service 51e54d
  :
Packit Service 51e54d
  m4_foreach_w([gl_FUNC_NAME], [$1], [
Packit Service 51e54d
    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
Packit Service 51e54d
      m4_divert_text([INIT_PREPARE],
Packit Service 51e54d
        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
Packit Service 51e54d
      gl_FUNCS_EXPANSION
Packit Service 51e54d
      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
Packit Service 51e54d
        [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.])
Packit Service 51e54d
    ])
Packit Service 51e54d
    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
Packit Service 51e54d
  ])
Packit Service 51e54d
])
Packit Service 51e54d
m4_define([gl_FUNCS_EXPANSION], [
Packit Service 51e54d
  m4_divert_text([DEFAULTS], [gl_func_list=])
Packit Service 51e54d
  AC_CHECK_FUNCS([$gl_func_list])
Packit Service 51e54d
  m4_define([gl_FUNCS_EXPANSION], [])
Packit Service 51e54d
])
Packit Service 51e54d
Packit Service 51e54d
# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
Packit Service 51e54d
# AC_CHECK_DECLS(DECL1, DECL2, ...).
Packit Service 51e54d
AC_DEFUN([AC_CHECK_DECLS_ONCE], [
Packit Service 51e54d
  :
Packit Service 51e54d
  m4_foreach_w([gl_DECL_NAME], [$1], [
Packit Service 51e54d
    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
Packit Service 51e54d
      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
Packit Service 51e54d
    ])
Packit Service 51e54d
    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
Packit Service 51e54d
  ])
Packit Service 51e54d
])