xref: /openbsd-src/gnu/usr.bin/texinfo/m4/onceonly.m4 (revision a1acfa9b69ad64eb720639240c8438f11107dc85)
1*a1acfa9bSespie# onceonly.m4 serial 3
2*a1acfa9bSespiednl Copyright (C) 2002, 2003 Free Software Foundation, Inc.
3*a1acfa9bSespiednl This file is free software, distributed under the terms of the GNU
4*a1acfa9bSespiednl General Public License.  As a special exception to the GNU General
5*a1acfa9bSespiednl Public License, this file may be distributed as part of a program
6*a1acfa9bSespiednl that contains a configuration script generated by Autoconf, under
7*a1acfa9bSespiednl the same distribution terms as the rest of that program.
8*a1acfa9bSespie
9*a1acfa9bSespiednl This file defines some "once only" variants of standard autoconf macros.
10*a1acfa9bSespiednl   AC_CHECK_HEADERS_ONCE         like  AC_CHECK_HEADERS
11*a1acfa9bSespiednl   AC_CHECK_FUNCS_ONCE           like  AC_CHECK_FUNCS
12*a1acfa9bSespiednl   AC_CHECK_DECLS_ONCE           like  AC_CHECK_DECLS
13*a1acfa9bSespiednl   AC_REQUIRE([AC_HEADER_STDC])  like  AC_HEADER_STDC
14*a1acfa9bSespiednl The advantage is that the check for each of the headers/functions/decls
15*a1acfa9bSespiednl will be put only once into the 'configure' file. It keeps the size of
16*a1acfa9bSespiednl the 'configure' file down, and avoids redundant output when 'configure'
17*a1acfa9bSespiednl is run.
18*a1acfa9bSespiednl The drawback is that the checks cannot be conditionalized. If you write
19*a1acfa9bSespiednl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
20*a1acfa9bSespiednl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
21*a1acfa9bSespiednl empty, and the check will be inserted before the body of the AC_DEFUNed
22*a1acfa9bSespiednl function.
23*a1acfa9bSespie
24*a1acfa9bSespiednl Autoconf version 2.57 or newer is recommended.
25*a1acfa9bSespieAC_PREREQ(2.54)
26*a1acfa9bSespie
27*a1acfa9bSespie# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
28*a1acfa9bSespie# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
29*a1acfa9bSespieAC_DEFUN([AC_CHECK_HEADERS_ONCE], [
30*a1acfa9bSespie  :
31*a1acfa9bSespie  AC_FOREACH([gl_HEADER_NAME], [$1], [
32*a1acfa9bSespie    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(defn([gl_HEADER_NAME]),
33*a1acfa9bSespie                                                 [-./], [___])), [
34*a1acfa9bSespie      AC_CHECK_HEADERS(gl_HEADER_NAME)
35*a1acfa9bSespie    ])
36*a1acfa9bSespie    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
37*a1acfa9bSespie                                                   [-./], [___])))
38*a1acfa9bSespie  ])
39*a1acfa9bSespie])
40*a1acfa9bSespie
41*a1acfa9bSespie# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
42*a1acfa9bSespie# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
43*a1acfa9bSespieAC_DEFUN([AC_CHECK_FUNCS_ONCE], [
44*a1acfa9bSespie  :
45*a1acfa9bSespie  AC_FOREACH([gl_FUNC_NAME], [$1], [
46*a1acfa9bSespie    AC_DEFUN([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]), [
47*a1acfa9bSespie      AC_CHECK_FUNCS(defn([gl_FUNC_NAME]))
48*a1acfa9bSespie    ])
49*a1acfa9bSespie    AC_REQUIRE([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]))
50*a1acfa9bSespie  ])
51*a1acfa9bSespie])
52*a1acfa9bSespie
53*a1acfa9bSespie# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
54*a1acfa9bSespie# AC_CHECK_DECLS(DECL1, DECL2, ...).
55*a1acfa9bSespieAC_DEFUN([AC_CHECK_DECLS_ONCE], [
56*a1acfa9bSespie  :
57*a1acfa9bSespie  AC_FOREACH([gl_DECL_NAME], [$1], [
58*a1acfa9bSespie    AC_DEFUN([gl_CHECK_DECL_]defn([gl_DECL_NAME]), [
59*a1acfa9bSespie      AC_CHECK_DECLS(defn([gl_DECL_NAME]))
60*a1acfa9bSespie    ])
61*a1acfa9bSespie    AC_REQUIRE([gl_CHECK_DECL_]defn([gl_DECL_NAME]))
62*a1acfa9bSespie  ])
63*a1acfa9bSespie])
64