1# stdlib_h.m4 serial 63
2dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN_ONCE([gl_STDLIB_H],
8[
9  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
10  gl_NEXT_HEADERS([stdlib.h])
11
12  dnl Check for declarations of anything we want to poison if the
13  dnl corresponding gnulib module is not in use, and which is not
14  dnl guaranteed by C89.
15  gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
16#if HAVE_SYS_LOADAVG_H
17/* OpenIndiana has a bug: <sys/time.h> must be included before
18   <sys/loadavg.h>.  */
19# include <sys/time.h>
20# include <sys/loadavg.h>
21#endif
22#if HAVE_RANDOM_H
23# include <random.h>
24#endif
25    ]], [_Exit aligned_alloc atoll canonicalize_file_name free
26    getloadavg getsubopt grantpt
27    initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps
28    posix_memalign posix_openpt ptsname ptsname_r qsort_r
29    random random_r reallocarray realpath rpmatch secure_getenv setenv
30    setstate setstate_r srandom srandom_r
31    strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv])
32
33  AC_REQUIRE([AC_C_RESTRICT])
34
35  AC_CHECK_DECLS_ONCE([ecvt])
36  if test $ac_cv_have_decl_ecvt = no; then
37    HAVE_DECL_ECVT=0
38  fi
39  AC_CHECK_DECLS_ONCE([fcvt])
40  if test $ac_cv_have_decl_fcvt = no; then
41    HAVE_DECL_FCVT=0
42  fi
43  AC_CHECK_DECLS_ONCE([gcvt])
44  if test $ac_cv_have_decl_gcvt = no; then
45    HAVE_DECL_GCVT=0
46  fi
47])
48
49# gl_STDLIB_MODULE_INDICATOR([modulename])
50# sets the shell variable that indicates the presence of the given module
51# to a C preprocessor expression that will evaluate to 1.
52# This macro invocation must not occur in macros that are AC_REQUIREd.
53AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
54[
55  dnl Ensure to expand the default settings once only.
56  gl_STDLIB_H_REQUIRE_DEFAULTS
57  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
58  dnl Define it also as a C macro, for the benefit of the unit tests.
59  gl_MODULE_INDICATOR_FOR_TESTS([$1])
60])
61
62# Initializes the default values for AC_SUBSTed shell variables.
63# This macro must not be AC_REQUIREd.  It must only be invoked, and only
64# outside of macros or in macros that are not AC_REQUIREd.
65AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
66[
67  m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [
68    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT])
69    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC])
70    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL])
71    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX])
72    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME])
73    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX])
74    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG])
75    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT])
76    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT])
77    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX])
78    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC])
79    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP])
80    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP])
81    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS])
82    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP])
83    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS])
84    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN])
85    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT])
86    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME])
87    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R])
88    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV])
89    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R])
90    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM])
91    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R])
92    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY])
93    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX])
94    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH])
95    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH])
96    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV])
97    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV])
98    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD])
99    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL])
100    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD])
101    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL])
102    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL])
103    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL])
104    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX])
105    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT])
106    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV])
107    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB])
108    dnl Support Microsoft deprecated alias function names by default.
109    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1])
110    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1])
111    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1])
112    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1])
113    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1])
114  ])
115  m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS])
116  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
117])
118
119AC_DEFUN([gl_STDLIB_H_DEFAULTS],
120[
121  dnl Assume proper GNU behavior unless another module says otherwise.
122  HAVE__EXIT=1;              AC_SUBST([HAVE__EXIT])
123  HAVE_ALIGNED_ALLOC=1;      AC_SUBST([HAVE_ALIGNED_ALLOC])
124  HAVE_ATOLL=1;              AC_SUBST([HAVE_ATOLL])
125  HAVE_CANONICALIZE_FILE_NAME=1;  AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
126  HAVE_DECL_ECVT=1;          AC_SUBST([HAVE_DECL_ECVT])
127  HAVE_DECL_FCVT=1;          AC_SUBST([HAVE_DECL_FCVT])
128  HAVE_DECL_GCVT=1;          AC_SUBST([HAVE_DECL_GCVT])
129  HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
130  HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
131  HAVE_GRANTPT=1;            AC_SUBST([HAVE_GRANTPT])
132  HAVE_INITSTATE=1;          AC_SUBST([HAVE_INITSTATE])
133  HAVE_DECL_INITSTATE=1;     AC_SUBST([HAVE_DECL_INITSTATE])
134  HAVE_MBTOWC=1;             AC_SUBST([HAVE_MBTOWC])
135  HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
136  HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
137  HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
138  HAVE_MKSTEMP=1;            AC_SUBST([HAVE_MKSTEMP])
139  HAVE_MKSTEMPS=1;           AC_SUBST([HAVE_MKSTEMPS])
140  HAVE_POSIX_MEMALIGN=1;     AC_SUBST([HAVE_POSIX_MEMALIGN])
141  HAVE_POSIX_OPENPT=1;       AC_SUBST([HAVE_POSIX_OPENPT])
142  HAVE_PTSNAME=1;            AC_SUBST([HAVE_PTSNAME])
143  HAVE_PTSNAME_R=1;          AC_SUBST([HAVE_PTSNAME_R])
144  HAVE_QSORT_R=1;            AC_SUBST([HAVE_QSORT_R])
145  HAVE_RANDOM=1;             AC_SUBST([HAVE_RANDOM])
146  HAVE_RANDOM_H=1;           AC_SUBST([HAVE_RANDOM_H])
147  HAVE_RANDOM_R=1;           AC_SUBST([HAVE_RANDOM_R])
148  HAVE_REALLOCARRAY=1;       AC_SUBST([HAVE_REALLOCARRAY])
149  HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
150  HAVE_RPMATCH=1;            AC_SUBST([HAVE_RPMATCH])
151  HAVE_SECURE_GETENV=1;      AC_SUBST([HAVE_SECURE_GETENV])
152  HAVE_SETENV=1;             AC_SUBST([HAVE_SETENV])
153  HAVE_DECL_SETENV=1;        AC_SUBST([HAVE_DECL_SETENV])
154  HAVE_SETSTATE=1;           AC_SUBST([HAVE_SETSTATE])
155  HAVE_DECL_SETSTATE=1;      AC_SUBST([HAVE_DECL_SETSTATE])
156  HAVE_STRTOD=1;             AC_SUBST([HAVE_STRTOD])
157  HAVE_STRTOL=1;             AC_SUBST([HAVE_STRTOL])
158  HAVE_STRTOLD=1;            AC_SUBST([HAVE_STRTOLD])
159  HAVE_STRTOLL=1;            AC_SUBST([HAVE_STRTOLL])
160  HAVE_STRTOUL=1;            AC_SUBST([HAVE_STRTOUL])
161  HAVE_STRTOULL=1;           AC_SUBST([HAVE_STRTOULL])
162  HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
163  HAVE_SYS_LOADAVG_H=0;      AC_SUBST([HAVE_SYS_LOADAVG_H])
164  HAVE_UNLOCKPT=1;           AC_SUBST([HAVE_UNLOCKPT])
165  HAVE_DECL_UNSETENV=1;      AC_SUBST([HAVE_DECL_UNSETENV])
166  REPLACE_ALIGNED_ALLOC=0;   AC_SUBST([REPLACE_ALIGNED_ALLOC])
167  REPLACE_CALLOC=0;          AC_SUBST([REPLACE_CALLOC])
168  REPLACE_CANONICALIZE_FILE_NAME=0;  AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
169  REPLACE_FREE=0;            AC_SUBST([REPLACE_FREE])
170  REPLACE_INITSTATE=0;       AC_SUBST([REPLACE_INITSTATE])
171  REPLACE_MALLOC=0;          AC_SUBST([REPLACE_MALLOC])
172  REPLACE_MBTOWC=0;          AC_SUBST([REPLACE_MBTOWC])
173  REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
174  REPLACE_POSIX_MEMALIGN=0;  AC_SUBST([REPLACE_POSIX_MEMALIGN])
175  REPLACE_PTSNAME=0;         AC_SUBST([REPLACE_PTSNAME])
176  REPLACE_PTSNAME_R=0;       AC_SUBST([REPLACE_PTSNAME_R])
177  REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
178  REPLACE_QSORT_R=0;         AC_SUBST([REPLACE_QSORT_R])
179  REPLACE_RANDOM=0;          AC_SUBST([REPLACE_RANDOM])
180  REPLACE_RANDOM_R=0;        AC_SUBST([REPLACE_RANDOM_R])
181  REPLACE_REALLOC=0;         AC_SUBST([REPLACE_REALLOC])
182  REPLACE_REALLOCARRAY=0;    AC_SUBST([REPLACE_REALLOCARRAY])
183  REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
184  REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
185  REPLACE_SETSTATE=0;        AC_SUBST([REPLACE_SETSTATE])
186  REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
187  REPLACE_STRTOL=0;          AC_SUBST([REPLACE_STRTOL])
188  REPLACE_STRTOLD=0;         AC_SUBST([REPLACE_STRTOLD])
189  REPLACE_STRTOLL=0;         AC_SUBST([REPLACE_STRTOLL])
190  REPLACE_STRTOUL=0;         AC_SUBST([REPLACE_STRTOUL])
191  REPLACE_STRTOULL=0;        AC_SUBST([REPLACE_STRTOULL])
192  REPLACE_UNSETENV=0;        AC_SUBST([REPLACE_UNSETENV])
193  REPLACE_WCTOMB=0;          AC_SUBST([REPLACE_WCTOMB])
194])
195