]>
Commit | Line | Data |
---|---|---|
472fa5ee | 1 | # onceonly.m4 serial 9 |
7a6dbc2f | 2 | dnl Copyright (C) 2002-2003, 2005-2006, 2008-2018 Free Software Foundation, |
472fa5ee SM |
3 | dnl Inc. |
4 | dnl | |
5 | dnl This file is free software; you can redistribute it and/or modify | |
6 | dnl it under the terms of the GNU General Public License as published by | |
7 | dnl the Free Software Foundation; either version 3 of the License, or | |
8 | dnl (at your option) any later version. | |
9 | dnl | |
10 | dnl This file is distributed in the hope that it will be useful, | |
11 | dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | dnl GNU General Public License for more details. | |
14 | dnl | |
15 | dnl You should have received a copy of the GNU General Public License | |
7a6dbc2f | 16 | dnl along with this file. If not, see <https://www.gnu.org/licenses/>. |
472fa5ee SM |
17 | dnl |
18 | dnl As a special exception to the GNU General Public License, | |
19 | dnl this file may be distributed as part of a program | |
20 | dnl that contains a configuration script generated by Autoconf, under | |
21 | dnl the same distribution terms as the rest of that program. | |
22 | ||
23 | dnl This file defines some "once only" variants of standard autoconf macros. | |
24 | dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS | |
25 | dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS | |
26 | dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS | |
27 | dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL | |
28 | dnl The advantage is that the check for each of the headers/functions/decls | |
29 | dnl will be put only once into the 'configure' file. It keeps the size of | |
30 | dnl the 'configure' file down, and avoids redundant output when 'configure' | |
31 | dnl is run. | |
32 | dnl The drawback is that the checks cannot be conditionalized. If you write | |
33 | dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi | |
34 | dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to | |
35 | dnl empty, and the check will be inserted before the body of the AC_DEFUNed | |
36 | dnl function. | |
37 | ||
38 | dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE | |
39 | dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to | |
40 | dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested | |
41 | dnl headers at once, thus reducing the size of 'configure'. It is known to work | |
42 | dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. | |
43 | ||
44 | dnl Autoconf version 2.59 plus gnulib is required; this file is not needed | |
45 | dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of | |
46 | dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first | |
47 | dnl argument! | |
48 | AC_PREREQ([2.59]) | |
49 | ||
50 | # AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of | |
51 | # AC_CHECK_HEADERS(HEADER1 HEADER2 ...). | |
52 | AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ | |
53 | : | |
54 | m4_foreach_w([gl_HEADER_NAME], [$1], [ | |
55 | AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, | |
56 | [./-], [___])), [ | |
57 | m4_divert_text([INIT_PREPARE], | |
58 | [gl_header_list="$gl_header_list gl_HEADER_NAME"]) | |
59 | gl_HEADERS_EXPANSION | |
60 | AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), | |
61 | [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) | |
62 | ]) | |
63 | AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, | |
64 | [./-], [___]))) | |
65 | ]) | |
66 | ]) | |
67 | m4_define([gl_HEADERS_EXPANSION], [ | |
68 | m4_divert_text([DEFAULTS], [gl_header_list=]) | |
69 | AC_CHECK_HEADERS([$gl_header_list]) | |
70 | m4_define([gl_HEADERS_EXPANSION], []) | |
71 | ]) | |
72 | ||
73 | # AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of | |
74 | # AC_CHECK_FUNCS(FUNC1 FUNC2 ...). | |
75 | AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ | |
76 | : | |
77 | m4_foreach_w([gl_FUNC_NAME], [$1], [ | |
78 | AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ | |
79 | m4_divert_text([INIT_PREPARE], | |
80 | [gl_func_list="$gl_func_list gl_FUNC_NAME"]) | |
81 | gl_FUNCS_EXPANSION | |
82 | AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), | |
83 | [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.]) | |
84 | ]) | |
85 | AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) | |
86 | ]) | |
87 | ]) | |
88 | m4_define([gl_FUNCS_EXPANSION], [ | |
89 | m4_divert_text([DEFAULTS], [gl_func_list=]) | |
90 | AC_CHECK_FUNCS([$gl_func_list]) | |
91 | m4_define([gl_FUNCS_EXPANSION], []) | |
92 | ]) | |
93 | ||
94 | # AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of | |
95 | # AC_CHECK_DECLS(DECL1, DECL2, ...). | |
96 | AC_DEFUN([AC_CHECK_DECLS_ONCE], [ | |
97 | : | |
98 | m4_foreach_w([gl_DECL_NAME], [$1], [ | |
99 | AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ | |
100 | AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) | |
101 | ]) | |
102 | AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) | |
103 | ]) | |
104 | ]) |