acinclude.m4 (GLIBCPP_ENABLE_CHEADERS): Use glibcpp_srcdir when setting C_INCLUDE_DIR.
[gcc.git] / libstdc++-v3 / aclocal.m4
1 dnl aclocal.m4 generated automatically by aclocal 1.4
2
3 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
4 dnl This file is free software; the Free Software Foundation
5 dnl gives unlimited permission to copy and/or distribute it,
6 dnl with or without modifications, as long as this notice is preserved.
7
8 dnl This program is distributed in the hope that it will be useful,
9 dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
10 dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 dnl PARTICULAR PURPOSE.
12
13 dnl
14 dnl Initialize configure bits.
15 dnl
16 dnl GLIBCPP_CONFIGURE
17 AC_DEFUN(GLIBCPP_CONFIGURE, [
18 dnl Default to --enable-multilib
19 AC_ARG_ENABLE(multilib,
20 [ --enable-multilib build hella library versions (default)],
21 [case "${enableval}" in
22 yes) multilib=yes ;;
23 no) multilib=no ;;
24 *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
25 esac], [multilib=yes])dnl
26
27 glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
28 AC_SUBST(glibcpp_basedir)
29
30 AM_INIT_AUTOMAKE(libstdc++, 3.0.0)
31
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]))])
38
39 # AC_PROG_CC
40
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
47 AC_DEFUN(LIB_AC_PROG_CC,
48 [AC_BEFORE([$0], [AC_PROG_CPP])dnl
49 dnl Fool anybody using AC_PROG_CC.
50 AC_PROVIDE([AC_PROG_CC])
51 AC_CHECK_PROG(CC, gcc, gcc)
52 if 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])
55 fi
56
57 AC_PROG_CC_GNU
58
59 if test $ac_cv_prog_gcc = yes; then
60 GCC=yes
61 dnl Check whether -g works, even if CFLAGS is set, in case the package
62 dnl plays around with CFLAGS (such as to build both debugging and
63 dnl 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
75 else
76 GCC=
77 test "${CFLAGS+set}" = set || CFLAGS="-g"
78 fi
79 ])
80
81 LIB_AC_PROG_CC
82
83 # Can't just call these here as g++ requires libstc++ to be built....
84 # AC_PROG_CXX
85
86 # Likewise for AC_PROG_CXX.
87 AC_DEFUN(LIB_AC_PROG_CXX,
88 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
89 dnl Fool anybody using AC_PROG_CXX.
90 AC_PROVIDE([AC_PROG_CXX])
91 # Use glibcpp_CXX 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. If CXX is set in
94 # the environment, respect that here.
95 glibcpp_CXX=$CXX
96 AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
97 AC_SUBST(glibcpp_CXX)
98 CXX=$glibcpp_CXX
99 test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
100
101 AC_PROG_CXX_GNU
102
103 if test $ac_cv_prog_gxx = yes; then
104 GXX=yes
105 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
106 dnl plays around with CXXFLAGS (such as to build both debugging and
107 dnl normal versions of a library), tasteless as that idea is.
108 ac_test_CXXFLAGS="${CXXFLAGS+set}"
109 ac_save_CXXFLAGS="$CXXFLAGS"
110 CXXFLAGS=
111 AC_PROG_CXX_G
112 if test "$ac_test_CXXFLAGS" = set; then
113 CXXFLAGS="$ac_save_CXXFLAGS"
114 elif test $ac_cv_prog_cxx_g = yes; then
115 CXXFLAGS="-g -O2"
116 else
117 CXXFLAGS="-O2"
118 fi
119 else
120 GXX=
121 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
122 fi
123 ])
124
125 LIB_AC_PROG_CXX
126
127 AC_CHECK_TOOL(AS, as)
128 AC_CHECK_TOOL(AR, ar)
129 AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
130 AC_PROG_INSTALL
131
132 AM_MAINTAINER_MODE
133
134 # We need AC_EXEEXT to keep automake happy in cygnus mode. However,
135 # at least currently, we never actually build a program, so we never
136 # need to use $(EXEEXT). Moreover, the test for EXEEXT normally
137 # fails, because we are probably configuring with a cross compiler
138 # which cant create executables. So we include AC_EXEEXT to keep
139 # automake happy, but we dont execute it, since we dont care about
140 # the result.
141 if false; then
142 # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
143 # to nothing, so nothing would remain between `then' and `fi' if it
144 # were not for the `:' below.
145 :
146 AC_EXEEXT
147 fi
148
149 . [$]{glibcpp_basedir}/configure.host
150
151 case [$]{glibcpp_basedir} in
152 /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
153 *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
154 esac
155
156 # This does for the target what configure.host does for the host. In
157 # addition to possibly modifying the same flags, it also sets up symlinks.
158 GLIBCPP_CHECK_TARGET
159 ])
160
161
162 dnl
163 dnl Check to see if g++ can compile this library, and if so, if any version-
164 dnl specific precautions need to be taken.
165 dnl
166 dnl GLIBCPP_CHECK_COMPILER_VERSION
167 AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
168 if test ! -f stamp-sanity-compiler; then
169 AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
170 AC_LANG_SAVE
171 AC_LANG_CPLUSPLUS
172 AC_TRY_COMPILE(, [
173 #if __GNUC__ < 3
174 not_ok
175 #endif
176 ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
177 AC_LANG_RESTORE
178 AC_MSG_RESULT($gpp_satisfactory)
179 touch stamp-sanity-compiler
180 fi
181 ])
182
183
184 dnl
185 dnl Tests for newer compiler features, or features that are present in newer
186 dnl compiler versions but not older compiler versions still in use, should
187 dnl be placed here.
188 dnl
189 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
190 dnl new inlining code or the new system_header pragma will die on -Werror.
191 dnl Leave it out by default and use maint-mode to use it.
192 dnl
193 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
194 dnl compiler supports it and the user has not requested debug mode.
195 dnl
196 dnl GLIBCPP_CHECK_COMPILER_FEATURES
197 AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
198 # All these tests are for C++; save the language and the compiler flags.
199 # The CXXFLAGS thing is suspicious, but based on similar bits previously
200 # found in GLIBCPP_CONFIGURE.
201 AC_LANG_SAVE
202 AC_LANG_CPLUSPLUS
203 ac_test_CXXFLAGS="${CXXFLAGS+set}"
204 ac_save_CXXFLAGS="$CXXFLAGS"
205
206 # Check for maintainer-mode bits.
207 if test x"$USE_MAINTAINER_MODE" = xno; then
208 WERROR=''
209 else
210 WERROR='-Werror'
211 fi
212
213 # Check for -ffunction-sections -fdata-sections
214 AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
215 CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
216 AC_TRY_COMPILE(, [int foo;
217 ], [ac_fdsections=yes], [ac_fdsections=no])
218 if test "$ac_test_CXXFLAGS" = set; then
219 CXXFLAGS="$ac_save_CXXFLAGS"
220 else
221 # this is the suspicious part
222 CXXFLAGS=''
223 fi
224 if test x"$ac_fdsections" = x"yes" &&
225 test x"$enable_debug" = x"no"; then
226 SECTION_FLAGS='-ffunction-sections -fdata-sections'
227 fi
228 AC_MSG_RESULT($ac_fdsections)
229
230 AC_LANG_RESTORE
231 AC_SUBST(WERROR)
232 AC_SUBST(SECTION_FLAGS)
233 ])
234
235
236 dnl
237 dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
238 dnl the native linker is in use, all variables will be defined to something
239 dnl safe (like an empty string).
240 dnl
241 dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible.
242 dnl Define OPT_LDFLAGS='-Wl,-O1' if possible.
243 dnl
244 dnl GLIBCPP_CHECK_LINKER_FEATURES
245 AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
246 # If we're not using GNU ld, then there's no point in even trying these
247 # tests. Check for that first. We should have already tested for gld
248 # by now (in libtool), but require it now just to be safe...
249 SECTION_LDFLAGS=''
250 OPT_LDFLAGS=''
251 AC_REQUIRE([AC_PROG_LD])
252
253 # Set --gc-sections.
254 if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
255 # GNU ld it is! Joy and bunny rabbits!
256
257 # All these tests are for C++; save the language and the compiler flags.
258 # Need to do this so that g++ won't try to link in libstdc++
259 ac_test_CFLAGS="${CFLAGS+set}"
260 ac_save_CFLAGS="$CFLAGS"
261 CFLAGS='-x c++ -Wl,--gc-sections'
262
263 # Check for -Wl,--gc-sections
264 # XXX This test is broken at the moment, as symbols required for
265 # linking are now in libsupc++ (not built yet.....). In addition,
266 # this test has cored on solaris in the past. In addition,
267 # --gc-sections doesn't really work at the moment (keeps on discarding
268 # used sections, first .eh_frame and now some of the glibc sections for
269 # iconv). Bzzzzt. Thanks for playing, maybe next time.
270 AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
271 AC_TRY_RUN([
272 int main(void)
273 {
274 try { throw 1; }
275 catch (...) { };
276 return 0;
277 }
278 ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
279 if test "$ac_test_CFLAGS" = set; then
280 CFLAGS="$ac_save_CFLAGS"
281 else
282 # this is the suspicious part
283 CFLAGS=''
284 fi
285 if test "$ac_sectionLDflags" = "yes"; then
286 SECTION_LDFLAGS='-Wl,--gc-sections'
287 fi
288 AC_MSG_RESULT($ac_sectionLDflags)
289 fi
290
291 # Set linker optimization flags.
292 if test x"$ac_cv_prog_gnu_ld" = x"yes" &&
293 test x"$enable_debug" = x"no"; then
294 OPT_LDFLAGS='-Wl,-O1'
295 fi
296
297 AC_SUBST(SECTION_LDFLAGS)
298 AC_SUBST(OPT_LDFLAGS)
299 ])
300
301
302 dnl
303 dnl Check to see if the (math function) argument passed is
304 dnl declared when using the c++ compiler
305 dnl ASSUMES argument is a math function with ONE parameter
306 dnl
307 dnl GLIBCPP_CHECK_MATH_DECL_1
308 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_1, [
309 AC_MSG_CHECKING([for $1 declaration])
310 if test x${glibcpp_cv_func_$1_use+set} != xset; then
311 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
312 AC_LANG_SAVE
313 AC_LANG_CPLUSPLUS
314 AC_TRY_COMPILE([#include <math.h>
315 #ifdef HAVE_IEEEFP_H
316 #include <ieeefp.h>
317 #endif
318 ],
319 [ $1(0);],
320 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
321 AC_LANG_RESTORE
322 ])
323 fi
324 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
325 ])
326
327 dnl
328 dnl Check to see if the (math function) argument passed is
329 dnl 1) declared when using the c++ compiler
330 dnl 2) has "C" linkage
331 dnl 3) if not, see if 1) and 2) for argument prepended with '_'
332 dnl
333 dnl Define HAVE_CARGF etc if "cargf" is declared and links
334 dnl
335 dnl argument 1 is name of function to check
336 dnl
337 dnl ASSUMES argument is a math function with ONE parameter
338 dnl
339 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
340 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
341 GLIBCPP_CHECK_MATH_DECL_1($1)
342 if test x$glibcpp_cv_func_$1_use = x"yes"; then
343 AC_CHECK_FUNCS($1)
344 else
345 GLIBCPP_CHECK_MATH_DECL_1(_$1)
346 if test x$glibcpp_cv_func__$1_use = x"yes"; then
347 AC_CHECK_FUNCS(_$1)
348 fi
349 fi
350 ])
351
352
353 dnl
354 dnl Like GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
355 dnl of functions at once. It's an all-or-nothing check -- either
356 dnl HAVE_XYZ is defined for each of the functions, or for none of them.
357 dnl Doing it this way saves significant configure time.
358 AC_DEFUN(GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1, [
359 AC_MSG_CHECKING([for $1 functions])
360 AC_CACHE_VAL(glibcpp_cv_func_$2_use, [
361 AC_LANG_SAVE
362 AC_LANG_CPLUSPLUS
363 AC_TRY_COMPILE([#include <math.h>],
364 [ `for x in $3; do echo "$x (0);"; done` ],
365 [glibcpp_cv_func_$2_use=yes],
366 [glibcpp_cv_func_$2_use=no])
367 AC_LANG_RESTORE])
368 AC_MSG_RESULT($glibcpp_cv_func_$2_use)
369 if test x$glibcpp_cv_func_$2_use = x"yes"; then
370 AC_CHECK_FUNCS($3)
371 fi
372 ])
373
374 dnl
375 dnl Check to see if the (math function) argument passed is
376 dnl declared when using the c++ compiler
377 dnl ASSUMES argument is a math function with TWO parameters
378 dnl
379 dnl GLIBCPP_CHECK_MATH_DECL_2
380 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
381 AC_MSG_CHECKING([for $1 declaration])
382 if test x${glibcpp_cv_func_$1_use+set} != xset; then
383 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
384 AC_LANG_SAVE
385 AC_LANG_CPLUSPLUS
386 AC_TRY_COMPILE([#include <math.h>],
387 [ $1(0, 0);],
388 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
389 AC_LANG_RESTORE
390 ])
391 fi
392 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
393 ])
394
395 dnl
396 dnl Check to see if the (math function) argument passed is
397 dnl 1) declared when using the c++ compiler
398 dnl 2) has "C" linkage
399 dnl
400 dnl Define HAVE_CARGF etc if "cargf" is declared and links
401 dnl
402 dnl argument 1 is name of function to check
403 dnl
404 dnl ASSUMES argument is a math function with TWO parameters
405 dnl
406 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
407 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
408 GLIBCPP_CHECK_MATH_DECL_2($1)
409 if test x$glibcpp_cv_func_$1_use = x"yes"; then
410 AC_CHECK_FUNCS($1)
411 else
412 GLIBCPP_CHECK_MATH_DECL_2(_$1)
413 if test x$glibcpp_cv_func__$1_use = x"yes"; then
414 AC_CHECK_FUNCS(_$1)
415 fi
416 fi
417 ])
418
419
420 dnl
421 dnl Check to see if the (math function) argument passed is
422 dnl declared when using the c++ compiler
423 dnl ASSUMES argument is a math function with THREE parameters
424 dnl
425 dnl GLIBCPP_CHECK_MATH_DECL_3
426 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
427 AC_MSG_CHECKING([for $1 declaration])
428 if test x${glibcpp_cv_func_$1_use+set} != xset; then
429 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
430 AC_LANG_SAVE
431 AC_LANG_CPLUSPLUS
432 AC_TRY_COMPILE([#include <math.h>],
433 [ $1(0, 0, 0);],
434 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
435 AC_LANG_RESTORE
436 ])
437 fi
438 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
439 ])
440
441 dnl
442 dnl Check to see if the (math function) argument passed is
443 dnl 1) declared when using the c++ compiler
444 dnl 2) has "C" linkage
445 dnl
446 dnl Define HAVE_CARGF etc if "cargf" is declared and links
447 dnl
448 dnl argument 1 is name of function to check
449 dnl
450 dnl ASSUMES argument is a math function with THREE parameters
451 dnl
452 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
453 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
454 GLIBCPP_CHECK_MATH_DECL_3($1)
455 if test x$glibcpp_cv_func_$1_use = x"yes"; then
456 AC_CHECK_FUNCS($1)
457 else
458 GLIBCPP_CHECK_MATH_DECL_3(_$1)
459 if test x$glibcpp_cv_func__$1_use = x"yes"; then
460 AC_CHECK_FUNCS(_$1)
461 fi
462 fi
463 ])
464
465
466 dnl
467 dnl Check to see if the (stdlib function) argument passed is
468 dnl 1) declared when using the c++ compiler
469 dnl 2) has "C" linkage
470 dnl
471 dnl argument 1 is name of function to check
472 dnl
473 dnl ASSUMES argument is a math function with TWO parameters
474 dnl
475 dnl GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2
476 AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
477 AC_MSG_CHECKING([for $1 declaration])
478 if test x${glibcpp_cv_func_$1_use+set} != xset; then
479 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
480 AC_LANG_SAVE
481 AC_LANG_CPLUSPLUS
482 AC_TRY_COMPILE([#include <stdlib.h>],
483 [ $1(0, 0);],
484 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
485 AC_LANG_RESTORE
486 ])
487 fi
488 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
489 if test x$glibcpp_cv_func_$1_use = x"yes"; then
490 AC_CHECK_FUNCS($1)
491 fi
492 ])
493
494
495 dnl
496 dnl Because the builtins are picky picky picky about the arguments they take,
497 dnl do an explict linkage tests here.
498 dnl Check to see if the (math function) argument passed is
499 dnl 1) declared when using the c++ compiler
500 dnl 2) has "C" linkage
501 dnl
502 dnl Define HAVE_CARGF etc if "cargf" is declared and links
503 dnl
504 dnl argument 1 is name of function to check
505 dnl
506 dnl ASSUMES argument is a math function with ONE parameter
507 dnl
508 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
509 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
510 AC_MSG_CHECKING([for $1 declaration])
511 if test x${glibcpp_cv_func_$1_use+set} != xset; then
512 AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
513 AC_LANG_SAVE
514 AC_LANG_CPLUSPLUS
515 AC_TRY_COMPILE([#include <math.h>],
516 [ $1(0);],
517 [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
518 AC_LANG_RESTORE
519 ])
520 fi
521 AC_MSG_RESULT($glibcpp_cv_func_$1_use)
522 if test x$glibcpp_cv_func_$1_use = x"yes"; then
523 AC_MSG_CHECKING([for $1 linkage])
524 if test x${glibcpp_cv_func_$1_link+set} != xset; then
525 AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
526 AC_TRY_LINK([#include <math.h>],
527 [ $1(0);],
528 [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
529 ])
530 fi
531 AC_MSG_RESULT($glibcpp_cv_func_$1_link)
532 if test x$glibcpp_cv_func_$1_link = x"yes"; then
533 ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
534 AC_DEFINE_UNQUOTED(${ac_tr_func})
535 fi
536 fi
537 ])
538
539
540 dnl
541 dnl Check to see what builtin math functions are supported
542 dnl
543 dnl check for __builtin_abs
544 dnl check for __builtin_fabsf
545 dnl check for __builtin_fabs
546 dnl check for __builtin_fabl
547 dnl check for __builtin_labs
548 dnl check for __builtin_sqrtf
549 dnl check for __builtin_sqrtl
550 dnl check for __builtin_fsqrt
551 dnl check for __builtin_sinf
552 dnl check for __builtin_sin
553 dnl check for __builtin_sinl
554 dnl check for __builtin_cosf
555 dnl check for __builtin_cos
556 dnl check for __builtin_cosl
557 dnl
558 dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
559 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
560 dnl Test for builtin math functions.
561 dnl These are made in gcc/c-common.c
562 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
563 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
564 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
565 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
566 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
567
568 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
569 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
570 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
571
572 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
573 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
574 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
575
576 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
577 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
578 GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
579
580 dnl There is, without a doubt, a more elegant way to have these
581 dnl names exported so that they won't be stripped out of acconfig.h by
582 dnl autoheader. I leave this as an exercise to somebody less frustrated
583 dnl than I.... please email the libstdc++ list if you can figure out a
584 dnl more elegant approach (see autoconf/acgen.m4 and specifically
585 dnl AC_CHECK_FUNC for things to steal.)
586 dummyvar=no
587 if test x$dummyvar = x"yes"; then
588 AC_DEFINE(HAVE___BUILTIN_ABS)
589 AC_DEFINE(HAVE___BUILTIN_LABS)
590 AC_DEFINE(HAVE___BUILTIN_COS)
591 AC_DEFINE(HAVE___BUILTIN_COSF)
592 AC_DEFINE(HAVE___BUILTIN_COSL)
593 AC_DEFINE(HAVE___BUILTIN_FABS)
594 AC_DEFINE(HAVE___BUILTIN_FABSF)
595 AC_DEFINE(HAVE___BUILTIN_FABSL)
596 AC_DEFINE(HAVE___BUILTIN_SIN)
597 AC_DEFINE(HAVE___BUILTIN_SINF)
598 AC_DEFINE(HAVE___BUILTIN_SINL)
599 AC_DEFINE(HAVE___BUILTIN_FSQRT)
600 AC_DEFINE(HAVE___BUILTIN_SQRTF)
601 AC_DEFINE(HAVE___BUILTIN_SQRTL)
602 fi
603 ])
604
605
606 dnl
607 dnl Check to see what the underlying c library
608 dnl These checks need to do two things:
609 dnl 1) make sure the name is declared when using the c++ compiler
610 dnl 2) make sure the name has "C" linkage
611 dnl This might seem like overkill but experience has shown that it's not...
612 dnl
613 dnl Define HAVE_STRTOLD if "strtold" is declared and links
614 dnl Define HAVE_STRTOF if "strtof" is declared and links
615 dnl Define HAVE_DRAND48 if "drand48" is declared and links
616 dnl
617 dnl GLIBCPP_CHECK_STDLIB_SUPPORT
618 AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
619 ac_test_CXXFLAGS="${CXXFLAGS+set}"
620 ac_save_CXXFLAGS="$CXXFLAGS"
621 CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
622
623 GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
624 AC_CHECK_FUNCS(drand48)
625
626 CXXFLAGS="$ac_save_CXXFLAGS"
627 ])
628
629
630 dnl
631 dnl Check to see what the underlying c library or math library is like.
632 dnl These checks need to do two things:
633 dnl 1) make sure the name is declared when using the c++ compiler
634 dnl 2) make sure the name has "C" linkage
635 dnl This might seem like overkill but experience has shown that it's not...
636 dnl
637 dnl Define HAVE_CARGF etc if "cargf" is found.
638 dnl
639 dnl GLIBCPP_CHECK_MATH_SUPPORT
640 AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
641 ac_test_CXXFLAGS="${CXXFLAGS+set}"
642 ac_save_CXXFLAGS="$CXXFLAGS"
643 CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
644
645 dnl Check libm
646 AC_CHECK_LIB(m, sin, libm="-lm")
647 ac_save_LIBS="$LIBS"
648 LIBS="$LIBS $libm"
649
650 dnl Check to see if certain C math functions exist.
651 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
652 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
653 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
654 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
655 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
656 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
657 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
658
659 dnl Check to see if basic C math functions have float versions.
660 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
661 float_trig,
662 acosf asinf atanf \
663 cosf sinf tanf \
664 coshf sinhf tanhf)
665 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
666 float_round,
667 ceilf floorf)
668 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
669 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
670 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
671 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
672 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
673 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
674 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
675 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
676 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
677 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
678 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
679 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
680 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
681
682 dnl Check to see if basic C math functions have long double versions.
683 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
684 long_double_trig,
685 acosl asinl atanl \
686 cosl sinl tanl \
687 coshl sinhl tanhl)
688 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
689 long_double_round,
690 ceill floorl)
691 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
692 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
693 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
694 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
695 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
696 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
697 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
698 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
699 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
700 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
701 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
702 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
703 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
704 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
705 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
706 GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
707
708 dnl Some runtimes have these functions with a preceding underscore. Please
709 dnl keep this sync'd with the one above. And if you add any new symbol,
710 dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
711 dnl Check to see if certain C math functions exist.
712
713 dnl Check to see if basic C math functions have float versions.
714 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
715 _float_trig,
716 _acosf _asinf _atanf \
717 _cosf _sinf _tanf \
718 _coshf _sinhf _tanhf)
719 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
720 _float_round,
721 _ceilf _floorf)
722
723 dnl Check to see if basic C math functions have long double versions.
724 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
725 _long_double_trig,
726 _acosl _asinl _atanl \
727 _cosl _sinl _tanl \
728 _coshl _sinhl _tanhl)
729 GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
730 _long_double_round,
731 _ceill _floorl)
732
733 LIBS="$ac_save_LIBS"
734 CXXFLAGS="$ac_save_CXXFLAGS"
735 ])
736
737
738 dnl
739 dnl Check to see if there is native support for complex
740 dnl
741 dnl Don't compile bits in math/* if native support exits.
742 dnl
743 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" is found.
744 dnl
745 dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
746 AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
747 dnl Check for complex versions of math functions of platform.
748 AC_CHECK_LIB(m, main)
749 AC_REPLACE_MATHFUNCS(nan hypot hypotf copysignf)
750
751 dnl Compile the long double complex functions only if the function
752 dnl provides the non-complex long double functions that are needed.
753 dnl Currently this includes copysignl and atan2l, which should be
754 dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
755 USE_COMPLEX_LONG_DOUBLE=no
756 if test x$ac_cv_func_atan2l = x"yes" &&
757 test x$ac_cv_func_copysignl = x"yes"; then
758 USE_COMPLEX_LONG_DOUBLE=yes
759 AC_REPLACE_MATHFUNCS(hypotl signbitl)
760 fi
761
762 AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
763 ])
764
765
766 dnl Check to see what architecture and operating system we are compiling
767 dnl for. Also, if architecture- or OS-specific flags are required for
768 dnl compilation, pick them up here.
769 dnl
770 dnl GLIBCPP_CHECK_TARGET
771 AC_DEFUN(GLIBCPP_CHECK_TARGET, [
772 . [$]{glibcpp_basedir}/configure.target
773 AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
774 AC_MSG_RESULT(OS config directory is $os_include_dir)
775 ])
776
777
778 dnl
779 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
780 dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled. (This
781 dnl must have been previously checked.)
782 dnl
783 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found
784 dnl Define HAVE_MBSTATE_T if mbstate_t is not in wchar.h
785 dnl
786 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
787 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
788
789 dnl Test wchar.h for mbstate_t, which is needed for char_traits and
790 dnl others even if wchar_t support is not on.
791 AC_MSG_CHECKING([for mbstate_t])
792 AC_TRY_COMPILE([#include <wchar.h>],
793 [mbstate_t teststate;],
794 have_mbstate_t=yes, have_mbstate_t=no)
795 AC_MSG_RESULT($have_mbstate_t)
796 if test x"$have_mbstate_t" = xyes; then
797 AC_DEFINE(HAVE_MBSTATE_T)
798 fi
799
800 dnl Sanity check for existence of ISO C99 headers for extended encoding.
801 AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
802 AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
803
804 dnl Only continue checking if the ISO C99 headers exist and support is on.
805 if test x"$ac_has_wchar_h" = xyes &&
806 test x"$ac_has_wctype_h" = xyes &&
807 test x"$enable_c_mbchar" != xno; then
808
809 dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
810 dnl numeric_limits can instantiate type_traits<wchar_t>
811 AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
812 AC_TRY_COMPILE([#include <wchar.h>],
813 [int i = WCHAR_MIN; int j = WCHAR_MAX;],
814 has_wchar_minmax=yes, has_wchar_minmax=no)
815 AC_MSG_RESULT($has_wchar_minmax)
816
817 dnl Test wchar.h for WEOF, which is what we use to determine whether
818 dnl to specialize for char_traits<wchar_t> or not.
819 AC_MSG_CHECKING([for WEOF])
820 AC_TRY_COMPILE([
821 #include <wchar.h>
822 #include <stddef.h>],
823 [wint_t i = WEOF;],
824 has_weof=yes, has_weof=no)
825 AC_MSG_RESULT($has_weof)
826
827 dnl Tests for wide character functions used in char_traits<wchar_t>.
828 ac_wfuncs=yes
829 AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
830 ac_wfuncs=no)
831
832 dnl Checks for names injected into std:: by the c_std headers.
833 AC_CHECK_FUNCS(btowc wctob fgetwc fgetwc fgetws fputwc fputws fwide \
834 fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
835 vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
836 mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
837 wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
838 wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr,, \
839 ac_wfuncs=no)
840
841 AC_MSG_CHECKING([for ISO C99 wchar_t support])
842 if test x"$has_weof" = xyes &&
843 test x"$has_wchar_minmax" = xyes &&
844 test x"$ac_wfuncs" = xyes; then
845 ac_isoC99_wchar_t=yes
846 else
847 ac_isoC99_wchar_t=no
848 fi
849 AC_MSG_RESULT($ac_isoC99_wchar_t)
850
851 dnl Use iconv for wchar_t to char conversions. As such, check for
852 dnl X/Open Portability Guide, version 2 features (XPG2).
853 AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
854 AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
855
856 dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
857 AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
858 ac_save_LIBS="$LIBS"
859 LIBS="$LIBS $libiconv"
860
861 AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
862 ac_XPG2funcs=yes, ac_XPG2funcs=no)
863
864 LIBS="$ac_save_LIBS"
865
866 AC_MSG_CHECKING([for XPG2 wchar_t support])
867 if test x"$ac_has_iconv_h" = xyes &&
868 test x"$ac_has_langinfo_h" = xyes &&
869 test x"$ac_XPG2funcs" = xyes; then
870 ac_XPG2_wchar_t=yes
871 else
872 ac_XPG2_wchar_t=no
873 fi
874 AC_MSG_RESULT($ac_XPG2_wchar_t)
875
876 dnl At the moment, only enable wchar_t specializations if all the
877 dnl above support is present.
878 AC_MSG_CHECKING([for enabled wchar_t specializations])
879 if test x"$ac_isoC99_wchar_t" = xyes &&
880 test x"$ac_XPG2_wchar_t" = xyes; then
881 AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
882 AC_MSG_RESULT("yes")
883 else
884 AC_MSG_RESULT("no")
885 fi
886 else
887 dnl Wide characters disabled by the user.
888 AC_MSG_WARN([wchar_t support disabled.])
889 fi
890 ])
891
892
893 dnl
894 dnl Check for special debugging mode; not for production use.
895 dnl
896 dnl GLIBCPP_ENABLE_DEBUG
897 dnl --enable-debug sets '-ggdb3 -O0'.
898 dnl --disable-debug sets '-g' and whatever optimization options the
899 dnl compiler can handle.
900 dnl + --enable-maintainer-mode automatically defaults this to on.
901 dnl + Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
902 dnl + Usage: GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
903 dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
904 dnl defaults to `no'.
905 AC_DEFUN(GLIBCPP_ENABLE_DEBUG, [dnl
906 define([GLIBCPP_ENABLE_DEBUG_DEFAULT], ifelse($1, yes, yes, no))dnl
907 AC_ARG_ENABLE(debug,
908 changequote(<<, >>)dnl
909 << --enable-debug extra debugging, turn off optimization [default=>>GLIBCPP_ENABLE_DEBUG_DEFAULT],
910 changequote([, ])dnl
911 [case "${enableval}" in
912 yes) enable_debug=yes ;;
913 no) enable_debug=no ;;
914 *) AC_MSG_ERROR([Unknown argument to enable/disable extra debugging]) ;;
915 esac],
916 enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
917
918 dnl Option parsed, now set things appropriately
919 case "${enable_debug}" in
920 yes)
921 DEBUG_FLAGS='-O0 -ggdb3'
922 ;;
923 no)
924 DEBUG_FLAGS='-g'
925 ;;
926 esac
927 AC_SUBST(DEBUG_FLAGS)
928 ])
929
930
931 dnl
932 dnl Check for "unusual" flags to pass to the compiler while building.
933 dnl
934 dnl GLIBCPP_ENABLE_CXX_FLAGS
935 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
936 dnl experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
937 dnl Somehow this same set of flags must be passed when [re]building
938 dnl libgcc.
939 dnl --disable-cxx-flags passes nothing.
940 dnl + See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
941 dnl http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
942 dnl http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
943 dnl + Usage: GLIBCPP_ENABLE_CXX_FLAGS(default flags)
944 dnl If "default flags" is an empty string (or "none"), the effect is
945 dnl the same as --disable or --enable=no.
946 AC_DEFUN(GLIBCPP_ENABLE_CXX_FLAGS, [dnl
947 define([GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT], ifelse($1,,, $1))dnl
948 AC_ARG_ENABLE(cxx-flags,
949 changequote(<<, >>)dnl
950 << --enable-cxx-flags=FLAGS pass compiler FLAGS when building library;
951 [default=>>GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT],
952 changequote([, ])dnl
953 [case "x$enableval" in
954 xyes)
955 AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
956 xno|x)
957 enable_cxx_flags='' ;;
958 *)
959 enable_cxx_flags="$enableval" ;;
960 esac],
961 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
962
963 dnl Thinko on my part during design. This kludge is the workaround.
964 if test "$enable_cxx_flags" = "none"; then
965 enable_cxx_flags='';
966 fi
967
968 dnl Run through flags (either default or command-line) and set anything
969 dnl extra (e.g., #defines) that must accompany particular g++ options.
970 if test -n "$enable_cxx_flags"; then
971 for f in $enable_cxx_flags; do
972 case "$f" in
973 -fhonor-std) ;;
974 -*) ;;
975 *) # and we're trying to pass /what/ exactly?
976 AC_MSG_ERROR([compiler flags start with a -]) ;;
977 esac
978 done
979 fi
980 EXTRA_CXX_FLAGS="$enable_cxx_flags"
981 AC_SUBST(EXTRA_CXX_FLAGS)
982 ])
983
984
985 dnl
986 dnl Check for which locale library to use: gnu or generic.
987 dnl
988 dnl GLIBCPP_ENABLE_CLOCALE
989 dnl --enable-clocale=gnu sets config/c_locale_gnu.cc and friends
990 dnl --enable-clocale=generic sets config/c_locale_generic.cc and friends
991 dnl
992 dnl default is generic
993 dnl
994 AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
995 AC_MSG_CHECKING([for clocale to use])
996 AC_ARG_ENABLE(clocale,
997 [ --enable-clocale enable model for target locale package.
998 --enable-clocale=MODEL use MODEL target-speific locale package. [default=generic]
999 ],
1000 if test x$enable_clocale = xno; then
1001 enable_clocale=generic
1002 fi,
1003 enable_clocale=generic)
1004
1005 enable_clocale_flag=$enable_clocale
1006
1007 dnl Check if a valid locale package
1008 case x${enable_clocale_flag} in
1009 xgnu)
1010 CLOCALE_H=config/c_locale_gnu.h
1011 CLOCALE_CC=config/c_locale_gnu.cc
1012 AC_MSG_RESULT(gnu)
1013 ;;
1014 xgeneric)
1015 CLOCALE_H=config/c_locale_generic.h
1016 CLOCALE_CC=config/c_locale_generic.cc
1017 AC_MSG_RESULT(generic)
1018 ;;
1019 *)
1020 echo "$enable_clocale is an unknown locale package" 1>&2
1021 exit 1
1022 ;;
1023 esac
1024
1025 AC_SUBST(CLOCALE_H)
1026 AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
1027 ])
1028
1029
1030 dnl
1031 dnl Check for which I/O library to use: libio, or something specific.
1032 dnl
1033 dnl GLIBCPP_ENABLE_CSTDIO
1034 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
1035 dnl
1036 dnl default is stdio
1037 dnl
1038 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
1039 AC_MSG_CHECKING([for cstdio to use])
1040 AC_ARG_ENABLE(cstdio,
1041 [ --enable-cstdio enable stdio for target io package.
1042 --enable-cstdio=LIB use LIB target-speific io package. [default=stdio]
1043 ],
1044 if test x$enable_cstdio = xno; then
1045 enable_cstdio=stdio
1046 fi,
1047 enable_cstdio=stdio)
1048
1049 enable_cstdio_flag=$enable_cstdio
1050
1051 dnl Check if a valid I/O package
1052 case x${enable_cstdio_flag} in
1053 xlibio)
1054 CSTDIO_H=config/c_io_libio.h
1055 BASIC_FILE_H=config/basic_file_libio.h
1056 BASIC_FILE_CC=config/basic_file_libio.cc
1057 AC_MSG_RESULT(libio)
1058
1059 # see if we are on a system with libio native (ie, linux)
1060 AC_CHECK_HEADER(libio.h, has_libio=yes, has_libio=no)
1061
1062 # Need to check and see what version of glibc is being used. If
1063 # it's not glibc-2.2 or higher, then we'll need to go ahead and
1064 # compile most of libio for linux systems.
1065 if test x$has_libio = x"yes"; then
1066 case "$target" in
1067 *-*-linux*)
1068 AC_MSG_CHECKING([for glibc version >= 2.2])
1069 AC_EGREP_CPP([ok], [
1070 #include <features.h>
1071 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1072 ok
1073 #endif
1074 ], glibc_satisfactory=yes, glibc_satisfactory=no)
1075 AC_MSG_RESULT($glibc_satisfactory)
1076 ;;
1077 esac
1078
1079 # XXX at the moment, admit defeat and force the recompilation
1080 # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
1081 glibc_satisfactory=no
1082
1083 if test x$glibc_satisfactory = x"yes"; then
1084 need_libio=no
1085 need_wlibio=no
1086 else
1087 need_libio=yes
1088 # bkoz XXX need to add checks to enable this
1089 # pme XXX here's a first pass at such a check
1090 if test x$enable_c_mbchar != xno; then
1091 need_wlibio=yes
1092 else
1093 need_wlibio=no
1094 fi
1095 fi
1096
1097 else
1098 # Using libio, but <libio.h> doesn't exist on the target system. . .
1099 need_libio=yes
1100 # bkoz XXX need to add checks to enable this
1101 # pme XXX here's a first pass at such a check
1102 if test x$enable_c_mbchar != xno; then
1103 need_wlibio=yes
1104 else
1105 need_wlibio=no
1106 fi
1107 fi
1108 ;;
1109 xstdio | x | xno | xnone | xyes)
1110 # default
1111 CSTDIO_H=config/c_io_stdio.h
1112 BASIC_FILE_H=config/basic_file_stdio.h
1113 BASIC_FILE_CC=config/basic_file_stdio.cc
1114 AC_MSG_RESULT(stdio)
1115
1116 # We're not using stdio.
1117 need_libio=no
1118 need_wlibio=no
1119 ;;
1120 *)
1121 echo "$enable_cstdio is an unknown io package" 1>&2
1122 exit 1
1123 ;;
1124 esac
1125 AC_SUBST(CSTDIO_H)
1126 AC_SUBST(BASIC_FILE_H)
1127 AC_LINK_FILES($BASIC_FILE_CC, src/basic_file.cc)
1128
1129 # 2000-08-04 bkoz hack
1130 CCODECVT_C=config/c_io_libio_codecvt.c
1131 AC_SUBST(CCODECVT_C)
1132 # 2000-08-04 bkoz hack
1133
1134 AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
1135 test "$need_libio" = yes || test "$need_wlibio" = yes)
1136 AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
1137 AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
1138 if test "$need_libio" = yes || test "$need_wlibio" = yes; then
1139 libio_la=../libio/libio.la
1140 else
1141 libio_la=
1142 fi
1143 AC_SUBST(libio_la)
1144 ])
1145
1146
1147 dnl
1148 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1149 dnl We must stage the required headers so that they will be installed
1150 dnl with the library (unlike libgcc, the STL implementation is provided
1151 dnl solely within headers). Since we must not inject random user-space
1152 dnl macro names into user-provided C++ code, we first stage into <file>-in
1153 dnl and process to <file> with an output command. The reason for a two-
1154 dnl stage process here is to correctly handle $srcdir!=$objdir without
1155 dnl having to write complex code (the sed commands to clean the macro
1156 dnl namespace are complex and fragile enough as it is). We must also
1157 dnl add a relative path so that -I- is supported properly.
1158 dnl
1159 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
1160 AC_MSG_CHECKING([for thread model used by GCC])
1161 target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
1162 AC_MSG_RESULT([$target_thread_file])
1163
1164 if test $target_thread_file != single; then
1165 AC_DEFINE(HAVE_GTHR_DEFAULT)
1166 AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
1167 fi
1168
1169 glibcpp_thread_h=gthr-$target_thread_file.h
1170 AC_SUBST(glibcpp_thread_h)
1171 ])
1172
1173
1174 dnl
1175 dnl Check for exception handling support. If an explicit enable/disable
1176 dnl sjlj exceptions is given, we don't have to detect. Otherwise the
1177 dnl target may or may not support call frame exceptions.
1178 dnl
1179 dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
1180 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1181 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1182 dnl
1183 dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
1184 dnl
1185 AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
1186 AC_MSG_CHECKING([for exception model to use])
1187 AC_LANG_SAVE
1188 AC_LANG_CPLUSPLUS
1189 AC_ARG_ENABLE(sjlj-exceptions,
1190 [ --enable-sjlj-exceptions force use of builtin_setjmp for exceptions],
1191 [:],
1192 [dnl Botheration. Now we've got to detect the exception model.
1193 dnl Link tests against libgcc.a are problematic since -- at least
1194 dnl as of this writing -- we've not been given proper -L bits for
1195 dnl single-tree newlib and libgloss.
1196 dnl
1197 dnl This is what AC_TRY_COMPILE would do if it didn't delete the
1198 dnl conftest files before we got a change to grep them first.
1199 cat > conftest.$ac_ext << EOF
1200 [#]line __oline__ "configure"
1201 struct S { ~S(); };
1202 void bar();
1203 void foo()
1204 {
1205 S s;
1206 bar();
1207 }
1208 EOF
1209 old_CXXFLAGS="$CXXFLAGS"
1210 CXXFLAGS=-S
1211 if AC_TRY_EVAL(ac_compile); then
1212 if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1213 enable_sjlj_exceptions=yes
1214 elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1215 enable_sjlj_exceptions=no
1216 fi
1217 fi
1218 CXXFLAGS="$old_CXXFLAGS"
1219 rm -f conftest*])
1220 if test x$enable_sjlj_exceptions = xyes; then
1221 AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
1222 [Define if the compiler is configured for setjmp/longjmp exceptions.])
1223 ac_exception_model_name=sjlj
1224 elif test x$enable_sjlj_exceptions = xno; then
1225 ac_exception_model_name="call frame"
1226 else
1227 AC_MSG_ERROR([unable to detect exception model])
1228 fi
1229 AC_LANG_RESTORE
1230 AC_MSG_RESULT($ac_exception_model_name)
1231 ])
1232
1233
1234 dnl
1235 dnl Check for ISO/IEC 9899:1999 "C99" support.
1236 dnl
1237 dnl GLIBCPP_ENABLE_C99
1238 dnl --enable-c99 defines _GLIBCPP_USE_C99
1239 dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
1240 dnl + Usage: GLIBCPP_ENABLE_C99[(DEFAULT)]
1241 dnl Where DEFAULT is either `yes' or `no'. If omitted, it
1242 dnl defaults to `no'.
1243 dnl + If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
1244 dnl
1245 dnl GLIBCPP_ENABLE_C99
1246 AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
1247 define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
1248
1249 AC_ARG_ENABLE(c99,
1250 changequote(<<, >>)dnl
1251 <<--enable-c99 turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
1252 changequote([, ])dnl
1253 [case "$enableval" in
1254 yes) enable_c99=yes ;;
1255 no) enable_c99=no ;;
1256 *) AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
1257 esac],
1258 enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
1259
1260 AC_LANG_SAVE
1261 AC_LANG_CPLUSPLUS
1262
1263 # Check for the existence of <math.h> functions used if C99 is enabled.
1264 ac_c99_math=yes;
1265 AC_MSG_CHECKING([for ISO C99 support in <math.h>])
1266 AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
1267 AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
1268 AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
1269 AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
1270 AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
1271 AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
1272 AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
1273 AC_TRY_COMPILE([#include <math.h>],
1274 [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
1275 AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
1276 AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
1277 AC_TRY_COMPILE([#include <math.h>],
1278 [islessgreater(0.0,0.0);],, [ac_c99_math=no])
1279 AC_TRY_COMPILE([#include <math.h>],
1280 [isunordered(0.0,0.0);],, [ac_c99_math=no])
1281 AC_MSG_RESULT($ac_c99_math)
1282
1283 # Check for the existence in <stdio.h> of vscanf, et. al.
1284 ac_c99_stdio=yes;
1285 AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1286 AC_TRY_COMPILE([#include <stdio.h>],
1287 [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
1288 AC_TRY_COMPILE([#include <stdio.h>
1289 #include <stdarg.h>
1290 void foo(char* fmt, ...)
1291 {va_list args; va_start(args, fmt);
1292 vfscanf(stderr, "%i", args);}],
1293 [],, [ac_c99_stdio=no])
1294 AC_TRY_COMPILE([#include <stdio.h>
1295 #include <stdarg.h>
1296 void foo(char* fmt, ...)
1297 {va_list args; va_start(args, fmt);
1298 vscanf("%i", args);}],
1299 [],, [ac_c99_stdio=no])
1300 AC_TRY_COMPILE([#include <stdio.h>
1301 #include <stdarg.h>
1302 void foo(char* fmt, ...)
1303 {va_list args; va_start(args, fmt);
1304 vsnprintf(fmt, 0, "%i", args);}],
1305 [],, [ac_c99_stdio=no])
1306 AC_TRY_COMPILE([#include <stdio.h>
1307 #include <stdarg.h>
1308 void foo(char* fmt, ...)
1309 {va_list args; va_start(args, fmt);
1310 vsscanf(fmt, "%i", args);}],
1311 [],, [ac_c99_stdio=no])
1312 AC_MSG_RESULT($ac_c99_stdio)
1313
1314 # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1315 ac_c99_stdlib=yes;
1316 AC_MSG_CHECKING([for lldiv_t declaration])
1317 AC_CACHE_VAL(ac_c99_lldiv_t, [
1318 AC_TRY_COMPILE([#include <stdlib.h>],
1319 [ lldiv_t mydivt;],
1320 [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
1321 ])
1322 AC_MSG_RESULT($ac_c99_lldiv_t)
1323
1324 AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1325 AC_TRY_COMPILE([#include <stdlib.h>],
1326 [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
1327 AC_TRY_COMPILE([#include <stdlib.h>],
1328 [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
1329 AC_TRY_COMPILE([#include <stdlib.h>],
1330 [char* tmp; strtoll("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1331 AC_TRY_COMPILE([#include <stdlib.h>],
1332 [char* tmp; strtoull("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
1333 AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
1334 AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
1335 AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
1336 AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
1337 if test x"$ac_c99_lldiv_t" = x"no"; then
1338 ac_c99_stdlib=no;
1339 fi;
1340 AC_MSG_RESULT($ac_c99_stdlib)
1341
1342 # Check for the existence of <wchar.h> functions used if C99 is enabled.
1343 # XXX the wchar.h checks should be rolled into the general C99 bits.
1344 ac_c99_wchar=yes;
1345 AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
1346 AC_TRY_COMPILE([#include <wchar.h>],
1347 [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
1348 AC_TRY_COMPILE([#include <wchar.h>],
1349 [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
1350 AC_TRY_COMPILE([#include <wchar.h>],
1351 [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
1352 AC_MSG_RESULT($ac_c99_wchar)
1353
1354 AC_MSG_CHECKING([for enabled ISO C99 support])
1355 if test x"$ac_c99_math" = x"no" ||
1356 test x"$ac_c99_stdio" = x"no" ||
1357 test x"$ac_c99_stdlib" = x"no" ||
1358 test x"$ac_c99_wchar" = x"no"; then
1359 enable_c99=no;
1360 fi;
1361 AC_MSG_RESULT($enable_c99)
1362
1363 # Option parsed, now set things appropriately
1364 if test x"$enable_c99" = x"yes"; then
1365 AC_DEFINE(_GLIBCPP_USE_C99)
1366 fi
1367
1368 AC_LANG_RESTORE
1369 ])
1370
1371
1372 dnl
1373 dnl Check for template specializations for the 'long long' type extension.
1374 dnl NB: Must check for C99 support before calling _GLIBCPP_ENABLE_LONG_LONG
1375 dnl
1376 dnl GLIBCPP_ENABLE_LONG_LONG
1377 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
1378 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
1379 dnl + Usage: GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
1380 dnl Where DEFAULT is either `yes' or `no'. If omitted, it
1381 dnl defaults to `no'.
1382 dnl + If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1383 dnl
1384 dnl GLIBCPP_ENABLE_LONG_LONG
1385 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
1386 define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
1387
1388 AC_ARG_ENABLE(long-long,
1389 changequote(<<, >>)dnl
1390 <<--enable-long-long turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
1391 changequote([, ])dnl
1392 [case "$enableval" in
1393 yes) enable_long_long=yes ;;
1394 no) enable_long_long=no ;;
1395 *) AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
1396 esac],
1397 enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
1398
1399 # iostreams require strtoll, strtoull to compile. If the
1400 # GLIBCPP_ENABLE_C99 tests found these, and if C99 support is enabled,
1401 # go ahead and allow long long to be used.
1402 if test x"$enable_c99" = x"no"; then
1403 enable_long_long=no;
1404 fi
1405
1406 # Option parsed, now set things appropriately
1407 AC_MSG_CHECKING([for enabled long long support])
1408 if test x"$enable_long_long" = xyes; then
1409 AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
1410 fi
1411 AC_MSG_RESULT($enable_long_long)
1412 ])
1413
1414
1415 dnl
1416 dnl Check for what kind of C headers to use.
1417 dnl
1418 dnl GLIBCPP_ENABLE_CHEADERS
1419 dnl --enable-cheaders= [does stuff].
1420 dnl --disable-cheaders [does not do anything, really].
1421 dnl + This will eventually need to be 'c_shadow' by default.
1422 dnl + Usage: GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
1423 dnl Where DEFAULT is either `c' or `c_std' or 'c_shadow'.
1424 dnl If ommitted, it defaults to `c_std'.
1425 AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
1426 define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
1427 AC_MSG_CHECKING([for c header strategy to use])
1428 AC_ARG_ENABLE(cheaders,
1429 changequote(<<, >>)dnl
1430 << --enable-cheaders construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
1431 changequote([, ])
1432 [case "$enableval" in
1433 c)
1434 enable_cheaders=c
1435 ;;
1436 c_std)
1437 enable_cheaders=c_std
1438 ;;
1439 c_shadow)
1440 enable_cheaders=c_shadow
1441 ;;
1442 *) AC_MSG_ERROR([Unknown argument to enable/disable "C" headers])
1443 ;;
1444 esac],
1445 enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
1446 AC_MSG_RESULT($enable_cheaders)
1447
1448 dnl Option parsed, now set things appropriately
1449 case "$enable_cheaders" in
1450 c_shadow)
1451 CSHADOW_FLAGS="-fno-builtin"
1452 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_shadow'
1453 AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
1454 ;;
1455 c_std)
1456 CSHADOW_FLAGS=""
1457 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_std'
1458 ;;
1459 c)
1460 CSHADOW_FLAGS=""
1461 C_INCLUDE_DIR='${glibcpp_srcdir}/include/c'
1462 ;;
1463 esac
1464
1465 AC_SUBST(CSHADOW_FLAGS)
1466 AC_SUBST(C_INCLUDE_DIR)
1467 AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
1468 ])
1469
1470
1471 dnl
1472 dnl Check for wide character support. Has the same effect as the option
1473 dnl in gcc's configure, but in a form that autoconf can mess with.
1474 dnl
1475 dnl GLIBCPP_ENABLE_C_MBCHAR
1476 dnl --enable-c-mbchar requests all the wchar_t stuff.
1477 dnl --disable-c-mbchar doesn't.
1478 dnl + Usage: GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
1479 dnl Where DEFAULT is either `yes' or `no'. If ommitted, it
1480 dnl defaults to `no'.
1481 AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
1482 define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
1483 AC_ARG_ENABLE(c-mbchar,
1484 changequote(<<, >>)dnl
1485 << --enable-c-mbchar enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
1486 changequote([, ])dnl
1487 [case "$enableval" in
1488 yes) enable_c_mbchar=yes ;;
1489 no) enable_c_mbchar=no ;;
1490 *) AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
1491 esac],
1492 enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
1493 dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1494 ])
1495
1496
1497 dnl
1498 dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
1499 dnl
1500 dnl TOPLEVEL_INCLUDES
1501 dnl LIBMATH_INCLUDES
1502 dnl LIBSUPCXX_INCLUDES
1503 dnl LIBIO_INCLUDES
1504 dnl CSHADOW_INCLUDES
1505 dnl
1506 dnl GLIBCPP_EXPORT_INCLUDES
1507 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
1508 # Root level of the build directory include sources.
1509 GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/include"
1510
1511 # Passed down for canadian crosses.
1512 if test x"$CANADIAN" = xyes; then
1513 TOPLEVEL_INCLUDES='-I$(includedir)'
1514 fi
1515
1516 LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
1517
1518 LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
1519
1520 if test x"$need_libio" = xyes; then
1521 LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
1522 AC_SUBST(LIBIO_INCLUDES)
1523 fi
1524
1525 # Now, export this to all the little Makefiles....
1526 AC_SUBST(GLIBCPP_INCLUDES)
1527 AC_SUBST(TOPLEVEL_INCLUDES)
1528 AC_SUBST(LIBMATH_INCLUDES)
1529 AC_SUBST(LIBSUPCXX_INCLUDES)
1530 ])
1531
1532
1533 dnl
1534 dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
1535 dnl
1536 AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
1537 # Optimization flags that are probably a good idea for thrill-seekers. Just
1538 # uncomment the lines below and make, everything else is ready to go...
1539 # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
1540 OPTIMIZE_CXXFLAGS=
1541 AC_SUBST(OPTIMIZE_CXXFLAGS)
1542
1543 WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
1544 AC_SUBST(WARN_FLAGS)
1545 ])
1546
1547 dnl
1548 dnl GLIBCPP_EXPORT_INSTALL_INFO
1549 dnl calculates gxx_install_dir
1550 dnl exports glibcpp_toolexecdir
1551 dnl exports glibcpp_toolexeclibdir
1552 dnl exports glibcpp_builddir
1553 dnl exports glibcpp_srcdir
1554 dnl exports glibcpp_prefixdir
1555 dnl
1556 dnl Assumes cross_compiling bits already done, and with_cross_host in
1557 dnl particular
1558 dnl
1559 dnl GLIBCPP_EXPORT_INSTALL_INFO
1560 AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
1561
1562 glibcpp_toolexecdir=no
1563 glibcpp_toolexeclibdir=no
1564
1565 # Export build and source directories.
1566 # These need to be absolute paths, yet at the same time need to
1567 # canonicalize only relative paths, because then amd will not unmount
1568 # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
1569 glibcpp_builddir=`pwd`
1570 case $srcdir in
1571 [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
1572 *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
1573 esac
1574 glibcpp_prefixdir=${prefix}
1575
1576 AC_MSG_CHECKING([for interface version number])
1577 libstdcxx_interface=$INTERFACE
1578 AC_MSG_RESULT($libstdcxx_interface)
1579
1580 # Process the option --with-gxx-include-dir=<path to include-files directory>
1581 AC_MSG_CHECKING([for --with-gxx-include-dir])
1582 AC_ARG_WITH(gxx-include-dir,
1583 [ --with-gxx-include-dir the installation directory for include files],
1584 [case "${withval}" in
1585 yes)
1586 AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
1587 gxx_include_dir=no
1588 ;;
1589 no)
1590 gxx_include_dir=no
1591 ;;
1592 *)
1593 gxx_include_dir=${withval}
1594 ;;
1595 esac], [gxx_include_dir=no])
1596 AC_MSG_RESULT($gxx_include_dir)
1597
1598 # Process the option "--enable-version-specific-runtime-libs"
1599 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
1600 AC_ARG_ENABLE(version-specific-runtime-libs,
1601 [ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ],
1602 [ version_specific_libs=yes
1603 # Need the gcc compiler version to know where to install libraries
1604 # and header files if --enable-version-specific-runtime-libs option
1605 # is selected.
1606 changequote(,)dnl
1607 gcc_version_trigger=${srcdir}/../gcc/version.c
1608 gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
1609 gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
1610 gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/g++
1611 glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1612 glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
1613 changequote([,])dnl
1614 ],version_specific_libs=no)
1615 AC_MSG_RESULT($version_specific_libs)
1616
1617 # Default case for install directory for include files.
1618 if test x"$version_specific_libs" = x"no" \
1619 && test x"$gxx_include_dir" = x"no"; then
1620 gxx_include_dir='$(prefix)'/include/g++-${libstdcxx_interface}
1621 fi
1622
1623 # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
1624 # Install a library built with a cross compiler in tooldir, not libdir.
1625 if test x"$glibcpp_toolexecdir" = x"no"; then
1626 if test -n "$with_cross_host" &&
1627 test x"$with_cross_host" != x"no"; then
1628 glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
1629 glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)'
1630 else
1631 glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
1632 glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)'
1633 fi
1634 fi
1635
1636 AC_MSG_CHECKING([for install location])
1637 AC_MSG_RESULT($gxx_include_dir)
1638
1639 AC_SUBST(glibcpp_builddir)
1640 AC_SUBST(glibcpp_srcdir)
1641 AC_SUBST(glibcpp_prefixdir)
1642 AC_SUBST(gxx_include_dir)
1643 AC_SUBST(glibcpp_toolexecdir)
1644 AC_SUBST(glibcpp_toolexeclibdir)
1645 ])
1646
1647
1648 # Check whether LC_MESSAGES is available in <locale.h>.
1649 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1650 #
1651 # This file file be copied and used freely without restrictions. It can
1652 # be used in projects which are not available under the GNU Public License
1653 # but which still want to provide support for the GNU gettext functionality.
1654 # Please note that the actual code is *not* freely available.
1655
1656 # serial 1
1657
1658 AC_DEFUN(AC_LC_MESSAGES, [
1659 AC_CHECK_HEADER(locale.h, [
1660 AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1661 [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1662 ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1663 if test $ac_cv_val_LC_MESSAGES = yes; then
1664 AC_DEFINE(HAVE_LC_MESSAGES)
1665 fi
1666 ])
1667 ])
1668
1669
1670 # Check for functions in math library.
1671 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1672 #
1673 # This file can be copied and used freely without restrictions. It can
1674 # be used in projects which are not available under the GNU Public License
1675 # but which still want to provide support for the GNU gettext functionality.
1676 # Please note that the actual code is *not* freely available.
1677
1678 # serial 1
1679
1680 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
1681 AC_DEFUN(AC_REPLACE_MATHFUNCS,
1682 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])
1683 AC_SUBST(LIBMATHOBJS)dnl
1684 ])
1685
1686
1687 # Check for string functions.
1688 # Ulrich Drepper <drepper@cygnus.com>, 1998.
1689 #
1690 # This file can be copied and used freely without restrictions. It can
1691 # be used in projects which are not available under the GNU Public License
1692 # but which still want to provide support for the GNU gettext functionality.
1693 # Please note that the actual code is *not* freely available.
1694
1695 # serial 1
1696
1697 dnl AC_REPLACE_STRINGFUNCS(FUNCTION...)
1698 AC_DEFUN(AC_REPLACE_STRINGFUNCS,
1699 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
1700 AC_SUBST(LIBSTRINGOBJS)dnl
1701 ])
1702
1703
1704 dnl This macro searches for a GNU version of make. If a match is found, the
1705 dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
1706 dnl set to "#". This is useful for including a special features in a Makefile,
1707 dnl which cannot be handled by other versions of make. The variable
1708 dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
1709 dnl the empty string otherwise.
1710 dnl
1711 dnl Here is an example of its use:
1712 dnl
1713 dnl Makefile.in might contain:
1714 dnl
1715 dnl # A failsafe way of putting a dependency rule into a makefile
1716 dnl $(DEPEND):
1717 dnl $(CC) -MM $(srcdir)/*.c > $(DEPEND)
1718 dnl
1719 dnl @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
1720 dnl @ifGNUmake@ include $(DEPEND)
1721 dnl @ifGNUmake@ endif
1722 dnl
1723 dnl Then configure.in would normally contain:
1724 dnl
1725 dnl CHECK_GNU_MAKE()
1726 dnl AC_OUTPUT(Makefile)
1727 dnl
1728 dnl Then perhaps to cause gnu make to override any other make, we could do
1729 dnl something like this (note that GNU make always looks for GNUmakefile first):
1730 dnl
1731 dnl if ! test x$_cv_gnu_make_command = x ; then
1732 dnl mv Makefile GNUmakefile
1733 dnl echo .DEFAULT: > Makefile ;
1734 dnl echo \ $_cv_gnu_make_command \$@ >> Makefile;
1735 dnl fi
1736 dnl
1737 dnl Then, if any (well almost any) other make is called, and GNU make also
1738 dnl exists, then the other make wraps the GNU make.
1739 dnl
1740 dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
1741 dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
1742 dnl
1743 dnl #### Changes for libstdc++-v3: reformatting and linewrapping; prepending
1744 dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
1745 dnl #### conditional's subshell (" --version" is not a command), using a
1746 dnl #### different option to grep(1).
1747 dnl #### -pme
1748 dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
1749 dnl #### ${MAKE:-make}).
1750 dnl #### -msokolov
1751 AC_DEFUN(
1752 GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
1753 _cv_gnu_make_command='' ;
1754 dnl Search all the common names for GNU make
1755 for a in "${MAKE-make}" make gmake gnumake ; do
1756 if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
1757 then
1758 _cv_gnu_make_command=$a ;
1759 break;
1760 fi
1761 done ;
1762 ) ;
1763 dnl If there was a GNU version, then set @ifGNUmake@ to the empty
1764 dnl string, '#' otherwise
1765 if test "x$_cv_gnu_make_command" != "x" ; then
1766 ifGNUmake='' ;
1767 else
1768 ifGNUmake='#' ;
1769 fi
1770 AC_SUBST(ifGNUmake)
1771 ])
1772
1773 sinclude(../libtool.m4)
1774 dnl The lines below arrange for aclocal not to bring an installed
1775 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1776 dnl add a definition of LIBTOOL to Makefile.in.
1777 ifelse(,,,[AC_SUBST(LIBTOOL)
1778 AC_DEFUN([AM_PROG_LIBTOOL])
1779 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1780 AC_DEFUN([AC_PROG_LD])
1781 ])
1782
1783
1784
1785 # Do all the work for Automake. This macro actually does too much --
1786 # some checks are only needed if your package does certain things.
1787 # But this isn't really a big deal.
1788
1789 # serial 1
1790
1791 dnl Usage:
1792 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
1793
1794 AC_DEFUN(AM_INIT_AUTOMAKE,
1795 [AC_REQUIRE([AC_PROG_INSTALL])
1796 PACKAGE=[$1]
1797 AC_SUBST(PACKAGE)
1798 VERSION=[$2]
1799 AC_SUBST(VERSION)
1800 dnl test to see if srcdir already configured
1801 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
1802 AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
1803 fi
1804 ifelse([$3],,
1805 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
1806 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
1807 AC_REQUIRE([AM_SANITY_CHECK])
1808 AC_REQUIRE([AC_ARG_PROGRAM])
1809 dnl FIXME This is truly gross.
1810 missing_dir=`cd $ac_aux_dir && pwd`
1811 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
1812 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
1813 AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
1814 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
1815 AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
1816 AC_REQUIRE([AC_PROG_MAKE_SET])])
1817
1818 #
1819 # Check to make sure that the build environment is sane.
1820 #
1821
1822 AC_DEFUN(AM_SANITY_CHECK,
1823 [AC_MSG_CHECKING([whether build environment is sane])
1824 # Just in case
1825 sleep 1
1826 echo timestamp > conftestfile
1827 # Do `set' in a subshell so we don't clobber the current shell's
1828 # arguments. Must try -L first in case configure is actually a
1829 # symlink; some systems play weird games with the mod time of symlinks
1830 # (eg FreeBSD returns the mod time of the symlink's containing
1831 # directory).
1832 if (
1833 set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
1834 if test "[$]*" = "X"; then
1835 # -L didn't work.
1836 set X `ls -t $srcdir/configure conftestfile`
1837 fi
1838 if test "[$]*" != "X $srcdir/configure conftestfile" \
1839 && test "[$]*" != "X conftestfile $srcdir/configure"; then
1840
1841 # If neither matched, then we have a broken ls. This can happen
1842 # if, for instance, CONFIG_SHELL is bash and it inherits a
1843 # broken ls alias from the environment. This has actually
1844 # happened. Such a system could not be considered "sane".
1845 AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
1846 alias in your environment])
1847 fi
1848
1849 test "[$]2" = conftestfile
1850 )
1851 then
1852 # Ok.
1853 :
1854 else
1855 AC_MSG_ERROR([newly created file is older than distributed files!
1856 Check your system clock])
1857 fi
1858 rm -f conftest*
1859 AC_MSG_RESULT(yes)])
1860
1861 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
1862 dnl The program must properly implement --version.
1863 AC_DEFUN(AM_MISSING_PROG,
1864 [AC_MSG_CHECKING(for working $2)
1865 # Run test in a subshell; some versions of sh will print an error if
1866 # an executable is not found, even if stderr is redirected.
1867 # Redirect stdin to placate older versions of autoconf. Sigh.
1868 if ($2 --version) < /dev/null > /dev/null 2>&1; then
1869 $1=$2
1870 AC_MSG_RESULT(found)
1871 else
1872 $1="$3/missing $2"
1873 AC_MSG_RESULT(missing)
1874 fi
1875 AC_SUBST($1)])
1876
1877 # Add --enable-maintainer-mode option to configure.
1878 # From Jim Meyering
1879
1880 # serial 1
1881
1882 AC_DEFUN(AM_MAINTAINER_MODE,
1883 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
1884 dnl maintainer-mode is disabled by default
1885 AC_ARG_ENABLE(maintainer-mode,
1886 [ --enable-maintainer-mode enable make rules and dependencies not useful
1887 (and sometimes confusing) to the casual installer],
1888 USE_MAINTAINER_MODE=$enableval,
1889 USE_MAINTAINER_MODE=no)
1890 AC_MSG_RESULT($USE_MAINTAINER_MODE)
1891 AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
1892 MAINT=$MAINTAINER_MODE_TRUE
1893 AC_SUBST(MAINT)dnl
1894 ]
1895 )
1896
1897 # Define a conditional.
1898
1899 AC_DEFUN(AM_CONDITIONAL,
1900 [AC_SUBST($1_TRUE)
1901 AC_SUBST($1_FALSE)
1902 if $2; then
1903 $1_TRUE=
1904 $1_FALSE='#'
1905 else
1906 $1_TRUE='#'
1907 $1_FALSE=
1908 fi])
1909
1910 # Like AC_CONFIG_HEADER, but automatically create stamp file.
1911
1912 AC_DEFUN(AM_CONFIG_HEADER,
1913 [AC_PREREQ([2.12])
1914 AC_CONFIG_HEADER([$1])
1915 dnl When config.status generates a header, we must update the stamp-h file.
1916 dnl This file resides in the same directory as the config header
1917 dnl that is generated. We must strip everything past the first ":",
1918 dnl and everything past the last "/".
1919 AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
1920 ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
1921 <<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
1922 <<am_indx=1
1923 for am_file in <<$1>>; do
1924 case " <<$>>CONFIG_HEADERS " in
1925 *" <<$>>am_file "*<<)>>
1926 echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
1927 ;;
1928 esac
1929 am_indx=`expr "<<$>>am_indx" + 1`
1930 done<<>>dnl>>)
1931 changequote([,]))])
1932