]>
Commit | Line | Data |
---|---|---|
ff66d28f | 1 | |
92eabea2 PE |
2 | dnl |
3 | dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST) | |
4 | dnl | |
5 | dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the | |
6 | dnl end of configure. This lets tested variables be reassigned, and the | |
7 | dnl conditional will depend on the final state of the variable. For a simple | |
8 | dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED. | |
9 | dnl | |
10 | m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl | |
f214923c | 11 | AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl |
92eabea2 PE |
12 | m4_divert_text([glibcxx_diversion],dnl |
13 | AM_CONDITIONAL([$1],[$2]) | |
14 | )dnl | |
15 | ])dnl | |
f214923c | 16 | AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl |
92eabea2 PE |
17 | |
18 | ||
ff66d28f PE |
19 | dnl |
20 | dnl Check to see what architecture and operating system we are compiling | |
21 | dnl for. Also, if architecture- or OS-specific flags are required for | |
22 | dnl compilation, pick them up here. | |
23 | dnl | |
f214923c | 24 | AC_DEFUN([GLIBCXX_CHECK_HOST], [ |
ff66d28f | 25 | . $glibcxx_srcdir/configure.host |
f214923c BK |
26 | AC_MSG_NOTICE([CPU config directory is $cpu_include_dir]) |
27 | AC_MSG_NOTICE([OS config directory is $os_include_dir]) | |
ff66d28f PE |
28 | ]) |
29 | ||
ff66d28f PE |
30 | dnl |
31 | dnl Initialize the rest of the library configury. At this point we have | |
32 | dnl variables like $host. | |
aebb8c22 | 33 | dnl |
ff66d28f PE |
34 | dnl Sets: |
35 | dnl gcc_version (x.y.z format) | |
82ba99d5 | 36 | dnl SUBDIRS |
ff66d28f PE |
37 | dnl Substs: |
38 | dnl glibcxx_builddir (absolute path) | |
39 | dnl glibcxx_srcdir (absolute path) | |
40 | dnl toplevel_srcdir (absolute path) | |
41 | dnl with_cross_host | |
42 | dnl with_newlib | |
43 | dnl with_target_subdir | |
44 | dnl plus | |
45 | dnl - the variables in GLIBCXX_CHECK_HOST / configure.host | |
46 | dnl - default settings for all AM_CONFITIONAL test variables | |
47 | dnl - lots of tools, like CC and CXX | |
aebb8c22 | 48 | dnl |
f214923c | 49 | AC_DEFUN([GLIBCXX_CONFIGURE], [ |
82ba99d5 PE |
50 | # Keep these sync'd with the list in Makefile.am. The first provides an |
51 | # expandable list at autoconf time; the second provides an expandable list | |
52 | # (i.e., shell variable) at configure time. | |
53 | m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src po testsuite]) | |
54 | SUBDIRS='glibcxx_SUBDIRS' | |
55 | ||
d2caef2e PE |
56 | # These need to be absolute paths, yet at the same time need to |
57 | # canonicalize only relative paths, because then amd will not unmount | |
58 | # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd. | |
3d7c150e | 59 | glibcxx_builddir=`${PWDCMD-pwd}` |
d2caef2e | 60 | case $srcdir in |
ff66d28f PE |
61 | [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;; |
62 | *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;; | |
d2caef2e | 63 | esac |
ff66d28f | 64 | toplevel_srcdir=${glibcxx_srcdir}/.. |
3d7c150e BK |
65 | AC_SUBST(glibcxx_builddir) |
66 | AC_SUBST(glibcxx_srcdir) | |
ff66d28f | 67 | AC_SUBST(toplevel_srcdir) |
d2caef2e | 68 | |
ff66d28f PE |
69 | # We use these options to decide which functions to include. They are |
70 | # set from the top level. | |
71 | AC_ARG_WITH([target-subdir], | |
72 | AC_HELP_STRING([--with-target-subdir=SUBDIR], | |
73 | [configuring in a subdirectory])) | |
74 | ||
75 | AC_ARG_WITH([cross-host], | |
76 | AC_HELP_STRING([--with-cross-host=HOST], | |
77 | [configuring with a cross compiler])) | |
78 | ||
79 | AC_ARG_WITH([newlib], | |
80 | AC_HELP_STRING([--with-newlib], | |
81 | [assume newlib as a system C library])) | |
82 | ||
ff66d28f PE |
83 | # We're almost certainly being configured before anything else which uses |
84 | # C++, so all of our AC_PROG_* discoveries will be cached. It's vital that | |
85 | # we not cache the value of CXX that we "discover" here, because it's set | |
86 | # to something unique for us and libjava. Other target libraries need to | |
87 | # find CXX for themselves. We yank the rug out from under the normal AC_* | |
88 | # process by sneakily renaming the cache variable. This also lets us debug | |
89 | # the value of "our" CXX in postmortems. | |
90 | # | |
91 | # We must also force CXX to /not/ be a precious variable, otherwise the | |
92 | # wrong (non-multilib-adjusted) value will be used in multilibs. This | |
93 | # little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS. And as a side | |
94 | # effect, CXXFLAGS is no longer automagically subst'd, so we have to do | |
f6dda651 | 95 | # that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS. |
ff66d28f PE |
96 | # |
97 | # -fno-builtin must be present here so that a non-conflicting form of | |
98 | # std::exit can be guessed by AC_PROG_CXX, and used in later tests. | |
fbe057bb | 99 | |
ff66d28f PE |
100 | m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX]) |
101 | m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS]) | |
102 | m4_define([_AC_ARG_VAR_PRECIOUS],[]) | |
103 | save_CXXFLAGS="$CXXFLAGS" | |
104 | CXXFLAGS="$CXXFLAGS -fno-builtin" | |
f6dda651 | 105 | AC_PROG_CC |
ff66d28f PE |
106 | AC_PROG_CXX |
107 | CXXFLAGS="$save_CXXFLAGS" | |
108 | m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) | |
f6dda651 | 109 | AC_SUBST(CFLAGS) |
ff66d28f | 110 | AC_SUBST(CXXFLAGS) |
b2dad0e3 | 111 | |
2f235b6d PE |
112 | # For directory versioning (e.g., headers) and other variables. |
113 | AC_MSG_CHECKING([for GCC version number]) | |
ff66d28f | 114 | gcc_version=`$CXX -dumpversion` |
2f235b6d PE |
115 | AC_MSG_RESULT($gcc_version) |
116 | ||
ff66d28f PE |
117 | # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't |
118 | # available). Uncomment the next line to force a particular method. | |
119 | AC_PROG_LN_S | |
120 | #LN_S='cp -p' | |
121 | ||
5780a46b BK |
122 | AC_CHECK_TOOL(AS, as) |
123 | AC_CHECK_TOOL(AR, ar) | |
46840bcd | 124 | AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error) |
b2dad0e3 | 125 | |
5780a46b | 126 | AM_MAINTAINER_MODE |
b2dad0e3 | 127 | |
92eabea2 PE |
128 | # Set up safe default values for all subsequent AM_CONDITIONAL tests |
129 | # which are themselves conditionally expanded. | |
130 | ## (Right now, this only matters for enable_wchar_t, but nothing prevents | |
131 | ## other macros from doing the same. This should be automated.) -pme | |
16da539b PE |
132 | need_libmath=no |
133 | enable_wchar_t=no | |
ff66d28f PE |
134 | #enable_libstdcxx_debug=no |
135 | #enable_libstdcxx_pch=no | |
16da539b PE |
136 | #enable_cheaders=c |
137 | #c_compatibility=no | |
c4c064e7 | 138 | #enable_abi_check=no |
16da539b | 139 | #enable_symvers=no |
92eabea2 | 140 | #enable_hosted_libstdcxx=yes |
16da539b | 141 | |
ff66d28f PE |
142 | # Find platform-specific directories containing configuration info. |
143 | # Also possibly modify flags used elsewhere, as needed by the platform. | |
3d7c150e | 144 | GLIBCXX_CHECK_HOST |
b2dad0e3 BK |
145 | ]) |
146 | ||
147 | ||
ff66d28f | 148 | m4_include([linkage.m4]) |
72730fdb | 149 | m4_include([../config/no-executables.m4]) |
c470c17d BK |
150 | |
151 | ||
152 | dnl | |
52b55e7d PE |
153 | dnl Tests for newer compiler features, or features that are present in newer |
154 | dnl compiler versions but not older compiler versions still in use, should | |
155 | dnl be placed here. | |
b2dad0e3 | 156 | dnl |
ff66d28f PE |
157 | dnl Defines: |
158 | dnl WERROR='-Werror' if requested and possible; g++'s that lack the | |
159 | dnl new inlining code or the new system_header pragma will die on -Werror. | |
160 | dnl Leave it out by default and use maint-mode to use it. | |
161 | dnl SECTION_FLAGS='-ffunction-sections -fdata-sections' if | |
162 | dnl compiler supports it and the user has not requested debug mode. | |
c21b6f87 | 163 | dnl |
f214923c | 164 | AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [ |
a4e99046 | 165 | # All these tests are for C++; save the language and the compiler flags. |
52b55e7d | 166 | # The CXXFLAGS thing is suspicious, but based on similar bits previously |
3d7c150e | 167 | # found in GLIBCXX_CONFIGURE. |
a4e99046 PE |
168 | AC_LANG_SAVE |
169 | AC_LANG_CPLUSPLUS | |
170 | ac_test_CXXFLAGS="${CXXFLAGS+set}" | |
171 | ac_save_CXXFLAGS="$CXXFLAGS" | |
a4e99046 | 172 | |
7f586614 BK |
173 | # Check for maintainer-mode bits. |
174 | if test x"$USE_MAINTAINER_MODE" = xno; then | |
175 | WERROR='' | |
8bd636c5 | 176 | else |
7f586614 | 177 | WERROR='-Werror' |
8bd636c5 PE |
178 | fi |
179 | ||
c470c17d BK |
180 | # Check for -ffunction-sections -fdata-sections |
181 | AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections]) | |
0517cb99 | 182 | CXXFLAGS='-Werror -ffunction-sections -fdata-sections' |
ff66d28f | 183 | AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no]) |
c470c17d BK |
184 | if test "$ac_test_CXXFLAGS" = set; then |
185 | CXXFLAGS="$ac_save_CXXFLAGS" | |
186 | else | |
187 | # this is the suspicious part | |
188 | CXXFLAGS='' | |
189 | fi | |
6aa43d99 | 190 | if test x"$ac_fdsections" = x"yes"; then |
c470c17d BK |
191 | SECTION_FLAGS='-ffunction-sections -fdata-sections' |
192 | fi | |
193 | AC_MSG_RESULT($ac_fdsections) | |
194 | ||
a4e99046 | 195 | AC_LANG_RESTORE |
8bd636c5 | 196 | AC_SUBST(WERROR) |
c470c17d | 197 | AC_SUBST(SECTION_FLAGS) |
b2dad0e3 BK |
198 | ]) |
199 | ||
c470c17d BK |
200 | |
201 | dnl | |
421173e6 PE |
202 | dnl If GNU ld is in use, check to see if tricky linker opts can be used. If |
203 | dnl the native linker is in use, all variables will be defined to something | |
204 | dnl safe (like an empty string). | |
205 | dnl | |
ff66d28f PE |
206 | dnl Defines: |
207 | dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible | |
208 | dnl OPT_LDFLAGS='-Wl,-O1' if possible | |
209 | dnl LD (as a side effect of testing) | |
210 | dnl Sets: | |
211 | dnl with_gnu_ld | |
212 | dnl glibcxx_gnu_ld_version (possibly) | |
213 | dnl | |
214 | dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will | |
215 | dnl set glibcxx_gnu_ld_version to 12345. Zeros cause problems. | |
c470c17d | 216 | dnl |
f214923c | 217 | AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [ |
421173e6 PE |
218 | # If we're not using GNU ld, then there's no point in even trying these |
219 | # tests. Check for that first. We should have already tested for gld | |
220 | # by now (in libtool), but require it now just to be safe... | |
654421eb DE |
221 | test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS='' |
222 | test -z "$OPT_LDFLAGS" && OPT_LDFLAGS='' | |
421173e6 | 223 | AC_REQUIRE([AC_PROG_LD]) |
ff66d28f | 224 | AC_REQUIRE([AC_PROG_AWK]) |
5bd17d39 | 225 | |
c98b201b PE |
226 | # The name set by libtool depends on the version of libtool. Shame on us |
227 | # for depending on an impl detail, but c'est la vie. Older versions used | |
228 | # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on | |
229 | # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually | |
230 | # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't | |
231 | # set (hence we're using an older libtool), then set it. | |
232 | if test x${with_gnu_ld+set} != xset; then | |
233 | if test x${ac_cv_prog_gnu_ld+set} != xset; then | |
234 | # We got through "ac_require(ac_prog_ld)" and still not set? Huh? | |
235 | with_gnu_ld=no | |
236 | else | |
237 | with_gnu_ld=$ac_cv_prog_gnu_ld | |
238 | fi | |
239 | fi | |
240 | ||
241 | # Start by getting the version number. I think the libtool test already | |
242 | # does some of this, but throws away the result. | |
243 | changequote(,) | |
244 | ldver=`$LD --version 2>/dev/null | head -1 | \ | |
245 | sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` | |
246 | changequote([,]) | |
3d7c150e | 247 | glibcxx_gnu_ld_version=`echo $ldver | \ |
c98b201b PE |
248 | $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'` |
249 | ||
5bd17d39 | 250 | # Set --gc-sections. |
c98b201b | 251 | if test "$with_gnu_ld" = "notbroken"; then |
a9117427 | 252 | # GNU ld it is! Joy and bunny rabbits! |
421173e6 PE |
253 | |
254 | # All these tests are for C++; save the language and the compiler flags. | |
255 | # Need to do this so that g++ won't try to link in libstdc++ | |
256 | ac_test_CFLAGS="${CFLAGS+set}" | |
257 | ac_save_CFLAGS="$CFLAGS" | |
5bd17d39 | 258 | CFLAGS='-x c++ -Wl,--gc-sections' |
421173e6 PE |
259 | |
260 | # Check for -Wl,--gc-sections | |
ff66d28f PE |
261 | # XXX This test is broken at the moment, as symbols required for linking |
262 | # are now in libsupc++ (not built yet). In addition, this test has | |
263 | # cored on solaris in the past. In addition, --gc-sections doesn't | |
264 | # really work at the moment (keeps on discarding used sections, first | |
265 | # .eh_frame and now some of the glibc sections for iconv). | |
266 | # Bzzzzt. Thanks for playing, maybe next time. | |
421173e6 PE |
267 | AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections]) |
268 | AC_TRY_RUN([ | |
37bc6ca2 | 269 | int main(void) |
421173e6 | 270 | { |
a9117427 BK |
271 | try { throw 1; } |
272 | catch (...) { }; | |
421173e6 PE |
273 | return 0; |
274 | } | |
c0abb59e | 275 | ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes]) |
421173e6 PE |
276 | if test "$ac_test_CFLAGS" = set; then |
277 | CFLAGS="$ac_save_CFLAGS" | |
278 | else | |
279 | # this is the suspicious part | |
280 | CFLAGS='' | |
281 | fi | |
282 | if test "$ac_sectionLDflags" = "yes"; then | |
654421eb | 283 | SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS" |
421173e6 PE |
284 | fi |
285 | AC_MSG_RESULT($ac_sectionLDflags) | |
5bd17d39 | 286 | fi |
a9117427 | 287 | |
5bd17d39 | 288 | # Set linker optimization flags. |
6aa43d99 | 289 | if test x"$with_gnu_ld" = x"yes"; then |
654421eb | 290 | OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS" |
421173e6 | 291 | fi |
5bd17d39 | 292 | |
c470c17d | 293 | AC_SUBST(SECTION_LDFLAGS) |
421173e6 | 294 | AC_SUBST(OPT_LDFLAGS) |
c470c17d BK |
295 | ]) |
296 | ||
297 | ||
b2dad0e3 | 298 | dnl |
ff66d28f | 299 | dnl Check to see if this target can enable the wchar_t parts. |
8b8ab21c | 300 | dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled. (This |
ff66d28f PE |
301 | dnl must have been previously checked.) By default, wide characters are |
302 | dnl disabled. | |
b2dad0e3 | 303 | dnl |
ff66d28f PE |
304 | dnl Defines: |
305 | dnl HAVE_MBSTATE_T if mbstate_t is not in wchar.h | |
306 | dnl _GLIBCXX_USE_WCHAR_T if all the bits are found. | |
d54bc1d8 PE |
307 | dnl Substs: |
308 | dnl LIBICONV to a -l string containing the iconv library, if needed. | |
b2dad0e3 | 309 | dnl |
f214923c | 310 | AC_DEFUN([GLIBCXX_CHECK_WCHAR_T_SUPPORT], [ |
ff66d28f PE |
311 | # Test wchar.h for mbstate_t, which is needed for char_traits and |
312 | # others even if wchar_t support is not on. | |
7b331228 BK |
313 | AC_MSG_CHECKING([for mbstate_t]) |
314 | AC_TRY_COMPILE([#include <wchar.h>], | |
37bc6ca2 | 315 | [mbstate_t teststate;], |
7b331228 BK |
316 | have_mbstate_t=yes, have_mbstate_t=no) |
317 | AC_MSG_RESULT($have_mbstate_t) | |
318 | if test x"$have_mbstate_t" = xyes; then | |
319 | AC_DEFINE(HAVE_MBSTATE_T) | |
320 | fi | |
321 | ||
ff66d28f | 322 | # Sanity check for existence of ISO C99 headers for extended encoding. |
7b331228 | 323 | AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no) |
31f93f90 | 324 | AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no) |
37bc6ca2 | 325 | |
ff66d28f | 326 | # Only continue checking if the ISO C99 headers exist and support is on. |
a0cb1aa7 PE |
327 | if test x"$ac_has_wchar_h" = xyes && |
328 | test x"$ac_has_wctype_h" = xyes && | |
329 | test x"$enable_c_mbchar" != xno; then | |
37bc6ca2 | 330 | |
ff66d28f PE |
331 | # Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before |
332 | # numeric_limits can instantiate type_traits<wchar_t> | |
7b331228 BK |
333 | AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX]) |
334 | AC_TRY_COMPILE([#include <wchar.h>], | |
37bc6ca2 | 335 | [int i = WCHAR_MIN; int j = WCHAR_MAX;], |
7b331228 BK |
336 | has_wchar_minmax=yes, has_wchar_minmax=no) |
337 | AC_MSG_RESULT($has_wchar_minmax) | |
37bc6ca2 | 338 | |
ff66d28f PE |
339 | # Test wchar.h for WEOF, which is what we use to determine whether |
340 | # to specialize for char_traits<wchar_t> or not. | |
7b331228 BK |
341 | AC_MSG_CHECKING([for WEOF]) |
342 | AC_TRY_COMPILE([ | |
343 | #include <wchar.h> | |
344 | #include <stddef.h>], | |
345 | [wint_t i = WEOF;], | |
346 | has_weof=yes, has_weof=no) | |
347 | AC_MSG_RESULT($has_weof) | |
37bc6ca2 | 348 | |
ff66d28f | 349 | # Tests for wide character functions used in char_traits<wchar_t>. |
68fe6226 | 350 | ac_wfuncs=yes |
ff66d28f PE |
351 | AC_CHECK_FUNCS([wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset], |
352 | [],[ac_wfuncs=no]) | |
37bc6ca2 | 353 | |
ff66d28f PE |
354 | # Checks for names injected into std:: by the c_std headers. |
355 | AC_CHECK_FUNCS([btowc wctob fgetwc fgetws fputwc fputws fwide \ | |
2b1be54b BS |
356 | fwprintf fwscanf swprintf swscanf vfwprintf vswprintf \ |
357 | vwprintf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \ | |
358 | mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstol \ | |
68fe6226 | 359 | wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \ |
ff66d28f PE |
360 | wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr], |
361 | [],[ac_wfuncs=no]) | |
df7b1359 | 362 | |
2b1be54b BS |
363 | # Checks for wide character functions that are not required |
364 | # for basic wchar_t support. Don't disable support if they are missing. | |
365 | # Injection of these is wrapped with guard macros. | |
366 | AC_CHECK_FUNCS([vfwscanf vswscanf vwscanf wcstof iswblank],[],[]) | |
367 | ||
7b331228 | 368 | AC_MSG_CHECKING([for ISO C99 wchar_t support]) |
a0cb1aa7 PE |
369 | if test x"$has_weof" = xyes && |
370 | test x"$has_wchar_minmax" = xyes && | |
ff66d28f PE |
371 | test x"$ac_wfuncs" = xyes; |
372 | then | |
7b331228 BK |
373 | ac_isoC99_wchar_t=yes |
374 | else | |
375 | ac_isoC99_wchar_t=no | |
376 | fi | |
377 | AC_MSG_RESULT($ac_isoC99_wchar_t) | |
37bc6ca2 | 378 | |
ff66d28f PE |
379 | # Use iconv for wchar_t to char conversions. As such, check for |
380 | # X/Open Portability Guide, version 2 features (XPG2). | |
7b331228 BK |
381 | AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no) |
382 | AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no) | |
383 | ||
ff66d28f | 384 | # Check for existence of libiconv.a providing XPG2 wchar_t support. |
d54bc1d8 | 385 | AC_CHECK_LIB(iconv, iconv, LIBICONV="-liconv") |
7b331228 | 386 | ac_save_LIBS="$LIBS" |
d54bc1d8 PE |
387 | LIBS="$LIBS $LIBICONV" |
388 | AC_SUBST(LIBICONV) | |
7b331228 | 389 | |
ff66d28f PE |
390 | AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo], |
391 | [ac_XPG2funcs=yes], [ac_XPG2funcs=no]) | |
37bc6ca2 | 392 | |
7b331228 | 393 | LIBS="$ac_save_LIBS" |
5b20f7a0 | 394 | |
7b331228 | 395 | AC_MSG_CHECKING([for XPG2 wchar_t support]) |
a0cb1aa7 PE |
396 | if test x"$ac_has_iconv_h" = xyes && |
397 | test x"$ac_has_langinfo_h" = xyes && | |
ff66d28f PE |
398 | test x"$ac_XPG2funcs" = xyes; |
399 | then | |
7b331228 BK |
400 | ac_XPG2_wchar_t=yes |
401 | else | |
402 | ac_XPG2_wchar_t=no | |
403 | fi | |
404 | AC_MSG_RESULT($ac_XPG2_wchar_t) | |
37bc6ca2 | 405 | |
ff66d28f PE |
406 | # At the moment, only enable wchar_t specializations if all the |
407 | # above support is present. | |
408 | if test x"$ac_isoC99_wchar_t" = xyes && | |
409 | test x"$ac_XPG2_wchar_t" = xyes; | |
410 | then | |
3d7c150e | 411 | AC_DEFINE(_GLIBCXX_USE_WCHAR_T) |
6b543e86 | 412 | enable_wchar_t=yes |
15bcd79a | 413 | fi |
b2dad0e3 | 414 | fi |
6b543e86 | 415 | AC_MSG_CHECKING([for enabled wchar_t specializations]) |
ff66d28f | 416 | AC_MSG_RESULT($enable_wchar_t) |
b2dad0e3 BK |
417 | ]) |
418 | ||
419 | ||
b2dad0e3 | 420 | dnl |
ff66d28f PE |
421 | dnl Check for headers for, and arguments to, the setrlimit() function. |
422 | dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE. | |
6aa43d99 | 423 | dnl |
ff66d28f | 424 | dnl Defines: |
2ae6e982 PC |
425 | dnl _GLIBCXX_RES_LIMITS if we can set artificial resource limits |
426 | dnl various HAVE_LIMIT_* for individual limit names | |
6aa43d99 | 427 | dnl |
f214923c | 428 | AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [ |
ff66d28f PE |
429 | AC_TRY_COMPILE( |
430 | [#include <unistd.h> | |
431 | #include <sys/time.h> | |
432 | #include <sys/resource.h> | |
433 | ], | |
434 | [ int f = RLIMIT_$1 ; ], | |
435 | [glibcxx_mresult=1], [glibcxx_mresult=0]) | |
2ae6e982 | 436 | AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult, |
ff66d28f PE |
437 | [Only used in build directory testsuite_hooks.h.]) |
438 | ]) | |
439 | ||
f214923c | 440 | AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [ |
ff66d28f PE |
441 | setrlimit_have_headers=yes |
442 | AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h, | |
443 | [], | |
444 | [setrlimit_have_headers=no]) | |
445 | # If don't have the headers, then we can't run the tests now, and we | |
446 | # won't be seeing any of these during testsuite compilation. | |
447 | if test $setrlimit_have_headers = yes; then | |
448 | # Can't do these in a loop, else the resulting syntax is wrong. | |
449 | GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA) | |
450 | GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS) | |
451 | GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM) | |
452 | GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS) | |
2ae6e982 | 453 | GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE) |
ff66d28f PE |
454 | |
455 | # Check for rlimit, setrlimit. | |
456 | AC_CACHE_VAL(ac_setrlimit, [ | |
457 | AC_TRY_COMPILE( | |
458 | [#include <unistd.h> | |
459 | #include <sys/time.h> | |
460 | #include <sys/resource.h> | |
461 | ], | |
462 | [struct rlimit r; | |
463 | setrlimit(0, &r);], | |
464 | [ac_setrlimit=yes], [ac_setrlimit=no]) | |
465 | ]) | |
466 | fi | |
467 | ||
2ae6e982 | 468 | AC_MSG_CHECKING([for testsuite resource limits support]) |
ff66d28f | 469 | if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then |
2ae6e982 PC |
470 | ac_res_limits=yes |
471 | AC_DEFINE(_GLIBCXX_RES_LIMITS) | |
ff66d28f | 472 | else |
2ae6e982 | 473 | ac_res_limits=no |
ff66d28f | 474 | fi |
2ae6e982 | 475 | AC_MSG_RESULT($ac_res_limits) |
6aa43d99 BK |
476 | ]) |
477 | ||
478 | ||
6aa43d99 | 479 | dnl |
ff66d28f PE |
480 | dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>. |
481 | dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately. | |
6aa43d99 | 482 | dnl |
f214923c | 483 | AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [ |
ff66d28f PE |
484 | AC_CACHE_VAL(glibcxx_cv_S_ISREG, [ |
485 | AC_TRY_LINK( | |
486 | [#include <sys/stat.h>], | |
487 | [struct stat buffer; | |
488 | fstat(0, &buffer); | |
489 | S_ISREG(buffer.st_mode);], | |
490 | [glibcxx_cv_S_ISREG=yes], | |
491 | [glibcxx_cv_S_ISREG=no]) | |
492 | ]) | |
493 | AC_CACHE_VAL(glibcxx_cv_S_IFREG, [ | |
494 | AC_TRY_LINK( | |
495 | [#include <sys/stat.h>], | |
496 | [struct stat buffer; | |
497 | fstat(0, &buffer); | |
498 | S_IFREG & buffer.st_mode;], | |
499 | [glibcxx_cv_S_IFREG=yes], | |
500 | [glibcxx_cv_S_IFREG=no]) | |
501 | ]) | |
502 | if test $glibcxx_cv_S_ISREG = yes; then | |
503 | AC_DEFINE(HAVE_S_ISREG) | |
504 | elif test $glibcxx_cv_S_IFREG = yes; then | |
505 | AC_DEFINE(HAVE_S_IFREG) | |
506 | fi | |
b2dad0e3 BK |
507 | ]) |
508 | ||
509 | ||
dcfa0bc8 | 510 | dnl |
ff66d28f | 511 | dnl Check whether poll is available in <poll.h>, and define HAVE_POLL. |
dcfa0bc8 | 512 | dnl |
f214923c | 513 | AC_DEFUN([GLIBCXX_CHECK_POLL], [ |
ff66d28f | 514 | AC_CACHE_VAL(glibcxx_cv_POLL, [ |
3d05b345 | 515 | AC_TRY_LINK( |
ff66d28f PE |
516 | [#include <poll.h>], |
517 | [struct pollfd pfd[1]; | |
518 | pfd[0].events = POLLIN; | |
519 | poll(pfd, 1, 0);], | |
520 | [glibcxx_cv_POLL=yes], | |
521 | [glibcxx_cv_POLL=no]) | |
522 | ]) | |
523 | if test $glibcxx_cv_POLL = yes; then | |
524 | AC_DEFINE(HAVE_POLL) | |
525 | fi | |
526 | ]) | |
527 | ||
528 | ||
529 | dnl | |
530 | dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV. | |
531 | dnl | |
f214923c | 532 | AC_DEFUN([GLIBCXX_CHECK_WRITEV], [ |
ff66d28f | 533 | AC_CACHE_VAL(glibcxx_cv_WRITEV, [ |
3d05b345 | 534 | AC_TRY_LINK( |
ff66d28f PE |
535 | [#include <sys/uio.h>], |
536 | [struct iovec iov[2]; | |
537 | writev(0, iov, 0);], | |
538 | [glibcxx_cv_WRITEV=yes], | |
539 | [glibcxx_cv_WRITEV=no]) | |
540 | ]) | |
541 | if test $glibcxx_cv_WRITEV = yes; then | |
542 | AC_DEFINE(HAVE_WRITEV) | |
543 | fi | |
544 | ]) | |
545 | ||
546 | ||
3d05b345 PC |
547 | dnl |
548 | dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T. | |
549 | dnl | |
f214923c | 550 | AC_DEFUN([GLIBCXX_CHECK_INT64_T], [ |
3d05b345 PC |
551 | AC_CACHE_VAL(glibcxx_cv_INT64_T, [ |
552 | AC_TRY_COMPILE( | |
553 | [#include <stdint.h>], | |
554 | [int64_t var;], | |
555 | [glibcxx_cv_INT64_T=yes], | |
556 | [glibcxx_cv_INT64_T=no]) | |
557 | ]) | |
558 | if test $glibcxx_cv_INT64_T = yes; then | |
559 | AC_DEFINE(HAVE_INT64_T) | |
560 | fi | |
561 | ]) | |
562 | ||
563 | ||
564 | dnl | |
565 | dnl Check whether LFS support is available. | |
566 | dnl | |
f214923c | 567 | AC_DEFUN([GLIBCXX_CHECK_LFS], [ |
0c6b814a | 568 | AC_LANG_SAVE |
9d47bc51 PC |
569 | AC_LANG_CPLUSPLUS |
570 | ac_save_CXXFLAGS="$CXXFLAGS" | |
571 | CXXFLAGS="$CXXFLAGS -fno-exceptions" | |
3d05b345 PC |
572 | AC_CACHE_VAL(glibcxx_cv_LFS, [ |
573 | AC_TRY_LINK( | |
0c6b814a PC |
574 | [#include <unistd.h> |
575 | #include <stdio.h> | |
576 | ], | |
5c89246d PC |
577 | [FILE* fp; |
578 | fopen64("t", "w"); | |
579 | fseeko64(fp, 0, SEEK_CUR); | |
580 | ftello64(fp); | |
3d05b345 PC |
581 | lseek64(1, 0, SEEK_CUR);], |
582 | [glibcxx_cv_LFS=yes], | |
583 | [glibcxx_cv_LFS=no]) | |
584 | ]) | |
585 | if test $glibcxx_cv_LFS = yes; then | |
586 | AC_DEFINE(_GLIBCXX_USE_LFS) | |
587 | fi | |
9d47bc51 PC |
588 | CXXFLAGS="$ac_save_CXXFLAGS" |
589 | AC_LANG_RESTORE | |
3d05b345 PC |
590 | ]) |
591 | ||
592 | ||
ff66d28f PE |
593 | dnl |
594 | dnl Does any necessary configuration of the testsuite directory. Generates | |
595 | dnl the testsuite_hooks.h header. | |
596 | dnl | |
597 | dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this. | |
598 | dnl | |
599 | dnl Sets: | |
600 | dnl enable_abi_check / GLIBCXX_TEST_ABI | |
601 | dnl Substs: | |
602 | dnl baseline_dir | |
603 | dnl | |
f214923c | 604 | AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [ |
92eabea2 | 605 | if $GLIBCXX_IS_NATIVE && test $is_hosted = yes; then |
2ae6e982 | 606 | # Do checks for resource limit functions. |
ff66d28f PE |
607 | GLIBCXX_CHECK_SETRLIMIT |
608 | ||
609 | # Look for setenv, so that extended locale tests can be performed. | |
610 | GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) | |
dbc66058 DJ |
611 | |
612 | if test $enable_symvers = no; then | |
613 | enable_abi_check=no | |
614 | else | |
615 | case "$host" in | |
616 | *-*-cygwin*) | |
617 | enable_abi_check=no ;; | |
618 | *) | |
619 | enable_abi_check=yes ;; | |
620 | esac | |
621 | fi | |
622 | else | |
623 | # Only build this as native, since automake does not understand | |
624 | # CXX_FOR_BUILD. | |
625 | enable_abi_check=no | |
ff66d28f PE |
626 | fi |
627 | ||
628 | # Export file names for ABI checking. | |
629 | baseline_dir="$glibcxx_srcdir/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)" | |
630 | AC_SUBST(baseline_dir) | |
631 | ||
92eabea2 PE |
632 | GLIBCXX_CONDITIONAL(GLIBCXX_TEST_WCHAR_T, test $enable_wchar_t = yes) |
633 | GLIBCXX_CONDITIONAL(GLIBCXX_TEST_ABI, test $enable_abi_check = yes) | |
ff66d28f PE |
634 | ]) |
635 | ||
636 | ||
637 | dnl | |
638 | dnl Set up *_INCLUDES variables for all sundry Makefile.am's. | |
639 | dnl | |
640 | dnl Substs: | |
641 | dnl GLIBCXX_INCLUDES | |
642 | dnl TOPLEVEL_INCLUDES | |
ff66d28f | 643 | dnl |
f214923c | 644 | AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [ |
0df3f383 PE |
645 | # Used for every C++ compile we perform. |
646 | GLIBCXX_INCLUDES="\ | |
647 | -I$glibcxx_builddir/include/$host_alias \ | |
648 | -I$glibcxx_builddir/include \ | |
649 | -I$glibcxx_srcdir/libsupc++" | |
ff66d28f | 650 | |
0df3f383 | 651 | # For Canadian crosses, pick this up too. |
ff66d28f | 652 | if test $CANADIAN = yes; then |
37e0ff11 | 653 | GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}" |
ff66d28f PE |
654 | fi |
655 | ||
0df3f383 PE |
656 | # Stuff in the actual top level. Currently only used by libsupc++ to |
657 | # get unwind* headers from the gcc dir. | |
658 | #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include' | |
659 | TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc' | |
ff66d28f PE |
660 | |
661 | # Now, export this to all the little Makefiles.... | |
662 | AC_SUBST(GLIBCXX_INCLUDES) | |
663 | AC_SUBST(TOPLEVEL_INCLUDES) | |
ff66d28f PE |
664 | ]) |
665 | ||
666 | ||
667 | dnl | |
668 | dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's. | |
669 | dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.) | |
670 | dnl | |
671 | dnl Substs: | |
672 | dnl OPTIMIZE_CXXFLAGS | |
673 | dnl WARN_FLAGS | |
674 | dnl | |
f214923c | 675 | AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [ |
ff66d28f PE |
676 | # Optimization flags that are probably a good idea for thrill-seekers. Just |
677 | # uncomment the lines below and make, everything else is ready to go... | |
678 | # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc | |
679 | OPTIMIZE_CXXFLAGS= | |
680 | AC_SUBST(OPTIMIZE_CXXFLAGS) | |
681 | ||
dc7c62ae | 682 | WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual' |
ff66d28f PE |
683 | AC_SUBST(WARN_FLAGS) |
684 | ]) | |
685 | ||
686 | ||
687 | dnl | |
688 | dnl All installation directory information is determined here. | |
689 | dnl | |
690 | dnl Substs: | |
691 | dnl gxx_install_dir | |
692 | dnl glibcxx_prefixdir | |
693 | dnl glibcxx_toolexecdir | |
694 | dnl glibcxx_toolexeclibdir | |
695 | dnl | |
696 | dnl Assumes cross_compiling bits already done, and with_cross_host in | |
697 | dnl particular. | |
698 | dnl | |
f214923c | 699 | AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [ |
ff66d28f PE |
700 | glibcxx_toolexecdir=no |
701 | glibcxx_toolexeclibdir=no | |
702 | glibcxx_prefixdir=$prefix | |
703 | ||
704 | AC_MSG_CHECKING([for gxx-include-dir]) | |
705 | AC_ARG_WITH([gxx-include-dir], | |
706 | AC_HELP_STRING([--with-gxx-include-dir=DIR], | |
707 | [installation directory for include files]), | |
708 | [case "$withval" in | |
709 | yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;; | |
710 | no) gxx_include_dir=no ;; | |
711 | *) gxx_include_dir=$withval ;; | |
712 | esac], | |
713 | [gxx_include_dir=no]) | |
714 | AC_MSG_RESULT($gxx_include_dir) | |
715 | ||
716 | AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) | |
717 | AC_ARG_ENABLE([version-specific-runtime-libs], | |
718 | AC_HELP_STRING([--enable-version-specific-runtime-libs], | |
719 | [Specify that runtime libraries should be installed in a compiler-specific directory]), | |
720 | [case "$enableval" in | |
721 | yes) version_specific_libs=yes ;; | |
722 | no) version_specific_libs=no ;; | |
723 | *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; | |
724 | esac], | |
725 | [version_specific_libs=no]) | |
726 | AC_MSG_RESULT($version_specific_libs) | |
727 | ||
728 | # Default case for install directory for include files. | |
729 | if test $version_specific_libs = no && test $gxx_include_dir = no; then | |
730 | gxx_include_dir='${prefix}'/include/c++/${gcc_version} | |
731 | fi | |
732 | ||
733 | # Version-specific runtime libs processing. | |
734 | if test $version_specific_libs = yes; then | |
735 | # Need the gcc compiler version to know where to install libraries | |
736 | # and header files if --enable-version-specific-runtime-libs option | |
0314451d GK |
737 | # is selected. FIXME: these variables are misnamed, there are |
738 | # no executables installed in _toolexecdir or _toolexeclibdir. | |
ff66d28f | 739 | if test x"$gxx_include_dir" = x"no"; then |
0314451d | 740 | gxx_include_dir='${libdir}/gcc/${host_alias}/'$gcc_version/include/c++ |
ff66d28f | 741 | fi |
0314451d | 742 | glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' |
fbe057bb | 743 | glibcxx_toolexeclibdir='${toolexecdir}/'$gcc_version'$(MULTISUBDIR)' |
ff66d28f PE |
744 | fi |
745 | ||
746 | # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir | |
747 | # Install a library built with a cross compiler in tooldir, not libdir. | |
748 | if test x"$glibcxx_toolexecdir" = x"no"; then | |
749 | if test -n "$with_cross_host" && | |
750 | test x"$with_cross_host" != x"no"; then | |
fbe057bb PE |
751 | glibcxx_toolexecdir='${exec_prefix}/${host_alias}' |
752 | glibcxx_toolexeclibdir='${toolexecdir}/lib' | |
ff66d28f | 753 | else |
0314451d | 754 | glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' |
fbe057bb | 755 | glibcxx_toolexeclibdir='${libdir}' |
ff66d28f | 756 | fi |
fbe057bb | 757 | multi_os_directory=`$CXX -print-multi-os-directory` |
ff66d28f PE |
758 | case $multi_os_directory in |
759 | .) ;; # Avoid trailing /. | |
760 | *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;; | |
761 | esac | |
762 | fi | |
763 | ||
764 | AC_MSG_CHECKING([for install location]) | |
765 | AC_MSG_RESULT($gxx_include_dir) | |
766 | ||
767 | AC_SUBST(glibcxx_prefixdir) | |
768 | AC_SUBST(gxx_include_dir) | |
769 | AC_SUBST(glibcxx_toolexecdir) | |
770 | AC_SUBST(glibcxx_toolexeclibdir) | |
771 | ]) | |
772 | ||
773 | ||
774 | dnl | |
775 | dnl GLIBCXX_ENABLE | |
776 | dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING) | |
777 | dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c) | |
778 | dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER) | |
779 | dnl | |
780 | dnl See docs/html/17_intro/configury.html#enable for documentation. | |
781 | dnl | |
782 | m4_define([GLIBCXX_ENABLE],[dnl | |
783 | m4_define([_g_switch],[--enable-$1])dnl | |
784 | m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl | |
785 | AC_ARG_ENABLE($1,_g_help, | |
786 | m4_bmatch([$5], | |
787 | [^permit ], | |
788 | [[ | |
789 | case "$enableval" in | |
790 | m4_bpatsubst([$5],[permit ])) ;; | |
791 | *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;; | |
792 | dnl Idea for future: generate a URL pointing to | |
793 | dnl "onlinedocs/configopts.html#whatever" | |
794 | esac | |
795 | ]], | |
796 | [^$], | |
797 | [[ | |
798 | case "$enableval" in | |
799 | yes|no) ;; | |
800 | *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;; | |
801 | esac | |
802 | ]], | |
803 | [[$5]]), | |
804 | [enable_]m4_bpatsubst([$1],-,_)[=][$2]) | |
805 | m4_undefine([_g_switch])dnl | |
806 | m4_undefine([_g_help])dnl | |
807 | ]) | |
808 | ||
809 | ||
810 | dnl | |
811 | dnl Check for ISO/IEC 9899:1999 "C99" support. | |
812 | dnl | |
813 | dnl --enable-c99 defines _GLIBCXX_USE_C99 | |
814 | dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined | |
815 | dnl + Usage: GLIBCXX_ENABLE_C99[(DEFAULT)] | |
816 | dnl Where DEFAULT is either `yes' or `no'. | |
817 | dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'. | |
818 | dnl | |
f214923c | 819 | AC_DEFUN([GLIBCXX_ENABLE_C99], [ |
ff66d28f PE |
820 | GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support]) |
821 | ||
822 | AC_LANG_SAVE | |
823 | AC_LANG_CPLUSPLUS | |
824 | ||
825 | # Check for the existence of <math.h> functions used if C99 is enabled. | |
826 | ac_c99_math=yes; | |
827 | AC_MSG_CHECKING([for ISO C99 support in <math.h>]) | |
828 | AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no]) | |
829 | AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no]) | |
830 | AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no]) | |
831 | AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no]) | |
832 | AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no]) | |
833 | AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no]) | |
834 | AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no]) | |
835 | AC_TRY_COMPILE([#include <math.h>], | |
836 | [isgreaterequal(0.0,0.0);],, [ac_c99_math=no]) | |
837 | AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no]) | |
838 | AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no]) | |
839 | AC_TRY_COMPILE([#include <math.h>], | |
840 | [islessgreater(0.0,0.0);],, [ac_c99_math=no]) | |
841 | AC_TRY_COMPILE([#include <math.h>], | |
842 | [isunordered(0.0,0.0);],, [ac_c99_math=no]) | |
843 | AC_MSG_RESULT($ac_c99_math) | |
844 | ||
517da0ce MM |
845 | if test x"$ac_c99_math" = x"yes"; then |
846 | AC_DEFINE(_GLIBCXX_USE_C99_MATH) | |
847 | fi | |
848 | ||
ff66d28f PE |
849 | # Check for the existence in <stdio.h> of vscanf, et. al. |
850 | ac_c99_stdio=yes; | |
851 | AC_MSG_CHECKING([for ISO C99 support in <stdio.h>]) | |
852 | AC_TRY_COMPILE([#include <stdio.h>], | |
853 | [snprintf("12", 0, "%i");],, [ac_c99_stdio=no]) | |
854 | AC_TRY_COMPILE([#include <stdio.h> | |
855 | #include <stdarg.h> | |
856 | void foo(char* fmt, ...) | |
857 | {va_list args; va_start(args, fmt); | |
858 | vfscanf(stderr, "%i", args);}], | |
859 | [],, [ac_c99_stdio=no]) | |
860 | AC_TRY_COMPILE([#include <stdio.h> | |
861 | #include <stdarg.h> | |
862 | void foo(char* fmt, ...) | |
863 | {va_list args; va_start(args, fmt); | |
864 | vscanf("%i", args);}], | |
865 | [],, [ac_c99_stdio=no]) | |
866 | AC_TRY_COMPILE([#include <stdio.h> | |
867 | #include <stdarg.h> | |
868 | void foo(char* fmt, ...) | |
869 | {va_list args; va_start(args, fmt); | |
870 | vsnprintf(fmt, 0, "%i", args);}], | |
871 | [],, [ac_c99_stdio=no]) | |
872 | AC_TRY_COMPILE([#include <stdio.h> | |
873 | #include <stdarg.h> | |
874 | void foo(char* fmt, ...) | |
875 | {va_list args; va_start(args, fmt); | |
876 | vsscanf(fmt, "%i", args);}], | |
877 | [],, [ac_c99_stdio=no]) | |
878 | AC_MSG_RESULT($ac_c99_stdio) | |
879 | ||
880 | # Check for the existence in <stdlib.h> of lldiv_t, et. al. | |
881 | ac_c99_stdlib=yes; | |
882 | AC_MSG_CHECKING([for lldiv_t declaration]) | |
883 | AC_CACHE_VAL(ac_c99_lldiv_t, [ | |
884 | AC_TRY_COMPILE([#include <stdlib.h>], | |
885 | [ lldiv_t mydivt;], | |
886 | [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no]) | |
887 | ]) | |
888 | AC_MSG_RESULT($ac_c99_lldiv_t) | |
889 | ||
890 | AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>]) | |
891 | AC_TRY_COMPILE([#include <stdlib.h>], | |
892 | [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no]) | |
893 | AC_TRY_COMPILE([#include <stdlib.h>], | |
894 | [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no]) | |
895 | AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no]) | |
896 | AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no]) | |
897 | AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no]) | |
898 | AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no]) | |
899 | if test x"$ac_c99_lldiv_t" = x"no"; then | |
900 | ac_c99_stdlib=no; | |
901 | fi; | |
902 | AC_MSG_RESULT($ac_c99_stdlib) | |
903 | ||
904 | # Check for the existence of <wchar.h> functions used if C99 is enabled. | |
905 | # XXX the wchar.h checks should be rolled into the general C99 bits. | |
906 | ac_c99_wchar=yes; | |
907 | AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>]) | |
908 | AC_TRY_COMPILE([#include <wchar.h>], | |
909 | [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no]) | |
910 | AC_TRY_COMPILE([#include <wchar.h>], | |
911 | [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no]) | |
912 | AC_TRY_COMPILE([#include <wchar.h>], | |
913 | [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no]) | |
914 | AC_MSG_RESULT($ac_c99_wchar) | |
915 | ||
916 | AC_MSG_CHECKING([for enabled ISO C99 support]) | |
917 | if test x"$ac_c99_math" = x"no" || | |
918 | test x"$ac_c99_stdio" = x"no" || | |
919 | test x"$ac_c99_stdlib" = x"no" || | |
920 | test x"$ac_c99_wchar" = x"no"; then | |
921 | enable_c99=no; | |
922 | fi; | |
923 | AC_MSG_RESULT($enable_c99) | |
924 | ||
517da0ce MM |
925 | if test x"$ac_99_math" = x"yes"; then |
926 | AC_DEFINE(_GLIBCXX_USE_C99_MATH) | |
927 | fi | |
928 | ||
ff66d28f PE |
929 | # Option parsed, now set things appropriately |
930 | if test x"$enable_c99" = x"yes"; then | |
931 | AC_DEFINE(_GLIBCXX_USE_C99) | |
932 | fi | |
933 | ||
934 | AC_LANG_RESTORE | |
dcfa0bc8 PE |
935 | ]) |
936 | ||
937 | ||
0214010c | 938 | dnl |
ff66d28f PE |
939 | dnl Check for what type of C headers to use. |
940 | dnl | |
941 | dnl --enable-cheaders= [does stuff]. | |
942 | dnl --disable-cheaders [does not do anything, really]. | |
943 | dnl + Usage: GLIBCXX_ENABLE_CHEADERS[(DEFAULT)] | |
944 | dnl Where DEFAULT is either `c' or `c_std'. | |
945 | dnl | |
f214923c | 946 | AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [ |
ff66d28f PE |
947 | GLIBCXX_ENABLE(cheaders,$1,[=KIND], |
948 | [construct "C" headers for g++], [permit c|c_std]) | |
949 | AC_MSG_NOTICE("C" header strategy set to $enable_cheaders) | |
950 | ||
951 | C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders | |
952 | ||
953 | AC_SUBST(C_INCLUDE_DIR) | |
92eabea2 PE |
954 | GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c) |
955 | GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std) | |
956 | GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes) | |
ff66d28f PE |
957 | ]) |
958 | ||
959 | ||
0214010c | 960 | dnl |
ff66d28f PE |
961 | dnl Check for which locale library to use. The choice is mapped to |
962 | dnl a subdirectory of config/locale. | |
37bc6ca2 | 963 | dnl |
ff66d28f | 964 | dnl Default is generic. |
0214010c | 965 | dnl |
f214923c | 966 | AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ |
ff66d28f PE |
967 | AC_MSG_CHECKING([for C locale to use]) |
968 | GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@], | |
969 | [use MODEL for target locale package], | |
970 | [permit generic|gnu|ieee_1003.1-2001|yes|no|auto]) | |
971 | ||
972 | # If they didn't use this option switch, or if they specified --enable | |
973 | # with no specific model, we'll have to look for one. If they | |
974 | # specified --disable (???), do likewise. | |
975 | if test $enable_clocale = no || test $enable_clocale = yes; then | |
976 | enable_clocale=auto | |
977 | fi | |
0214010c | 978 | |
ff66d28f | 979 | # Either a known package, or "auto" |
0214010c BK |
980 | enable_clocale_flag=$enable_clocale |
981 | ||
ff66d28f PE |
982 | # Probe for locale support if no specific model is specified. |
983 | # Default to "generic". | |
984 | if test $enable_clocale_flag = auto; then | |
56deb74c | 985 | case x${target_os} in |
b2398b49 | 986 | xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu) |
ff66d28f | 987 | AC_EGREP_CPP([_GLIBCXX_ok], [ |
56deb74c | 988 | #include <features.h> |
37bc6ca2 | 989 | #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) |
3d7c150e | 990 | _GLIBCXX_ok |
56deb74c BK |
991 | #endif |
992 | ], enable_clocale_flag=gnu, enable_clocale_flag=generic) | |
1451a492 | 993 | |
ff66d28f PE |
994 | # Test for bugs early in glibc-2.2.x series |
995 | if test x$enable_clocale_flag = xgnu; then | |
996 | AC_TRY_RUN([ | |
997 | #define _GNU_SOURCE 1 | |
998 | #include <locale.h> | |
999 | #include <string.h> | |
1000 | #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) | |
1001 | extern __typeof(newlocale) __newlocale; | |
1002 | extern __typeof(duplocale) __duplocale; | |
1003 | extern __typeof(strcoll_l) __strcoll_l; | |
1004 | #endif | |
1005 | int main() | |
1006 | { | |
1007 |