]> gcc.gnu.org Git - gcc.git/blame - libstdc++-v3/acinclude.m4
misc13.C: Put `strlen' in `std' namespace.
[gcc.git] / libstdc++-v3 / acinclude.m4
CommitLineData
b2dad0e3
BK
1dnl
2dnl Initialize configure bits.
3dnl
4dnl Define OPTLEVEL='-O2' if new inlining code present.
5dnl
6dnl GLIBCPP_CONFIGURE
7AC_DEFUN(GLIBCPP_CONFIGURE, [
8 dnl Default to --enable-multilib
9 AC_ARG_ENABLE(multilib,
10 [ --enable-multilib build hella library versions (default)],
11 [case "${enableval}" in
12 yes) multilib=yes ;;
13 no) multilib=no ;;
14 *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
15 esac], [multilib=yes])dnl
16
17 dnl We may get other options which we dont document:
18 dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
19 if test "[$]{srcdir}" = "."; then
20 if test "[$]{with_target_subdir}" != "."; then
21 glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
22 else
23 glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
24 fi
25 else
26 glibcpp_basedir="[$]{srcdir}/$1"
27 fi
28 AC_SUBST(glibcpp_basedir)
29
b2dad0e3
BK
30 AM_INIT_AUTOMAKE(libstdc++, 2.90.8)
31
28861379
BK
32 # Never versions of autoconf add an underscore to these functions.
33 # Prevent future problems ...
34 ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))])
35 ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))])
36 ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))])
37 ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))])
5780a46b
BK
38
39# AC_PROG_CC
40
b2dad0e3
BK
41# FIXME: We temporarily define our own version of AC_PROG_CC. This is
42# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
43# are probably using a cross compiler, which will not be able to fully
44# link an executable. This should really be fixed in autoconf
45# itself.
46
47AC_DEFUN(LIB_AC_PROG_CC,
48[AC_BEFORE([$0], [AC_PROG_CPP])dnl
49dnl Fool anybody using AC_PROG_CC.
50AC_PROVIDE([AC_PROG_CC])
51AC_CHECK_PROG(CC, gcc, gcc)
52if test -z "$CC"; then
53 AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
54 test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
55fi
56
57AC_PROG_CC_GNU
58
59if test $ac_cv_prog_gcc = yes; then
60 GCC=yes
61dnl Check whether -g works, even if CFLAGS is set, in case the package
62dnl plays around with CFLAGS (such as to build both debugging and
63dnl normal versions of a library), tasteless as that idea is.
64 ac_test_CFLAGS="${CFLAGS+set}"
65 ac_save_CFLAGS="$CFLAGS"
66 CFLAGS=
67 AC_PROG_CC_G
68 if test "$ac_test_CFLAGS" = set; then
69 CFLAGS="$ac_save_CFLAGS"
70 elif test $ac_cv_prog_cc_g = yes; then
71 CFLAGS="-g -O2"
72 else
73 CFLAGS="-O2"
74 fi
75else
76 GCC=
77 test "${CFLAGS+set}" = set || CFLAGS="-g"
78fi
79])
80
81LIB_AC_PROG_CC
82
5780a46b
BK
83# Can't just call these here as g++ requires libstc++ to be built....
84# AC_PROG_CXX
85
b2dad0e3
BK
86# Likewise for AC_PROG_CXX.
87AC_DEFUN(LIB_AC_PROG_CXX,
88[AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
89dnl Fool anybody using AC_PROG_CXX.
90AC_PROVIDE([AC_PROG_CXX])
de9aefe0
AO
91# Use CXX_libstdcxx so that we do not cause CXX to be cached with the
92# flags that come in CXX while configuring libstdc++. They're different
93# from those used for all other target libraries.
94AC_CHECK_PROGS(CXX_libstdcxx, "$CXX" "$CCC" c++ g++ gcc CC cxx cc++, gcc)
95CXX=$CXX_libstdcxx
96AC_SUBST(CXX)
b2dad0e3
BK
97test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
98
99AC_PROG_CXX_GNU
100
101if test $ac_cv_prog_gxx = yes; then
102 GXX=yes
103dnl Check whether -g works, even if CXXFLAGS is set, in case the package
104dnl plays around with CXXFLAGS (such as to build both debugging and
105dnl normal versions of a library), tasteless as that idea is.
106 ac_test_CXXFLAGS="${CXXFLAGS+set}"
107 ac_save_CXXFLAGS="$CXXFLAGS"
108 CXXFLAGS=
109 AC_PROG_CXX_G
110 if test "$ac_test_CXXFLAGS" = set; then
111 CXXFLAGS="$ac_save_CXXFLAGS"
112 elif test $ac_cv_prog_cxx_g = yes; then
113 CXXFLAGS="-g -O2"
114 else
115 CXXFLAGS="-O2"
116 fi
117else
118 GXX=
119 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
120fi
121])
122
123LIB_AC_PROG_CXX
124
5780a46b
BK
125 AC_CHECK_TOOL(AS, as)
126 AC_CHECK_TOOL(AR, ar)
127 AC_CHECK_TOOL(RANLIB, ranlib, :)
128
129 AC_PROG_INSTALL
b2dad0e3 130
5780a46b 131 AM_MAINTAINER_MODE
b2dad0e3 132
5780a46b
BK
133 # We need AC_EXEEXT to keep automake happy in cygnus mode. However,
134 # at least currently, we never actually build a program, so we never
135 # need to use $(EXEEXT). Moreover, the test for EXEEXT normally
136 # fails, because we are probably configuring with a cross compiler
137 # which cant create executables. So we include AC_EXEEXT to keep
138 # automake happy, but we dont execute it, since we dont care about
15bcd79a 139 # the result.
5780a46b
BK
140 if false; then
141 AC_EXEEXT
142 fi
b2dad0e3 143
5780a46b 144 # configure.host sets the following important variables
8b8ab21c
BK
145 # glibcpp_cflags - host specific C compiler flags
146 # glibcpp_cxxflags - host specific C++ compiler flags
5780a46b
BK
147 glibcpp_cflags=
148 glibcpp_cxxflags=
b2dad0e3 149
5780a46b
BK
150 . [$]{glibcpp_basedir}/configure.host
151
152 case [$]{glibcpp_basedir} in
153 /* | [A-Za-z]:[/\\]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
154 *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
155 esac
b2dad0e3 156
5780a46b
BK
157 GLIBCPP_CFLAGS="[$]{glibcpp_cflags}"
158 GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}"
159 AC_SUBST(GLIBCPP_CFLAGS)
160 AC_SUBST(GLIBCPP_CXXFLAGS)
b2dad0e3
BK
161])
162
163
164dnl
8bd636c5 165dnl Check to see if g++ can compile this library, and if so, if any version-
c470c17d
BK
166dnl specific precautions need to be taken.
167dnl
168dnl GLIBCPP_CHECK_COMPILER_VERSION
169AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
c470c17d
BK
170 # Sanity check that g++ is capable of dealing with v-3.
171 AC_MSG_CHECKING([for g++ that will successfully compile this code])
172 AC_EGREP_CPP([ok], [
173 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
174 ok
175 #endif
8b8ab21c 176 ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to gcc-2.95 or above]))
c470c17d
BK
177 AC_MSG_RESULT($gpp_satisfactory)
178])
179
180
181dnl
182dnl Test for newer compiler features, or features that are present in newer
d3a12960
BK
183dnl compiler version but not older compiler versions should be placed
184dnl here.
b2dad0e3 185dnl
c470c17d
BK
186dnl Define WFMT_FLAGS='-fdiagnostics-show-location=once' if possible
187dnl
7f586614
BK
188dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
189dnl new inlining code or the new system_header pragma will die on -Werror.
190dnl Leave it out by default and use maint-mode to use it.
b2dad0e3 191dnl
c470c17d
BK
192dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
193dnl compiler supports it.
194dnl GLIBCPP_CHECK_COMPILER_FEATURES
195AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
a4e99046
PE
196 # All these tests are for C++; save the language and the compiler flags.
197 # The CXXFLAGS thing is suspicious, but based on similar bits
198 # found in GLIBCPP_CONFIGURE.
199 AC_LANG_SAVE
200 AC_LANG_CPLUSPLUS
201 ac_test_CXXFLAGS="${CXXFLAGS+set}"
202 ac_save_CXXFLAGS="$CXXFLAGS"
a4e99046 203
7f586614
BK
204 # Check for maintainer-mode bits.
205 if test x"$USE_MAINTAINER_MODE" = xno; then
206 WERROR=''
8bd636c5 207 else
7f586614 208 WERROR='-Werror'
8bd636c5
PE
209 fi
210
d3a12960
BK
211 # Check for more sophisticated diagnostic control.
212 AC_MSG_CHECKING([for g++ that supports -fdiagnostics-show-location=once])
0517cb99 213 CXXFLAGS='-Werror -fdiagnostics-show-location=once'
a4e99046
PE
214 AC_TRY_COMPILE(, [int foo;
215 ], [ac_gabydiags=yes], [ac_gabydiags=no])
216 if test "$ac_test_CXXFLAGS" = set; then
217 CXXFLAGS="$ac_save_CXXFLAGS"
218 else
219 # this is the suspicious part
220 CXXFLAGS=''
221 fi
222 if test "$ac_gabydiags" = "yes"; then
c470c17d 223 WFMT_FLAGS='-fdiagnostics-show-location=once'
a4e99046
PE
224 fi
225 AC_MSG_RESULT($ac_gabydiags)
226
c470c17d
BK
227 # Check for -ffunction-sections -fdata-sections
228 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
0517cb99 229 CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
c470c17d
BK
230 AC_TRY_COMPILE(, [int foo;
231 ], [ac_fdsections=yes], [ac_fdsections=no])
232 if test "$ac_test_CXXFLAGS" = set; then
233 CXXFLAGS="$ac_save_CXXFLAGS"
234 else
235 # this is the suspicious part
236 CXXFLAGS=''
237 fi
238 if test "$ac_fdsections" = "yes"; then
239 SECTION_FLAGS='-ffunction-sections -fdata-sections'
240 fi
241 AC_MSG_RESULT($ac_fdsections)
242
a4e99046 243 AC_LANG_RESTORE
8bd636c5 244 AC_SUBST(WERROR)
c470c17d
BK
245 AC_SUBST(WFMT_FLAGS)
246 AC_SUBST(SECTION_FLAGS)
b2dad0e3
BK
247])
248
c470c17d
BK
249
250dnl
421173e6
PE
251dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
252dnl the native linker is in use, all variables will be defined to something
253dnl safe (like an empty string).
254dnl
255dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
256dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
c470c17d 257dnl
c470c17d
BK
258dnl GLIBCPP_CHECK_LINKER_FEATURES
259AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
421173e6
PE
260 # If we're not using GNU ld, then there's no point in even trying these
261 # tests. Check for that first. We should have already tested for gld
262 # by now (in libtool), but require it now just to be safe...
a9117427
BK
263 SECTION_LDFLAGS=''
264 OPT_LDFLAGS=''
421173e6 265 AC_REQUIRE([AC_PROG_LD])
5bd17d39
PE
266
267 # Set --gc-sections.
268 if test "$ac_cv_prog_gnu_ld" = "broken"; then
a9117427 269 # GNU ld it is! Joy and bunny rabbits!
421173e6
PE
270
271 # All these tests are for C++; save the language and the compiler flags.
272 # Need to do this so that g++ won't try to link in libstdc++
273 ac_test_CFLAGS="${CFLAGS+set}"
274 ac_save_CFLAGS="$CFLAGS"
5bd17d39 275 CFLAGS='-x c++ -Wl,--gc-sections'
421173e6
PE
276
277 # Check for -Wl,--gc-sections
e466dc8a
BK
278 # XXX This test is broken at the moment, as symbols required for
279 # linking are now in libsupc++ (not built yet.....). In addition,
a9117427
BK
280 # this test has cored on solaris in the past. In addition,
281 # --gc-sections doesn't really work at the moment (keeps on discarding
282 # used sections, first .eh_frame and now some of the glibc sections for
283 # iconv). Bzzzzt. Thanks for playing, maybe next time.
421173e6
PE
284 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
285 AC_TRY_RUN([
286 int main(void)
287 {
a9117427
BK
288 try { throw 1; }
289 catch (...) { };
421173e6
PE
290 return 0;
291 }
e466dc8a 292 ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
421173e6
PE
293 if test "$ac_test_CFLAGS" = set; then
294 CFLAGS="$ac_save_CFLAGS"
295 else
296 # this is the suspicious part
297 CFLAGS=''
298 fi
299 if test "$ac_sectionLDflags" = "yes"; then
5bd17d39 300 SECTION_LDFLAGS='-Wl,--gc-sections'
421173e6
PE
301 fi
302 AC_MSG_RESULT($ac_sectionLDflags)
5bd17d39 303 fi
a9117427 304
5bd17d39
PE
305 # Set linker optimization flags.
306 if test "$ac_cv_prog_gnu_ld" = "yes"; then
421173e6 307 OPT_LDFLAGS='-Wl,-O1'
421173e6 308 fi
5bd17d39 309
c470c17d 310 AC_SUBST(SECTION_LDFLAGS)
421173e6 311 AC_SUBST(OPT_LDFLAGS)
c470c17d
BK
312])
313
314
b2dad0e3 315dnl
11fc1858 316dnl Check to see if the (math function) argument passed is
38bd7296
BK
317dnl 1) declared when using the c++ compiler
318dnl 2) has "C" linkage
319dnl
320dnl Define HAVE_CARGF etc if "cargf" is declared and links
321dnl
322dnl argument 1 is name of function to check
323dnl
324dnl ASSUMES argument is a math function with ONE parameter
325dnl
326dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
327AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
38bd7296 328 AC_MSG_CHECKING([for $1 declaration])
421173e6
PE
329 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
330 AC_LANG_SAVE
331 AC_LANG_CPLUSPLUS
332 AC_TRY_COMPILE([#include <math.h>],
333 [ $1(0);],
334 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
335 AC_LANG_RESTORE
336 ])
337 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
338 if test x$glibcpp_cv_func_$1_use = x"yes"; then
38bd7296
BK
339 AC_CHECK_FUNCS($1)
340 fi
341])
342
343
344dnl
11fc1858 345dnl Check to see if the (math function) argument passed is
38bd7296
BK
346dnl 1) declared when using the c++ compiler
347dnl 2) has "C" linkage
348dnl
349dnl Define HAVE_CARGF etc if "cargf" is declared and links
350dnl
351dnl argument 1 is name of function to check
352dnl
353dnl ASSUMES argument is a math function with TWO parameters
354dnl
355dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
356AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
38bd7296 357 AC_MSG_CHECKING([for $1 declaration])
421173e6
PE
358 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
359 AC_LANG_SAVE
360 AC_LANG_CPLUSPLUS
361 AC_TRY_COMPILE([#include <math.h>],
362 [ $1(0, 0);],
363 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
364 AC_LANG_RESTORE
365 ])
366 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
367 if test x$glibcpp_cv_func_$1_use = x"yes"; then
38bd7296
BK
368 AC_CHECK_FUNCS($1)
369 fi
370])
371
372
373dnl
11fc1858 374dnl Check to see if the (math function) argument passed is
38bd7296
BK
375dnl 1) declared when using the c++ compiler
376dnl 2) has "C" linkage
377dnl
378dnl Define HAVE_CARGF etc if "cargf" is declared and links
379dnl
380dnl argument 1 is name of function to check
381dnl
382dnl ASSUMES argument is a math function with THREE parameters
383dnl
384dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
385AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
38bd7296 386 AC_MSG_CHECKING([for $1 declaration])
421173e6
PE
387 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
388 AC_LANG_SAVE
389 AC_LANG_CPLUSPLUS
390 AC_TRY_COMPILE([#include <math.h>],
391 [ $1(0, 0, 0);],
392 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
393 AC_LANG_RESTORE
394 ])
395 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
396 if test x$glibcpp_cv_func_$1_use = x"yes"; then
38bd7296
BK
397 AC_CHECK_FUNCS($1)
398 fi
399])
400
401
5bd17d39
PE
402dnl
403dnl Check to see if the (stdlib function) argument passed is
404dnl 1) declared when using the c++ compiler
405dnl 2) has "C" linkage
406dnl
407dnl Define HAVE_STRTOLD if "strtold" is declared and links
408dnl Define HAVE_STRTOF if "strtof" is declared and links
409dnl
410dnl argument 1 is name of function to check
411dnl
412dnl ASSUMES argument is a math function with TWO parameters
413dnl
414dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2
415AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
416 AC_MSG_CHECKING([for $1 declaration])
417 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
418 AC_LANG_SAVE
419 AC_LANG_CPLUSPLUS
420 AC_TRY_COMPILE([#include <stdlib.h>],
421 [ $1(0, 0);],
422 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
423 AC_LANG_RESTORE
424 ])
425 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
426 if test x$glibcpp_cv_func_$1_use = x"yes"; then
427 AC_CHECK_FUNCS($1)
428 fi
429])
430
431
11fc1858
BK
432dnl
433dnl Because the builtins are picky picky picky about the arguments they take,
434dnl do an explict linkage tests here.
435dnl Check to see if the (math function) argument passed is
436dnl 1) declared when using the c++ compiler
437dnl 2) has "C" linkage
438dnl
439dnl Define HAVE_CARGF etc if "cargf" is declared and links
440dnl
441dnl argument 1 is name of function to check
442dnl
443dnl ASSUMES argument is a math function with ONE parameter
444dnl
445dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
446AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
11fc1858 447 AC_MSG_CHECKING([for $1 declaration])
421173e6
PE
448 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
449 AC_LANG_SAVE
450 AC_LANG_CPLUSPLUS
451 AC_TRY_COMPILE([#include <math.h>],
452 [ $1(0);],
453 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
454 AC_LANG_RESTORE
455 ])
456 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
457 if test x$glibcpp_cv_func_$1_use = x"yes"; then
11fc1858 458 AC_MSG_CHECKING([for $1 linkage])
421173e6 459 AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
11fc1858 460 AC_TRY_LINK([#include <math.h>],
421173e6
PE
461 [ $1(0);],
462 [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
463 ])
464 AC_MSG_RESULT($glibcpp_cv_func_$1_link)
465 if test x$glibcpp_cv_func_$1_link = x"yes"; then
11fc1858
BK
466 ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
467 AC_DEFINE_UNQUOTED(${ac_tr_func})
468 fi
469 fi
470])
471
472
473dnl
474dnl Check to see what builtin math functions are supported
475dnl
476dnl check for __builtin_abs
477dnl check for __builtin_fabsf
478dnl check for __builtin_fabs
479dnl check for __builtin_fabl
480dnl check for __builtin_labs
481dnl check for __builtin_sqrtf
482dnl check for __builtin_sqrtl
483dnl check for __builtin_fsqrt
484dnl check for __builtin_sinf
485dnl check for __builtin_sin
486dnl check for __builtin_sinl
487dnl check for __builtin_cosf
488dnl check for __builtin_cos
489dnl check for __builtin_cosl
490dnl
491dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
492AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
493 dnl Test for builtin math functions.
494 dnl These are made in gcc/c-common.c
495 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
496 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
497 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
498 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
499 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
500
501 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
502 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
503 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
504
505 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
506 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
507 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
508
509 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
510 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
511 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
512
513 dnl There is, without a doubt, a more elegant way to have these
514 dnl names exported so that they won't be stripped out of acconfig.h by
515 dnl autoheader. I leave this as an exercise to somebody less frustrated
516 dnl than I.... please email the libstdc++ list if you can figure out a
517 dnl more elegant approach (see autoconf/acgen.m4 and specifically
518 dnl AC_CHECK_FUNC for things to steal.)
519 dummyvar=no
520 if test x$dummyvar = x"yes"; then
521 AC_DEFINE(HAVE___BUILTIN_ABS)
522 AC_DEFINE(HAVE___BUILTIN_LABS)
523 AC_DEFINE(HAVE___BUILTIN_COS)
524 AC_DEFINE(HAVE___BUILTIN_COSF)
525 AC_DEFINE(HAVE___BUILTIN_COSL)
526 AC_DEFINE(HAVE___BUILTIN_FABS)
527 AC_DEFINE(HAVE___BUILTIN_FABSF)
528 AC_DEFINE(HAVE___BUILTIN_FABSL)
529 AC_DEFINE(HAVE___BUILTIN_SIN)
530 AC_DEFINE(HAVE___BUILTIN_SINF)
531 AC_DEFINE(HAVE___BUILTIN_SINL)
532 AC_DEFINE(HAVE___BUILTIN_FSQRT)
533 AC_DEFINE(HAVE___BUILTIN_SQRTF)
534 AC_DEFINE(HAVE___BUILTIN_SQRTL)
535 fi
536])
537
538
5bd17d39
PE
539dnl
540dnl Check to see what the underlying c library
541dnl These checks need to do two things:
542dnl 1) make sure the name is declared when using the c++ compiler
543dnl 2) make sure the name has "C" linkage
544dnl This might seem like overkill but experience has shown that it's not...
545dnl
546dnl Define HAVE_STRTOF etc if "strtof" is found.
547dnl Define HAVE_STRTOLD etc if "strtold" is found.
548dnl
549dnl GLIBCPP_CHECK_STDLIB_SUPPORT
550AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
551 ac_test_CXXFLAGS="${CXXFLAGS+set}"
552 ac_save_CXXFLAGS="$CXXFLAGS"
553 CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
554
555 AC_CHECK_FUNCS(strtof)
556 GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
557
558 CXXFLAGS="$ac_save_CXXFLAGS"
559])
560
561
2f103494
BK
562dnl
563dnl Check to see what the underlying c library or math library is like.
38bd7296
BK
564dnl These checks need to do two things:
565dnl 1) make sure the name is declared when using the c++ compiler
566dnl 2) make sure the name has "C" linkage
567dnl This might seem like overkill but experience has shown that it's not...
2f103494
BK
568dnl
569dnl Define HAVE_CARGF etc if "cargf" is found.
570dnl
571dnl GLIBCPP_CHECK_MATH_SUPPORT
572AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
38bd7296
BK
573 ac_test_CXXFLAGS="${CXXFLAGS+set}"
574 ac_save_CXXFLAGS="$CXXFLAGS"
4f76382d 575 CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
aac350aa
BK
576
577 dnl Check libm
2f103494 578 AC_CHECK_LIB(m, sin, libm="-lm")
38bd7296 579 ac_save_LIBS="$LIBS"
2f103494
BK
580 LIBS="$LIBS $libm"
581
38bd7296
BK
582 dnl Check to see if certain C math functions exist.
583 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
584 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
585 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
586 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
587 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
588 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
589 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
590
591 dnl Check to see if basic C math functions have float versions.
592 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
593 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
594 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosf)
595 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinf)
596 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanf)
597 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
598 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceilf)
599 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosf)
600 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshf)
601 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
602 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
603 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorf)
604 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
605 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
606 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
607 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
608 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
609 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
610 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
611 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinf)
612 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhf)
613 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
614 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanf)
615 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
616 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
617 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
618
619 dnl Check to see if basic C math functions have long double versions.
620 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
621 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
11fc1858 622 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
38bd7296
BK
623 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
624 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
625 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
626 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
627 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
628 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
629 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
630 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
631 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
632 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
633 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
634 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
635 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
636 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
637 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
638 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
639 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
11fc1858 640 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
38bd7296
BK
641 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
642 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
643 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
644 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
645 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
646 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
647
648 dnl Some runtimes have these functions with a preceding underscore. Please
649 dnl keep this sync'd with the one above. And if you add any new symbol,
650 dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
651 dnl Check to see if certain C math functions exist.
38bd7296
BK
652 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinf)
653 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnan)
654 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finite)
655 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysign)
656 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincos)
657 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fpclass)
658 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_qfpclass)
659
660 dnl Check to see if basic C math functions have float versions.
661 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanf)
662 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinff)
663 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosf)
664 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinf)
665 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanf)
666 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2f)
667 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceilf)
668 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosf)
669 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshf)
670 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expf)
671 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsf)
672 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorf)
673 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodf)
674 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpf)
675 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpf)
676 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logf)
677 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10f)
678 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modff)
679 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powf)
680 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinf)
681 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhf)
682 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtf)
683 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanf)
684 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhf)
685 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
686 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
687
688 dnl Check to see if basic C math functions have long double versions.
689 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
690 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
11fc1858 691 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
38bd7296
BK
692 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
693 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
694 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
695 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
696 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
697 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
698 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
699 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
700 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
701 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
702 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
703 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
704 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
705 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
706 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
707 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
708 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
11fc1858 709 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
38bd7296
BK
710 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
711 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
712 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
713 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
714 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
715 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
716
717 LIBS="$ac_save_LIBS"
718 CXXFLAGS="$ac_save_CXXFLAGS"
2f103494
BK
719])
720
721
722dnl
723dnl Check to see if there is native support for complex
724dnl
725dnl Don't compile bits in math/* if native support exits.
726dnl
8b8ab21c 727dnl Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" is found.
2f103494
BK
728dnl
729dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
730AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
731 dnl Check for complex versions of math functions of platform.
732 AC_CHECK_HEADERS([complex.h])
b4b2a487
MM
733 AC_CHECK_LIB(m, main)
734 AC_REPLACE_MATHFUNCS(cabs cabsf ccos ccosf ccosh ccoshf cexp cexpf \
735 c_log c_logf clog10 clog10f cpow cpowf csin csinf csinh csinhf csqrt \
736 csqrtf ctan ctanf ctanh ctanhf carg cargf nan hypot hypotf atan2f expf \
737 copysignf)
11fc1858
BK
738
739 dnl Compile the long double complex functions only if the function
740 dnl provides the non-complex long double functions that are needed.
741 dnl Currently this includes copysignl and atan2l, which should be
742 dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
743 USE_COMPLEX_LONG_DOUBLE=no
744 if test x$ac_cv_func_atan2l = x"yes" \
745 && test x$ac_cv_func_copysignl = x"yes"; then
746 USE_COMPLEX_LONG_DOUBLE=yes
b4b2a487 747 AC_REPLACE_MATHFUNCS(cabsl ccoshl ccosl cexpl cpowl csinhl csinl \
11fc1858
BK
748 csqrtl ctanhl ctanl cargl hypotl signbitl c_logl clog10l)
749 fi
750
2f103494
BK
751 AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
752])
753
54fa7415 754
e974e9cc
BK
755dnl Check to see what architecture we are compiling for. Also, if
756dnl architecture-specific flags are required for compilation, add them here.
b2dad0e3 757dnl
b2dad0e3
BK
758dnl GLIBCPP_CHECK_CPU
759AC_DEFUN(GLIBCPP_CHECK_CPU, [
e974e9cc
BK
760 AC_MSG_CHECKING([for cpu config directory])
761# Currently unused, but could be useful.
8b8ab21c 762# CPU_FLAGS=
5780a46b 763 case "${target_cpu}" in
b2dad0e3 764 alpha*)
8b8ab21c 765 cpu_include_dir="config/cpu/alpha"
b2dad0e3
BK
766 ;;
767 arm*)
8b8ab21c 768 cpu_include_dir="config/cpu/arm"
b2dad0e3 769 ;;
735bce7e 770 ia64)
8b8ab21c
BK
771 cpu_include_dir="config/cpu/ia64"
772 ;;
bf93f43b 773 i386)
8b8ab21c
BK
774 cpu_include_dir="config/cpu/i386"
775 ;;
bf93f43b 776 i486 | i586 | i686 | i786)
8b8ab21c 777 cpu_include_dir="config/cpu/i486"
b2dad0e3
BK
778 ;;
779 powerpc | rs6000)
8b8ab21c 780 cpu_include_dir="config/cpu/powerpc"
b2dad0e3
BK
781 ;;
782 sparc64 | ultrasparc)
8b8ab21c 783 cpu_include_dir="config/cpu/sparc/sparc64"
b2dad0e3
BK
784 ;;
785 sparc*)
8b8ab21c 786 cpu_include_dir="config/cpu/sparc/sparc32"
b2dad0e3
BK
787 ;;
788 *)
8b8ab21c 789 cpu_include_dir="config/cpu/generic"
b2dad0e3
BK
790 ;;
791 esac
792 AC_MSG_RESULT($cpu_include_dir)
b2dad0e3
BK
793])
794
795
e974e9cc
BK
796dnl Check to see what OS we are compiling for. Also, if os-specific flags
797dnl are required for compilation, add them here.
798dnl
799dnl GLIBCPP_CHECK_OS
800AC_DEFUN(GLIBCPP_CHECK_OS, [
626d8f0a 801 AC_MSG_CHECKING([for OS config directory])
e974e9cc
BK
802# Currently unused, but could be useful.
803# OS_FLAGS=
804 case "${target_os}" in
626d8f0a
PE
805 aix4.[[3456789]]* | aix[[56789]]*)
806 os_include_dir="config/os/aix"
807 case "$CXX" in
808 *pthread*)
809 enable_threads='posix'
810 ;;
811 *)
812 enable_threads='no'
813 ;;
814 esac
815 ;;
e974e9cc 816 aix*)
8b8ab21c 817 os_include_dir="config/os/aix"
e974e9cc
BK
818 ;;
819 bsd* | freebsd*)
8b8ab21c 820 os_include_dir="config/os/bsd"
e974e9cc
BK
821 ;;
822 linux*)
8b8ab21c
BK
823 os_include_dir="config/os/gnu-linux"
824 ;;
e974e9cc 825 irix*)
8b8ab21c
BK
826 os_include_dir="config/os/irix"
827 ;;
e974e9cc 828 solaris2.5*)
8b8ab21c 829 os_include_dir="config/os/solaris/solaris2.5"
e974e9cc
BK
830 ;;
831 solaris2.6*)
8b8ab21c 832 os_include_dir="config/os/solaris/solaris2.6"
e974e9cc
BK
833 ;;
834 solaris2.7* | solaris2.8*)
8b8ab21c 835 os_include_dir="config/os/solaris/solaris2.7"
e974e9cc
BK
836 ;;
837 *)
8b8ab21c 838 os_include_dir="config/os/generic"
e974e9cc
BK
839 ;;
840 esac
841 AC_MSG_RESULT($os_include_dir)
5e53dba6 842 AC_LINK_FILES($os_include_dir/bits/os_defines.h, include/bits/os_defines.h)
e974e9cc
BK
843])
844
845
b2dad0e3
BK
846dnl
847dnl Check to see what the underlying c library's interface to ctype looks
848dnl like. Bits of locale rely on things like isspace, toupper, etc. This
849dnl stuff makes sure the right bits from the clibrary get called.
850dnl
851dnl Depending on what is found, select various configure/*/bits/ctype_base.h
852dnl Depending on what is found, select various configure/*/ctype.cc
853dnl
5bd17d39
PE
854dnl GLIBCPP_CHECK_CTYPE_SUPPORT
855AC_DEFUN(GLIBCPP_CHECK_CTYPE_SUPPORT, [
b2dad0e3
BK
856 AC_CHECK_HEADER(ctype.h, [
857
858 dnl If doesn't match any specified, go with defaults.
859 ctype_default=yes
860
9a200b0a
PE
861 dnl Test for <ctype> functionality -- GNU/Linux
862 AC_MSG_CHECKING([<ctype> for GNU/Linux])
b2dad0e3
BK
863 AC_TRY_COMPILE([#include <ctype.h>],
864 [int
865 foo (int a)
866 { return _ISspace + _ISprint + _IScntrl + _ISupper + _ISlower + _ISalpha \
8b8ab21c
BK
867 + _ISdigit + _ISpunct + _ISxdigit + _ISalnum + _ISgraph \
868 + __ctype_tolower[a] + __ctype_toupper[a] + __ctype_b[a];}], \
b2dad0e3
BK
869 ctype_linux=yes, ctype_linux=no)
870 AC_MSG_RESULT($ctype_linux)
871 if test $ctype_linux = "yes"; then
e974e9cc 872 ctype_include_dir="config/os/gnu-linux"
b2dad0e3
BK
873 ctype_default=no
874 fi
875
6ad50467 876 dnl Test for <ctype> functionality -- FreeBSD 4.0
65dd21b7 877 if test $ctype_default = "yes"; then
9a200b0a 878 AC_MSG_CHECKING([<ctype> for FreeBSD 4.0])
7b267e3e
BK
879 AC_TRY_COMPILE([#include <ctype.h>],
880 [int
881 foo (int a)
882 { return _CTYPE_S + _CTYPE_R + _CTYPE_C + _CTYPE_U + _CTYPE_L + _CTYPE_A \
8b8ab21c 883 + _CTYPE_D + _CTYPE_P + _CTYPE_X + _CTYPE_G ;}], \
7b267e3e
BK
884 ctype_bsd=yes, ctype_bsd=no)
885 AC_MSG_RESULT($ctype_bsd)
886 if test $ctype_bsd = "yes"; then
e974e9cc 887 ctype_include_dir="config/os/bsd"
7b267e3e
BK
888 ctype_default=no
889 fi
65dd21b7 890 fi
7b267e3e 891
6ad50467 892 dnl Test for <ctype> functionality -- FreeBSD 3.4
65dd21b7 893 if test $ctype_default = "yes"; then
9a200b0a 894 AC_MSG_CHECKING([<ctype> for FreeBSD 3.4])
6ad50467
BK
895 AC_TRY_COMPILE([#include <ctype.h>],
896 [int
897 foo (int a)
898 { return _S + _R + _C + _U + _L + _A \
899 + _D + _P + _X + _G + __istype (a, 0);}], \
900 ctype_freebsd34=yes, ctype_freebsd34=no)
901 AC_MSG_RESULT($ctype_freebsd34)
902 if test $ctype_freebsd34 = "yes"; then
e974e9cc 903 ctype_include_dir="config/os/bsd"
6ad50467
BK
904 ctype_default=no
905 fi
65dd21b7 906 fi
6ad50467 907
9a200b0a 908 dnl Test for <ctype> functionality -- Solaris 2.6 and up
b2dad0e3 909 if test $ctype_default = "yes"; then
9a200b0a 910 AC_MSG_CHECKING([<ctype> for Solaris 2.6,7,8])
b2dad0e3
BK
911 AC_TRY_COMPILE([#include <ctype.h>],
912 [int
913 foo (int a)
914 { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
8b8ab21c
BK
915 + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
916 + __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}], \
b2dad0e3
BK
917 ctype_solaris=yes, ctype_solaris=no)
918 AC_MSG_RESULT($ctype_solaris)
919
920 if test $ctype_solaris = "yes"; then
921 AC_MSG_CHECKING([ for version])
922 AC_LANG_CPLUSPLUS
923 AC_TRY_COMPILE([#include <ctype.h>],
924 [typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;],\
925 ctype_solaris26=yes, ctype_solaris26=no)
926 AC_LANG_C
927 if test $ctype_solaris26 = "yes"; then
e974e9cc 928 ctype_include_dir="config/os/solaris/solaris2.6"
9a200b0a 929 AC_MSG_RESULT([Solaris 2.6])
b2dad0e3
BK
930 ctype_default=no
931 else
e974e9cc 932 ctype_include_dir="config/os/solaris/solaris2.7"
9a200b0a 933 AC_MSG_RESULT([Solaris 7,8])
b2dad0e3
BK
934 ctype_default=no
935 fi
936 fi
937 fi
938
9a200b0a 939 dnl Test for <ctype> functionality -- Solaris 2.5.1
b2dad0e3 940 if test $ctype_default = "yes"; then
9a200b0a 941 AC_MSG_CHECKING([<ctype> for Solaris 2.5.1])
b2dad0e3
BK
942 AC_TRY_COMPILE([#include <ctype.h>],
943 [int
944 foo (int a)
945 { return _U + _L + _N + _S + _P + _C + _X + _B \
8b8ab21c 946 + __ctype[a];}], \
b2dad0e3
BK
947 ctype_solaris25=yes, ctype_solaris25=no)
948 AC_MSG_RESULT($ctype_solaris25)
949 if test $ctype_solaris25 = "yes"; then
e974e9cc 950 ctype_include_dir="config/os/solaris/solaris2.5"
b2dad0e3
BK
951 ctype_default=no
952 fi
953 fi
954
9a200b0a 955 dnl Test for <ctype> functionality -- AIX
b2dad0e3 956 if test $ctype_default = "yes"; then
9a200b0a 957 AC_MSG_CHECKING([<ctype> for AIX])
b2dad0e3
BK
958 AC_TRY_COMPILE([#include <ctype.h>],
959 [int
960 foo (int a)
961 { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
8b8ab21c
BK
962 + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
963 + _VALC('a') + _IS('c', 0);}], \
b2dad0e3
BK
964 ctype_aix=yes, ctype_aix=no)
965 AC_MSG_RESULT($ctype_aix)
966 if test $ctype_aix = "yes"; then
e974e9cc 967 ctype_include_dir="config/os/aix"
b2dad0e3
BK
968 ctype_default=no
969 fi
970 fi
971
dbf5ba31 972 dnl Test for <ctype> functionality -- IRIX
5a0b0c7a 973 if test $ctype_default ="yes"; then
dbf5ba31
MM
974 AC_MSG_CHECKING([<ctype> for IRIX])
975 AC_TRY_COMPILE([#include <ctype.h>],
976 [int
977 foo (int a)
978 { return _U + _L + _N + _S + _P + _C + _B + _X + \
979 _A + _PR + _G + _BL;}], \
980 ctype_irix=yes, ctype_irix=no)
981 AC_MSG_RESULT($ctype_irix)
982 if test $ctype_irix = "yes"; then
983 ctype_include_dir="config/os/irix"
984 ctype_default=no
985 fi
986 fi
987
b2dad0e3
BK
988 dnl Test for <ctype> functionality -- newlib
989 if test $ctype_default = "yes"; then
9a200b0a 990 AC_MSG_CHECKING([<ctype> for newlib])
b2dad0e3
BK
991 AC_TRY_COMPILE([#include <ctype.h>],
992 [int
993 foo (int a)
994 { return _U + _L + _N + _S + _P + _C + _X + _B \
8b8ab21c 995 + _ctype_[a];}], \
b2dad0e3
BK
996 ctype_newlib=yes, ctype_newlib=no)
997 AC_MSG_RESULT($ctype_newlib)
998 if test $ctype_newlib = "yes"; then
999 ctype_include_dir="config/newlib"
1000 ctype_default=no
1001 fi
1002 fi
1003
1004 if test $ctype_default = "yes"; then
e974e9cc 1005 ctype_include_dir="config/os/generic"
b2dad0e3
BK
1006 AC_MSG_WARN("Using default ctype headers.")
1007 fi
e974e9cc 1008
5e53dba6
BK
1009 AC_LINK_FILES($ctype_include_dir/bits/ctype_base.h,
1010 include/bits/ctype_base.h)
1011 AC_LINK_FILES($ctype_include_dir/bits/ctype_inline.h,
1012 include/bits/ctype_inline.h)
e974e9cc 1013 AC_LINK_FILES($ctype_include_dir/bits/ctype_noninline.h, \
5e53dba6 1014 include/bits/ctype_noninline.h)
b2dad0e3
BK
1015 ])
1016])
1017
1018
b2dad0e3
BK
1019dnl
1020dnl Check to see if this target can enable the wchar_t parts of libstdc++.
8b8ab21c
BK
1021dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled. (This
1022dnl must have been previously checked.)
b2dad0e3 1023dnl
15bcd79a
BK
1024dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
1025dnl Define _GLIBCPP_NEED_MBSTATE_T if mbstate_t is not in wchar.h
b2dad0e3
BK
1026dnl
1027dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
1028AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
8b8ab21c
BK
1029 if test x$enable_c_mbchar != xno; then
1030
1031 dnl Sanity check for existence of ISO C9X headers for extended encoding.
1032 AC_CHECK_HEADER(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
1033 AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
1034
1035 dnl Only continue checking if the ISO C9X headers exist.
1036 if test x"$ac_has_wchar_h" = xyes && test x"$ac_has_wctype_h" = xyes; then
15bcd79a 1037
8b8ab21c
BK
1038 dnl Test wchar.h for mbstate_t, which is needed for char_traits
1039 dnl and others.
1040 AC_MSG_CHECKING([for mbstate_t])
1041 AC_TRY_COMPILE([#include <wchar.h>],
1042 [mbstate_t teststate;],
1043 use_native_mbstatet=yes, use_native_mbstatet=no)
1044 AC_MSG_RESULT($use_native_mbstatet)
1045 if test x"$use_native_mbstatet" = xno; then
1046 AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
1047 fi
1048
1049 dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
1050 dnl numeric_limits can instantiate type_traits<wchar_t>
1051 AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
1052 AC_TRY_COMPILE([#include <wchar.h>],
1053 [int i = WCHAR_MIN; int j = WCHAR_MAX;],
1054 has_wchar_minmax=yes, has_wchar_minmax=no)
1055 AC_MSG_RESULT($has_wchar_minmax)
1056
1057 dnl Test wchar.h for WEOF, which is what we use to determine whether
1058 dnl to specialize for char_traits<wchar_t> or not.
1059 AC_MSG_CHECKING([for WEOF])
1060 AC_TRY_COMPILE([
1061 #include <wchar.h>
1062 #include <stddef.h>],
1063 [wint_t i = WEOF;],
1064 has_weof=yes, has_weof=no)
1065 AC_MSG_RESULT($has_weof)
1066
1067 dnl Tests for wide character functions used in char_traits<wchar_t>.
1068 AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
1069 wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
1070
1071 AC_MSG_CHECKING([for ISO C9X wchar_t support])
1072 if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
1073 && test x"$ac_wfuncs" = xyes; then
1074 ac_isoC9X_wchar_t=yes
1075 else
1076 ac_isoC9X_wchar_t=no
1077 fi
1078 AC_MSG_RESULT($ac_isoC9X_wchar_t)
1079
1080 dnl Use iconv for wchar_t to char conversions. As such, check for
1081 dnl X/Open Portability Guide, version 2 features (XPG2).
1082 AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
1083 AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
1084 AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
1085 ac_XPG2funcs=yes, ac_XPG2funcs=no)
1086
1087 AC_MSG_CHECKING([for XPG2 wchar_t support])
1088 if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
1089 && test x"$ac_XPG2funcs" = xyes; then
1090 ac_XPG2_wchar_t=yes
1091 else
1092 ac_XPG2_wchar_t=no
1093 fi
1094 AC_MSG_RESULT($ac_XPG2_wchar_t)
1095
1096 dnl At the moment, only enable wchar_t specializations if all the
1097 dnl above support is present.
1098 AC_MSG_CHECKING([for enabled wchar_t specializations])
1099 if test x"$ac_isoC9X_wchar_t" = xyes \
1100 && test x"$ac_XPG2_wchar_t" = xyes; then
1101 libinst_wstring_la="libinst-wstring.la"
1102 AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
1103 AC_MSG_RESULT("yes")
1104 else
1105 libinst_wstring_la=""
1106 AC_MSG_RESULT("no")
1107 fi
1108 AC_SUBST(libinst_wstring_la)
15bcd79a 1109
15bcd79a 1110 else
8b8ab21c
BK
1111 AC_MSG_WARN([<wchar.h> not found])
1112 AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
15bcd79a 1113 fi
3840fa2a 1114
15bcd79a 1115 else
8b8ab21c
BK
1116 dnl Wide characters disabled by the user. Maybe print a warning?
1117 :
b2dad0e3 1118 fi
b2dad0e3
BK
1119])
1120
1121
1122dnl
1123dnl Check to see if this version of GNU C++ is afflicted by bugs in
1124dnl __complex__ float support.
1125dnl
1126dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
1127dnl
2f103494
BK
1128dnl Check to see if this version of GNU C++ is afflicted by bugs in
1129dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
1130dnl gcc-2.95.x when using the library, unless we define the default copy
1131dnl ctor in the specializations of complex<>.
1132dnl
1133dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
1134dnl GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT
1135AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
b2dad0e3 1136 AC_REQUIRE([AC_PROG_CXX])
2f103494
BK
1137
1138 AC_MSG_CHECKING([for GNU C++ __complex__ support])
1139 AC_CACHE_VAL(glibcpp_cv_complex, [
1140 AC_LANG_SAVE
1141 AC_LANG_CPLUSPLUS
1142 AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
8b8ab21c
BK
1143 dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
1144 [ dcomplex x; f(x); ],
2f103494
BK
1145 glibcpp_cv_complex=ok,
1146 glibcpp_cv_complex=buggy
1147 )
1148 AC_LANG_RESTORE
1149 ])
1150 AC_MSG_RESULT($glibcpp_cv_complex)
1151 if test $glibcpp_cv_complex = buggy; then
1152 AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
1153 fi
1154
b2dad0e3
BK
1155 AC_MSG_CHECKING([for GNU C++ __complex__ float support])
1156 AC_CACHE_VAL(glibcpp_cv_float_complex, [
1157 AC_LANG_SAVE
1158 AC_LANG_CPLUSPLUS
1159 rm -f conftest.h
1160 cat > conftest.h <<EOB
1161 //
1162 // Check for buggy __complex__ that causes ICE in most versions of egcs
1163 // and gcc-2.95.x on certain platforms (eg., x86-win32).
1164 //
747dcaf1 1165 // See http://gcc.gnu.org/ml/gcc-bugs/1999-07n/msg00845.html for
b2dad0e3
BK
1166 // more info on the bug itself.
1167 //
1168 struct
1169 float_complex
1170 {
1171 __complex__ float m_value;
1172 float_complex (float = 0.0f, float = 0.0f);
1173 float_complex (__complex__ float val) : m_value (val) {}
1174 float_complex foo (const float_complex &val)
1175 { return float_complex (~val.m_value); }
1176 };
1177EOB
1178 AC_TRY_COMPILE([#include "conftest.h"], ,
1179 glibcpp_cv_float_complex=ok,
1180 glibcpp_cv_float_complex=buggy
1181 )
1182 AC_LANG_RESTORE
1183 ])
1184 AC_MSG_RESULT($glibcpp_cv_float_complex)
1185 if test $glibcpp_cv_float_complex = buggy; then
1186 AC_DEFINE(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
1187 fi
1188])
1189
1190
b2dad0e3 1191dnl
8bd636c5 1192dnl Check for special debugging mode; not for production use.
b2dad0e3
BK
1193dnl
1194dnl GLIBCPP_ENABLE_DEBUG
34791641 1195dnl --enable-debug sets '-ggdb3 -O0'.
b2dad0e3
BK
1196dnl --disable-debug sets '-g' and whatever optimization options the
1197dnl compiler can handle.
7f586614 1198dnl + --enable-maintainer-mode automatically defaults this to on.
b2dad0e3
BK
1199dnl + Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
1200dnl + Usage: GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
1201dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
1202dnl defaults to `no'.
1203AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
1204define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
1205AC_ARG_ENABLE(debug,
1206changequote(<<, >>)dnl
1207<< --enable-debug extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
1208changequote([, ])dnl
5780a46b 1209[case "${enableval}" in
b2dad0e3
BK
1210 yes) enable_debug=yes ;;
1211 no) enable_debug=no ;;
1212 *) AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
1213 esac],
1214enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
5780a46b 1215
b2dad0e3 1216dnl Option parsed, now set things appropriately
5780a46b 1217case "${enable_debug}" in
cde28f0d 1218 yes)
34791641 1219 DEBUG_FLAGS='-O0 -ggdb3'
8b8ab21c 1220 ;;
f3b004d8 1221 no)
8b8ab21c 1222 DEBUG_FLAGS='-g'
f3b004d8 1223 ;;
b2dad0e3 1224esac
c470c17d 1225AC_SUBST(DEBUG_FLAGS)
b2dad0e3
BK
1226])
1227
1228
dcfa0bc8
PE
1229dnl
1230dnl Check for "unusual" flags to pass to the compiler while building.
1231dnl
1232dnl GLIBCPP_ENABLE_CXX_FLAGS
1233dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1234dnl experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
1235dnl Somehow this same set of flags must be passed when [re]building
1236dnl libgcc.
1237dnl --disable-cxx-flags passes nothing.
32a4595e
PE
1238dnl + See http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00131.html
1239dnl http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00284.html
1240dnl http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00035.html
dcfa0bc8 1241dnl + Usage: GLIBCPP_ENABLE_CXX_FLAGS(default flags)
32a4595e
PE
1242dnl If "default flags" is an empty string (or "none"), the effect is
1243dnl the same as --disable or --enable=no.
dcfa0bc8
PE
1244AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
1245define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
1246AC_ARG_ENABLE(cxx-flags,
1247changequote(<<, >>)dnl
1248<< --enable-cxx-flags=FLAGS pass compiler FLAGS when building library;
1249 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
1250changequote([, ])dnl
1251[case "x$enableval" in
5780a46b 1252 xyes)
8b8ab21c 1253 AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
5780a46b 1254 xno|x)
8b8ab21c 1255 enable_cxx_flags='' ;;
5780a46b 1256 *)
8b8ab21c 1257 enable_cxx_flags="$enableval" ;;
dcfa0bc8 1258 esac],
5780a46b
BK
1259enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
1260
32a4595e 1261dnl Thinko on my part during design. This kludge is the workaround.
5780a46b
BK
1262if test "$enable_cxx_flags" = "none"; then
1263 enable_cxx_flags='';
1264fi
1265
32a4595e
PE
1266dnl Run through flags (either default or command-line) and set anything
1267dnl extra (e.g., #defines) that must accompany particular g++ options.
dcfa0bc8
PE
1268if test -n "$enable_cxx_flags"; then
1269 for f in $enable_cxx_flags; do
1270 case "$f" in
991a40fc 1271 -fhonor-std) ;;
dcfa0bc8
PE
1272 -*) ;;
1273 *) # and we're trying to pass /what/ exactly?
1274 AC_MSG_ERROR([compiler flags start with a -]) ;;
1275 esac
1276 done
1277fi
1278EXTRA_CXX_FLAGS="$enable_cxx_flags"
1279AC_SUBST(EXTRA_CXX_FLAGS)
1280])
1281
1282
b2dad0e3 1283dnl
8bd636c5 1284dnl Check for which I/O library to use: libio, or something specific.
b2dad0e3
BK
1285dnl
1286dnl GLIBCPP_ENABLE_CSTDIO
1287dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1288dnl
1289dnl default is libio
1290dnl
1291AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1292 AC_MSG_CHECKING([for cstdio to use])
1293 AC_ARG_ENABLE(cstdio,
1fd2f510
BK
1294 [ --enable-cstdio enable GNU libio for target io package. (default)
1295 --enable-cstdio=LIB use LIB target-speific io package.],
b2dad0e3 1296 if test x$enable_cstdio = xno; then
8b8ab21c 1297 enable_cstdio=libio
b2dad0e3 1298 fi,
15bcd79a 1299 enable_cstdio=libio)
b2dad0e3
BK
1300
1301 enable_cstdio_flag=$enable_cstdio
1302
8b8ab21c 1303 dnl Check if a valid I/O package
b2dad0e3 1304 case x${enable_cstdio_flag} in
dd75251f
BK
1305 xlibio | x | xno | xnone | xyes)
1306 # default
1307 CSTDIO_H=config/c_io_libio.h
1308 CSTDIO_CC=config/c_io_libio.cc
1309 AC_MSG_RESULT(libio)
1310
1311 # see if we are on a system with libio native (ie, linux)
1312 AC_CHECK_HEADER(libio.h, has_libio=yes, has_libio=no)
1313
1314 # Need to check and see what version of glibc is being used. If
1315 # it's not glibc-2.2 or higher, then we'll need to go ahead and
1316 # compile most of libio for linux systems.
1317 if test x$has_libio = x"yes"; then
1318 case "$target" in
1319 *-*-linux*)
8b8ab21c
BK
1320 AC_MSG_CHECKING([for glibc version >= 2.2])
1321 AC_EGREP_CPP([ok], [
1322 #include <features.h>
1323 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1324 ok
1325 #endif
1326 ], glibc_satisfactory=yes, glibc_satisfactory=no)
1327 AC_MSG_RESULT($glibc_satisfactory)
1328 ;;
dd75251f
BK
1329 esac
1330
8b8ab21c 1331 # XXX at the moment, admit defeat and force the recompilation
f133a43e 1332 # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
8b8ab21c
BK
1333 glibc_satisfactory=no
1334
1335 if test x$glibc_satisfactory = x"yes"; then
1336 need_libio=no
8b8ab21c
BK
1337 need_wlibio=no
1338 else
1339 need_libio=yes
8b8ab21c
BK
1340 # bkoz XXX need to add checks to enable this
1341 # pme XXX here's a first pass at such a check
1342 if test x$enable_c_mbchar != xno; then
1343 need_wlibio=yes
1344 else
1345 need_wlibio=no
1346 fi
1347 fi
dd75251f 1348
dd75251f 1349 else
5bd17d39 1350 # Using libio, but <libio.h> doesn't exist on the target system. . .
8b8ab21c 1351 need_libio=yes
8b8ab21c
BK
1352 # bkoz XXX need to add checks to enable this
1353 # pme XXX here's a first pass at such a check
1354 if test x$enable_c_mbchar != xno; then
1355 need_wlibio=yes
1356 else
1357 need_wlibio=no
1358 fi
dd75251f
BK
1359 fi
1360 ;;
9717c75c
BK
1361 xstdio)
1362 CSTDIO_H=config/c_io_stdio.h
1363 CSTDIO_CC=config/c_io_stdio.cc
1364 AC_MSG_RESULT(stdio)
dd75251f
BK
1365
1366 need_libio=no
dd75251f
BK
1367 ;;
1368 *)
1369 echo "$enable_cstdio is an unknown io package" 1>&2
1370 exit 1
1371 ;;
b2dad0e3 1372 esac
5e53dba6 1373 AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
c4561450 1374 AC_LINK_FILES($CSTDIO_CC, src/c++io.cc)
8901ac21
BK
1375
1376 # 2000-08-04 bkoz hack
1377 CCODECVT_C=config/c_io_libio_codecvt.c
1378 AC_LINK_FILES($CCODECVT_C, libio/c_codecvt.c)
1379 # 2000-08-04 bkoz hack
8b8ab21c 1380
b2dad0e3 1381 AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
20427c6b 1382 AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
b2dad0e3
BK
1383])
1384
1385
1386dnl
8bd636c5 1387dnl Check for which threading library to use.
b2dad0e3
BK
1388dnl
1389dnl GLIBCPP_ENABLE_THREADS
1390dnl --enable-threads=posix sets config/threads-posix.h et. al.
1391dnl
8b8ab21c
BK
1392dnl Default is no threads, which also disables _IO_MTSAFE_IO in
1393dnl libio. Any actual thread package will enable it.
b2dad0e3
BK
1394dnl
1395AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1396 dnl Note this comes from the gcc/config.in and libjava/config.in
1397 dnl Efforts should be made to keep this in sync.
1398 AC_MSG_CHECKING([for threads package to use])
1399 AC_ARG_ENABLE(threads,
1400 [ --enable-threads enable thread usage for target GCC.
1fd2f510 1401 --enable-threads=LIB use LIB thread package for target GCC.],
b2dad0e3
BK
1402 if test x$enable_threads = xno; then
1403 enable_threads=''
1404 fi,
1405 enable_threads='')
1406
1407 enable_threads_flag=$enable_threads
1408
1409 dnl Check if a valid thread package
1410 case x${enable_threads_flag} in
8b8ab21c
BK
1411 x | xno | xnone)
1412 # No threads
1413 target_thread_file='single'
1414 ;;
1415 xyes)
1416 # default
1417 target_thread_file=''
1418 ;;
1419 xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
1420 xsolaris | xwin32 | xdce | xvxworks)
1421 target_thread_file=$enable_threads_flag
1422 ;;
1423 *)
1424 echo "$enable_threads is an unknown thread package" 1>&2
1425 exit 1
1426 ;;
b2dad0e3
BK
1427 esac
1428
1429 dnl Check for thread package actually supported in libstdc++
e974e9cc 1430 THREADH=
b2dad0e3
BK
1431 case "$target_thread_file" in
1432 no | none | single)
e974e9cc 1433 THREADH=threads-no.h
b2dad0e3
BK
1434 ;;
1435 posix | pthreads)
e974e9cc 1436 THREADH=threads-posix.h
b2dad0e3
BK
1437 ;;
1438 decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
1439 AC_MSG_ERROR(thread package $THREADS not yet supported)
1440 ;;
1441 *)
1442 AC_MSG_ERROR($THREADS is an unknown thread package)
1443 ;;
1444 esac
e974e9cc 1445 AC_MSG_RESULT($THREADH)
b2dad0e3 1446
5e53dba6 1447 AC_LINK_FILES(config/$THREADH, include/bits/c++threads.h)
8b8ab21c
BK
1448 if test $THREADH != threads-no.h; then
1449 AC_DEFINE(_GLIBCPP_USE_THREADS)
1450 fi
b2dad0e3
BK
1451])
1452
1453
e974e9cc
BK
1454dnl Enable atomic locking
1455dnl GLIBCPP_ENABLE_ATOMICITY
1456AC_DEFUN(GLIBCPP_ENABLE_ATOMICITY, [
1457 AC_MSG_CHECKING([for atomicity.h])
1458 case "$target" in
8b8ab21c
BK
1459 *-*-linux* | sparc*-*-*)
1460 ATOMICITYH=$cpu_include_dir
1461 ;;
626d8f0a 1462 *-*-aix* | *-*-irix*)
e974e9cc 1463 ATOMICITYH=$os_include_dir
8b8ab21c 1464 ;;
e974e9cc 1465 *)
8b8ab21c
BK
1466 # bit of overkill on this text...
1467 AC_MSG_ERROR([Atomic locking requested, but $enable_threads is an unknown thread package and atomic operations are not present in the CPU])
1468 ;;
e974e9cc
BK
1469 esac
1470 AC_MSG_RESULT($ATOMICITYH/bits/atomicity.h)
5e53dba6 1471 AC_LINK_FILES($ATOMICITYH/bits/atomicity.h, include/bits/atomicity.h)
e974e9cc
BK
1472])
1473
1474
b2dad0e3 1475dnl
8bd636c5 1476dnl Check for template specializations for the 'long long' type extension.
b2dad0e3
BK
1477dnl
1478dnl GLIBCPP_ENABLE_LONG_LONG
1479dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1480dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1481dnl + Usage: GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1482dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
1483dnl defaults to `no'.
0137be2d 1484dnl + If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
b2dad0e3
BK
1485dnl
1486dnl GLIBCPP_ENABLE_LONG_LONG
1487AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1488 define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
30ff6342 1489
b2dad0e3
BK
1490 AC_ARG_ENABLE(long-long,
1491 changequote(<<, >>)dnl
d0d88ce3 1492 <<--enable-long-long turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
b2dad0e3
BK
1493 changequote([, ])dnl
1494 [case "$enableval" in
1495 yes) enable_long_long=yes ;;
1496 no) enable_long_long=no ;;
1497 *) AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1498 esac],
1499 enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
30ff6342
BK
1500
1501 # Check for the existance of functions used if long long is enabled.
1502 AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
1503 AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
1504
3840fa2a 1505 AC_MSG_CHECKING([for enabled long long])
30ff6342 1506 if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then
3840fa2a
BK
1507 enable_long_long=no;
1508 fi;
d0d88ce3 1509 AC_MSG_RESULT($enable_long_long)
3840fa2a 1510
b2dad0e3 1511 dnl Option parsed, now set things appropriately
dcc41852
BK
1512 if test x"$enable_long_long" = xyes; then
1513 AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1514 fi
b2dad0e3
BK
1515])
1516
1517
99246c90 1518dnl
8bd636c5 1519dnl Check for whether or not to do shadowed C headers.
99246c90
PE
1520dnl
1521dnl GLIBCPP_ENABLE_SHADOW
d0d88ce3
BK
1522dnl --enable-cshadow-headers [does stuff].
1523dnl --disable-cshadow-headers [does not do stuff].
99246c90
PE
1524dnl + This will eventually need to be on by default.
1525dnl + Usage: GLIBCPP_ENABLE_SHADOW[(DEFAULT)]
1526dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
1527dnl defaults to `no'.
1528AC_DEFUN(GLIBCPP_ENABLE_SHADOW, [dnl
1529define([GLIBCPP_ENABLE_SHADOW_DEFAULT], ifelse($1, yes, yes, no))dnl
d0d88ce3
BK
1530AC_MSG_CHECKING([for enabled cshadow headers])
1531AC_ARG_ENABLE(cshadow-headers,
99246c90 1532changequote(<<, >>)dnl
d0d88ce3
BK
1533<< --enable-cshadow-headers construct "shadowed" C header files for
1534 g++ [default=>>GLIBCPP_ENABLE_SHADOW_DEFAULT],
5780a46b
BK
1535changequote([, ])
1536 [case "$enableval" in
1537 yes) enable_cshadow_headers=yes
8b8ab21c 1538 ;;
5780a46b 1539 no) enable_cshadow_headers=no
8b8ab21c 1540 ;;
5780a46b 1541 *) AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers])
8b8ab21c 1542 ;;
5780a46b
BK
1543 esac],
1544 enable_cshadow_headers=GLIBCPP_ENABLE_SHADOW_DEFAULT)
1545 AC_MSG_RESULT($enable_cshadow_headers)
1546
1547 dnl Option parsed, now set things appropriately
0517cb99 1548 dnl NB: these things may be duplicated in c++config.h as well.
5780a46b 1549 case "$enable_cshadow_headers" in
99246c90 1550 yes)
8b8ab21c
BK
1551 CSHADOW_FLAGS="-fno-builtin"
1552 C_INCLUDE_DIR='${top_srcdir}/include/c_std'
0517cb99 1553 AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
8b8ab21c 1554 ;;
99246c90 1555 no)
8b8ab21c
BK
1556 CSHADOW_FLAGS=""
1557 C_INCLUDE_DIR='${top_srcdir}/include/c'
99246c90 1558 ;;
5780a46b 1559 esac
5b80666b 1560
e466dc8a
BK
1561 AC_SUBST(CSHADOW_FLAGS)
1562 AC_SUBST(C_INCLUDE_DIR)
5780a46b 1563 AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
99246c90 1564])
b2dad0e3 1565
8b8ab21c
BK
1566
1567dnl
1568dnl Check for wide character support. Has the same effect as the option
1569dnl in gcc's configure, but in a form that autoconf can mess with.
1570dnl
1571dnl GLIBCPP_ENABLE_C_MBCHAR
1572dnl --enable-c-mbchar requests all the wchar_t stuff.
1573dnl --disable-c-mbchar doesn't.
1574dnl + Usage: GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1575dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
1576dnl defaults to `no'.
1577AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1578define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1579AC_ARG_ENABLE(c-mbchar,
1580changequote(<<, >>)dnl
1581<< --enable-c-mbchar enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1582changequote([, ])dnl
1583[case "$enableval" in
1584 yes) enable_c_mbchar=yes ;;
1585 no) enable_c_mbchar=no ;;
1586 *) AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1587 esac],
1588enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1589dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1590])
1591
1592
e466dc8a
BK
1593dnl
1594dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1595dnl
1596dnl GLIBCPP_INCLUDE_DIR
1597dnl C_INCLUDE_DIR
1598dnl TOPLEVEL_INCLUDES
1599dnl LIBMATH_INCLUDES
1600dnl LIBSUPCXX_INCLUDES
1601dnl LIBIO_INCLUDES
1602dnl CSHADOW_INCLUDES
1603dnl
1604dnl GLIBCPP_EXPORT_INCLUDE
1605AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1606 # Root level of the include sources.
1607 GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
1608
1609 # Can either use include/c or include/c_std to grab "C" headers. This
1610 # variable is set to the include directory currently in use.
1611 # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_SHADOW
1612
1613 # Passed down for cross compilers, canadian crosses.
1614 TOPLEVEL_INCLUDES='-I$(includedir)'
1615
1616 LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1617
1618 LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1619
1620 #if GLIBCPP_NEED_LIBIO
1621 LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1622 #else
1623 #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
1624 #endif
1625
1626 #if GLIBCPP_USE_CSHADOW
1627 # CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
1628 # -I$(top_blddir)/cshadow'
1629 #else
1630 CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
1631 #endif
1632
1633 # Now, export this to all the little Makefiles....
1634 AC_SUBST(GLIBCPP_INCLUDE_DIR)
1635 AC_SUBST(TOPLEVEL_INCLUDES)
1636 AC_SUBST(LIBMATH_INCLUDES)
1637 AC_SUBST(LIBSUPCXX_INCLUDES)
1638 AC_SUBST(LIBIO_INCLUDES)
1639 AC_SUBST(CSHADOW_INCLUDES)
1640])
1641
1642
1643dnl
1644dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1645dnl
1646AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1647 # Optimization flags that are probably a good idea for thrill-seekers. Just
1648 # uncomment the lines below and make, everything else is ready to go...
1649 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
1650 OPTIMIZE_CXXFLAGS=
1651 AC_SUBST(OPTIMIZE_CXXFLAGS)
1652
1653 WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1654 AC_SUBST(WARN_FLAGS)
1655])
1656
b2dad0e3 1657
af9fe0d1
BK
1658# Check whether LC_MESSAGES is available in <locale.h>.
1659# Ulrich Drepper <drepper@cygnus.com>, 1995.
1660#
1661# This file file be copied and used freely without restrictions. It can
1662# be used in projects which are not available under the GNU Public License
1663# but which still want to provide support for the GNU gettext functionality.
1664# Please note that the actual code is *not* freely available.
1665
1666# serial 1
1667
1668AC_DEFUN(AC_LC_MESSAGES,
1669 [if test $ac_cv_header_locale_h = yes; then
1670 AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1671 [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1672 ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1673 if test $ac_cv_val_LC_MESSAGES = yes; then
1674 AC_DEFINE(HAVE_LC_MESSAGES)
1675 fi
1676 fi])
1677
1678
1679# Check for functions in math library.
1680# Ulrich Drepper <drepper@cygnus.com>, 1998.
1681#
1682# This file can be copied and used freely without restrictions. It can
1683# be used in projects which are not available under the GNU Public License
1684# but which still want to provide support for the GNU gettext functionality.
1685# Please note that the actual code is *not* freely available.
1686
1687# serial 1
1688
1689dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1690AC_DEFUN(AC_REPLACE_MATHFUNCS,
1691[AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1692AC_SUBST(LIBMATHOBJS)dnl
1693])
1694
1695
1696# Check for string functions.
1697# Ulrich Drepper <drepper@cygnus.com>, 1998.
1698#
1699# This file can be copied and used freely without restrictions. It can
1700# be used in projects which are not available under the GNU Public License
1701# but which still want to provide support for the GNU gettext functionality.
1702# Please note that the actual code is *not* freely available.
1703
1704# serial 1
1705
1706dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1707AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1708[AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1709AC_SUBST(LIBSTRINGOBJS)dnl
1710])
29bd52c8
PE
1711
1712
1713dnl This macro searches for a GNU version of make. If a match is found, the
1714dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
99b51359 1715dnl set to "#". This is useful for including a special features in a Makefile,
29bd52c8
PE
1716dnl which cannot be handled by other versions of make. The variable
1717dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1718dnl the empty string otherwise.
1719dnl
1720dnl Here is an example of its use:
1721dnl
1722dnl Makefile.in might contain:
1723dnl
1724dnl # A failsafe way of putting a dependency rule into a makefile
1725dnl $(DEPEND):
1726dnl $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1727dnl
1728dnl @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1729dnl @ifGNUmake@ include $(DEPEND)
1730dnl @ifGNUmake@ endif
1731dnl
1732dnl Then configure.in would normally contain:
1733dnl
1734dnl CHECK_GNU_MAKE()
1735dnl AC_OUTPUT(Makefile)
1736dnl
1737dnl Then perhaps to cause gnu make to override any other make, we could do
1738dnl something like this (note that GNU make always looks for GNUmakefile first):
1739dnl
1740dnl if ! test x$_cv_gnu_make_command = x ; then
1741dnl mv Makefile GNUmakefile
1742dnl echo .DEFAULT: > Makefile ;
1743dnl echo \ $_cv_gnu_make_command \$@ >> Makefile;
1744dnl fi
1745dnl
1746dnl Then, if any (well almost any) other make is called, and GNU make also
1747dnl exists, then the other make wraps the GNU make.
1748dnl
1749dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
421173e6 1750dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
29bd52c8
PE
1751dnl
1752dnl #### Changes for libstdc++-v3: reformatting and linewrapping; prepending
1753dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
79f5e38e
BC
1754dnl #### conditional's subshell (" --version" is not a command), using a
1755dnl #### different option to grep(1).
29bd52c8
PE
1756dnl #### -pme
1757AC_DEFUN(
1758 GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1759 _cv_gnu_make_command='' ;
1760dnl Search all the common names for GNU make
1761 for a in "${MAKE:-make}" make gmake gnumake ; do
626d8f0a 1762 if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
79f5e38e 1763 then
29bd52c8
PE
1764 _cv_gnu_make_command=$a ;
1765 break;
1766 fi
1767 done ;
1768 ) ;
1769dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1770dnl string, '#' otherwise
1771 if test "x$_cv_gnu_make_command" != "x" ; then
1772 ifGNUmake='' ;
1773 else
1774 ifGNUmake='#' ;
1775 fi
1776 AC_SUBST(ifGNUmake)
1777])
3df64633
AO
1778
1779sinclude(../libtool.m4)
1780dnl The lines below arrange for aclocal not to bring an installed
1781dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1782dnl add a definition of LIBTOOL to Makefile.in.
1783ifelse(,,,[AC_SUBST(LIBTOOL)
1784AC_DEFUN([AM_PROG_LIBTOOL])
1785AC_DEFUN([AC_LIBTOOL_DLOPEN])
1786AC_DEFUN([AC_PROG_LD])
7f586614 1787])
9a200b0a 1788
This page took 0.322125 seconds and 5 git commands to generate.