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