OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libstdc++-v3/] [acinclude.m4] - Blame information for rev 749

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 742 jeremybenn
dnl
2
dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
3
dnl
4
dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
5
dnl end of configure.  This lets tested variables be reassigned, and the
6
dnl conditional will depend on the final state of the variable.  For a simple
7
dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
8
dnl
9
m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
10
AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
11
  m4_divert_text([glibcxx_diversion],dnl
12
   AM_CONDITIONAL([$1],[$2])
13
  )dnl
14
])dnl
15
AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
16
 
17
 
18
dnl
19
dnl Check to see what architecture and operating system we are compiling
20
dnl for.  Also, if architecture- or OS-specific flags are required for
21
dnl compilation, pick them up here.
22
dnl
23
AC_DEFUN([GLIBCXX_CHECK_HOST], [
24
  . $glibcxx_srcdir/configure.host
25
  AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
26
  AC_MSG_NOTICE([OS config directory is $os_include_dir])
27
])
28
 
29
dnl
30
dnl Initialize the rest of the library configury.  At this point we have
31
dnl variables like $host.
32
dnl
33
dnl Sets:
34
dnl  SUBDIRS
35
dnl Substs:
36
dnl  glibcxx_builddir     (absolute path)
37
dnl  glibcxx_srcdir       (absolute path)
38
dnl  toplevel_builddir    (absolute path)
39
dnl  toplevel_srcdir      (absolute path)
40
dnl  with_cross_host
41
dnl  with_newlib
42
dnl  with_target_subdir
43
dnl plus
44
dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
45
dnl  - default settings for all AM_CONFITIONAL test variables
46
dnl  - lots of tools, like CC and CXX
47
dnl
48
AC_DEFUN([GLIBCXX_CONFIGURE], [
49
  # Keep these sync'd with the list in Makefile.am.  The first provides an
50
  # expandable list at autoconf time; the second provides an expandable list
51
  # (i.e., shell variable) at configure time.
52
  m4_define([glibcxx_SUBDIRS],[include libsupc++ python src src/c++98 src/c++11 doc po testsuite])
53
  SUBDIRS='glibcxx_SUBDIRS'
54
 
55
  # These need to be absolute paths, yet at the same time need to
56
  # canonicalize only relative paths, because then amd will not unmount
57
  # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
58
  glibcxx_builddir=`${PWDCMD-pwd}`
59
  case $srcdir in
60
    [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
61
    *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
62
  esac
63
  toplevel_builddir=${glibcxx_builddir}/..
64
  toplevel_srcdir=${glibcxx_srcdir}/..
65
  AC_SUBST(glibcxx_builddir)
66
  AC_SUBST(glibcxx_srcdir)
67
  AC_SUBST(toplevel_builddir)
68
  AC_SUBST(toplevel_srcdir)
69
 
70
  # We use these options to decide which functions to include.  They are
71
  # set from the top level.
72
  AC_ARG_WITH([target-subdir],
73
    AC_HELP_STRING([--with-target-subdir=SUBDIR],
74
                   [configuring in a subdirectory]))
75
 
76
  AC_ARG_WITH([cross-host],
77
    AC_HELP_STRING([--with-cross-host=HOST],
78
                   [configuring with a cross compiler]))
79
 
80
  AC_ARG_WITH([newlib],
81
    AC_HELP_STRING([--with-newlib],
82
                   [assume newlib as a system C library]))
83
 
84
  # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
85
  # available).  Uncomment the next line to force a particular method.
86
  AC_PROG_LN_S
87
  #LN_S='cp -p'
88
 
89
  AC_CHECK_TOOL(AS, as)
90
  AC_CHECK_TOOL(AR, ar)
91
  AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
92
 
93
  AM_MAINTAINER_MODE
94
 
95
  # Set up safe default values for all subsequent AM_CONDITIONAL tests
96
  # which are themselves conditionally expanded.
97
  ## (Right now, this only matters for enable_wchar_t, but nothing prevents
98
  ## other macros from doing the same.  This should be automated.)  -pme
99
 
100
  # Check for C library flavor since GNU/Linux platforms use different
101
  # configuration directories depending on the C library in use.
102
  AC_EGREP_CPP([_using_uclibc], [
103
  #include <stdio.h>
104
  #if __UCLIBC__
105
    _using_uclibc
106
  #endif
107
  ], uclibc=yes, uclibc=no)
108
 
109
  AC_EGREP_CPP([_using_bionic], [
110
  #include <stdio.h>
111
  #if __BIONIC__
112
    _using_bionic
113
  #endif
114
  ], bionic=yes, bionic=no)
115
 
116
  # Find platform-specific directories containing configuration info.
117
  # Also possibly modify flags used elsewhere, as needed by the platform.
118
  GLIBCXX_CHECK_HOST
119
])
120
 
121
 
122
dnl
123
dnl Tests for newer compiler features, or features that are present in newer
124
dnl compiler versions but not older compiler versions still in use, should
125
dnl be placed here.
126
dnl
127
dnl Defines:
128
dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
129
dnl   new inlining code or the new system_header pragma will die on -Werror.
130
dnl   Leave it out by default and use maint-mode to use it.
131
dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
132
dnl   compiler supports it and the user has not requested debug mode.
133
dnl
134
AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
135
  # All these tests are for C++; save the language and the compiler flags.
136
  # The CXXFLAGS thing is suspicious, but based on similar bits previously
137
  # found in GLIBCXX_CONFIGURE.
138
  AC_LANG_SAVE
139
  AC_LANG_CPLUSPLUS
140
  ac_test_CXXFLAGS="${CXXFLAGS+set}"
141
  ac_save_CXXFLAGS="$CXXFLAGS"
142
 
143
  # Check for maintainer-mode bits.
144
  if test x"$USE_MAINTAINER_MODE" = xno; then
145
    WERROR=''
146
  else
147
    WERROR='-Werror'
148
  fi
149
 
150
  # Check for -ffunction-sections -fdata-sections
151
  AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
152
  CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
153
  AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
154
  if test "$ac_test_CXXFLAGS" = set; then
155
    CXXFLAGS="$ac_save_CXXFLAGS"
156
  else
157
    # this is the suspicious part
158
    CXXFLAGS=''
159
  fi
160
  if test x"$ac_fdsections" = x"yes"; then
161
    SECTION_FLAGS='-ffunction-sections -fdata-sections'
162
  fi
163
  AC_MSG_RESULT($ac_fdsections)
164
 
165
  AC_LANG_RESTORE
166
  AC_SUBST(WERROR)
167
  AC_SUBST(SECTION_FLAGS)
168
])
169
 
170
 
171
dnl
172
dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
173
dnl the native linker is in use, all variables will be defined to something
174
dnl safe (like an empty string).
175
dnl
176
dnl Defines:
177
dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
178
dnl  OPT_LDFLAGS='-Wl,-O1' and '-z,relro' if possible
179
dnl  LD (as a side effect of testing)
180
dnl Sets:
181
dnl  with_gnu_ld
182
dnl  glibcxx_ld_is_gold (set to "no" or "yes")
183
dnl  glibcxx_gnu_ld_version (possibly)
184
dnl
185
dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
186
dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
187
dnl
188
AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
189
  # If we're not using GNU ld, then there's no point in even trying these
190
  # tests.  Check for that first.  We should have already tested for gld
191
  # by now (in libtool), but require it now just to be safe...
192
  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
193
  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
194
  AC_REQUIRE([AC_PROG_LD])
195
  AC_REQUIRE([AC_PROG_AWK])
196
 
197
  # The name set by libtool depends on the version of libtool.  Shame on us
198
  # for depending on an impl detail, but c'est la vie.  Older versions used
199
  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
200
  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
201
  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
202
  # set (hence we're using an older libtool), then set it.
203
  if test x${with_gnu_ld+set} != xset; then
204
    if test x${ac_cv_prog_gnu_ld+set} != xset; then
205
      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
206
      with_gnu_ld=no
207
    else
208
      with_gnu_ld=$ac_cv_prog_gnu_ld
209
    fi
210
  fi
211
 
212
  # Start by getting the version number.  I think the libtool test already
213
  # does some of this, but throws away the result.
214
  glibcxx_ld_is_gold=no
215
  if test x"$with_gnu_ld" = x"yes"; then
216
    AC_MSG_CHECKING([for ld version])
217
    changequote(,)
218
    if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
219
      glibcxx_ld_is_gold=yes
220
    fi
221
    ldver=`$LD --version 2>/dev/null |
222
           sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
223
    changequote([,])
224
    glibcxx_gnu_ld_version=`echo $ldver | \
225
           $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
226
    AC_MSG_RESULT($glibcxx_gnu_ld_version)
227
  fi
228
 
229
  # Set --gc-sections.
230
  glibcxx_have_gc_sections=no
231
  if test "$glibcxx_ld_is_gold" = "yes"; then
232
    if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
233
      glibcxx_have_gc_sections=yes
234
    fi
235
  else
236
    glibcxx_gcsections_min_ld=21602
237
    if test x"$with_gnu_ld" = x"yes" &&
238
        test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
239
      glibcxx_have_gc_sections=yes
240
    fi
241
  fi
242
  if test "$glibcxx_have_gc_sections" = "yes"; then
243
    # Sufficiently young GNU ld it is!  Joy and bunny rabbits!
244
    # NB: This flag only works reliably after 2.16.1. Configure tests
245
    # for this are difficult, so hard wire a value that should work.
246
 
247
    ac_test_CFLAGS="${CFLAGS+set}"
248
    ac_save_CFLAGS="$CFLAGS"
249
    CFLAGS='-Wl,--gc-sections'
250
 
251
    # Check for -Wl,--gc-sections
252
    AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
253
    AC_TRY_LINK([ int one(void) { return 1; }
254
     int two(void) { return 2; }
255
        ], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
256
    if test "$ac_gcsections" = "yes"; then
257
      rm -f conftest.c
258
      touch conftest.c
259
      if $CC -c conftest.c; then
260
        if $LD --gc-sections -o conftest conftest.o 2>&1 | \
261
           grep "Warning: gc-sections option ignored" > /dev/null; then
262
          ac_gcsections=no
263
        fi
264
      fi
265
      rm -f conftest.c conftest.o conftest
266
    fi
267
    if test "$ac_gcsections" = "yes"; then
268
      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
269
    fi
270
    AC_MSG_RESULT($ac_gcsections)
271
 
272
    if test "$ac_test_CFLAGS" = set; then
273
      CFLAGS="$ac_save_CFLAGS"
274
    else
275
      # this is the suspicious part
276
      CFLAGS=''
277
    fi
278
  fi
279
 
280
  # Set -z,relro.
281
  # Note this is only for shared objects.
282
  ac_ld_relro=no
283
  if test x"$with_gnu_ld" = x"yes"; then
284
    AC_MSG_CHECKING([for ld that supports -Wl,-z,relro])
285
    cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
286
    if test -n "$cxx_z_relo"; then
287
      OPT_LDFLAGS="-Wl,-z,relro"
288
      ac_ld_relro=yes
289
    fi
290
    AC_MSG_RESULT($ac_ld_relro)
291
  fi
292
 
293
  # Set linker optimization flags.
294
  if test x"$with_gnu_ld" = x"yes"; then
295
    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
296
  fi
297
 
298
  AC_SUBST(SECTION_LDFLAGS)
299
  AC_SUBST(OPT_LDFLAGS)
300
])
301
 
302
 
303
dnl
304
dnl Check for headers for, and arguments to, the setrlimit() function.
305
dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
306
dnl
307
dnl Defines:
308
dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits
309
dnl  various HAVE_LIMIT_* for individual limit names
310
dnl
311
AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
312
  AC_MSG_CHECKING([for RLIMIT_$1])
313
  AC_TRY_COMPILE(
314
    [#include <unistd.h>
315
     #include <sys/time.h>
316
     #include <sys/resource.h>
317
    ],
318
    [ int f = RLIMIT_$1 ; ],
319
    [glibcxx_mresult=1], [glibcxx_mresult=0])
320
  AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
321
                     [Only used in build directory testsuite_hooks.h.])
322
  if test $glibcxx_mresult = 1 ; then res=yes ; else res=no ; fi
323
  AC_MSG_RESULT($res)
324
])
325
 
326
AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
327
  setrlimit_have_headers=yes
328
  AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
329
                   [],
330
                   [setrlimit_have_headers=no])
331
  # If don't have the headers, then we can't run the tests now, and we
332
  # won't be seeing any of these during testsuite compilation.
333
  if test $setrlimit_have_headers = yes; then
334
    # Can't do these in a loop, else the resulting syntax is wrong.
335
    GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
336
    GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
337
    GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
338
    GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
339
    GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
340
 
341
    # Check for rlimit, setrlimit.
342
    AC_CACHE_VAL(glibcxx_cv_setrlimit, [
343
      AC_TRY_COMPILE(
344
        [#include <unistd.h>
345
         #include <sys/time.h>
346
         #include <sys/resource.h>
347
        ],
348
        [struct rlimit r;
349
         setrlimit(0, &r);],
350
        [glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
351
    ])
352
  fi
353
 
354
  AC_MSG_CHECKING([for testsuite resource limits support])
355
  if test $setrlimit_have_headers = yes && test $glibcxx_cv_setrlimit = yes; then
356
    ac_res_limits=yes
357
    AC_DEFINE(_GLIBCXX_RES_LIMITS, 1,
358
              [Define if using setrlimit to set resource limits during
359
              "make check"])
360
  else
361
    ac_res_limits=no
362
  fi
363
  AC_MSG_RESULT($ac_res_limits)
364
])
365
 
366
 
367
dnl
368
dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
369
dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
370
dnl
371
AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
372
 
373
  AC_LANG_SAVE
374
  AC_LANG_CPLUSPLUS
375
  ac_save_CXXFLAGS="$CXXFLAGS"
376
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
377
 
378
  AC_MSG_CHECKING([for S_ISREG or S_IFREG])
379
  AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
380
    GCC_TRY_COMPILE_OR_LINK(
381
      [#include <sys/stat.h>],
382
      [struct stat buffer;
383
       fstat(0, &buffer);
384
       S_ISREG(buffer.st_mode);],
385
      [glibcxx_cv_S_ISREG=yes],
386
      [glibcxx_cv_S_ISREG=no])
387
  ])
388
  AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
389
    GCC_TRY_COMPILE_OR_LINK(
390
      [#include <sys/stat.h>],
391
      [struct stat buffer;
392
       fstat(0, &buffer);
393
       S_IFREG & buffer.st_mode;],
394
      [glibcxx_cv_S_IFREG=yes],
395
      [glibcxx_cv_S_IFREG=no])
396
  ])
397
  res=no
398
  if test $glibcxx_cv_S_ISREG = yes; then
399
    AC_DEFINE(HAVE_S_ISREG, 1,
400
              [Define if S_IFREG is available in <sys/stat.h>.])
401
    res=S_ISREG
402
  elif test $glibcxx_cv_S_IFREG = yes; then
403
    AC_DEFINE(HAVE_S_IFREG, 1,
404
              [Define if S_IFREG is available in <sys/stat.h>.])
405
    res=S_IFREG
406
  fi
407
  AC_MSG_RESULT($res)
408
 
409
  CXXFLAGS="$ac_save_CXXFLAGS"
410
  AC_LANG_RESTORE
411
])
412
 
413
 
414
dnl
415
dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
416
dnl
417
AC_DEFUN([GLIBCXX_CHECK_POLL], [
418
 
419
  AC_LANG_SAVE
420
  AC_LANG_CPLUSPLUS
421
  ac_save_CXXFLAGS="$CXXFLAGS"
422
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
423
 
424
  AC_MSG_CHECKING([for poll])
425
  AC_CACHE_VAL(glibcxx_cv_POLL, [
426
    GCC_TRY_COMPILE_OR_LINK(
427
      [#include <poll.h>],
428
      [struct pollfd pfd[1];
429
       pfd[0].events = POLLIN;
430
       poll(pfd, 1, 0);],
431
      [glibcxx_cv_POLL=yes],
432
      [glibcxx_cv_POLL=no])
433
  ])
434
  if test $glibcxx_cv_POLL = yes; then
435
    AC_DEFINE(HAVE_POLL, 1, [Define if poll is available in <poll.h>.])
436
  fi
437
  AC_MSG_RESULT($glibcxx_cv_POLL)
438
 
439
  CXXFLAGS="$ac_save_CXXFLAGS"
440
  AC_LANG_RESTORE
441
])
442
 
443
 
444
dnl
445
dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
446
dnl
447
AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
448
 
449
  AC_LANG_SAVE
450
  AC_LANG_CPLUSPLUS
451
  ac_save_CXXFLAGS="$CXXFLAGS"
452
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
453
 
454
  AC_MSG_CHECKING([for writev])
455
  AC_CACHE_VAL(glibcxx_cv_WRITEV, [
456
    GCC_TRY_COMPILE_OR_LINK(
457
      [#include <sys/uio.h>],
458
      [struct iovec iov[2];
459
       writev(0, iov, 0);],
460
      [glibcxx_cv_WRITEV=yes],
461
      [glibcxx_cv_WRITEV=no])
462
  ])
463
  if test $glibcxx_cv_WRITEV = yes; then
464
    AC_DEFINE(HAVE_WRITEV, 1, [Define if writev is available in <sys/uio.h>.])
465
  fi
466
  AC_MSG_RESULT($glibcxx_cv_WRITEV)
467
 
468
  CXXFLAGS="$ac_save_CXXFLAGS"
469
  AC_LANG_RESTORE
470
])
471
 
472
 
473
dnl
474
dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
475
dnl Also check whether int64_t is actually a typedef to long or long long.
476
dnl
477
AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
478
 
479
  AC_LANG_SAVE
480
  AC_LANG_CPLUSPLUS
481
 
482
  AC_MSG_CHECKING([for int64_t])
483
  AC_CACHE_VAL(glibcxx_cv_INT64_T, [
484
    AC_TRY_COMPILE(
485
      [#include <stdint.h>],
486
      [int64_t var;],
487
      [glibcxx_cv_INT64_T=yes],
488
      [glibcxx_cv_INT64_T=no])
489
  ])
490
 
491
  if test $glibcxx_cv_INT64_T = yes; then
492
    AC_DEFINE(HAVE_INT64_T, 1, [Define if int64_t is available in <stdint.h>.])
493
    AC_MSG_RESULT($glibcxx_cv_INT64_T)
494
 
495
    AC_MSG_CHECKING([for int64_t as long])
496
    AC_CACHE_VAL(glibcxx_cv_int64_t_long, [
497
      AC_TRY_COMPILE(
498
        [#include <stdint.h>
499
        template<typename, typename> struct same { enum { value = -1 }; };
500
        template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
501
        int array[same<int64_t, long>::value];], [],
502
        [glibcxx_cv_int64_t_long=yes], [glibcxx_cv_int64_t_long=no])
503
    ])
504
 
505
    if test $glibcxx_cv_int64_t_long = yes; then
506
      AC_DEFINE(HAVE_INT64_T_LONG, 1, [Define if int64_t is a long.])
507
      AC_MSG_RESULT($glibcxx_cv_int64_t_long)
508
    fi
509
 
510
    AC_MSG_CHECKING([for int64_t as long long])
511
    AC_CACHE_VAL(glibcxx_cv_int64_t_long_long, [
512
      AC_TRY_COMPILE(
513
        [#include <stdint.h>
514
        template<typename, typename> struct same { enum { value = -1 }; };
515
        template<typename Tp> struct same<Tp, Tp> { enum { value = 1 }; };
516
        int array[same<int64_t, long long>::value];], [],
517
        [glibcxx_cv_int64_t_long_long=yes], [glibcxx_cv_int64_t_long_long=no])
518
    ])
519
 
520
    if test $glibcxx_cv_int64_t_long_long = yes; then
521
      AC_DEFINE(HAVE_INT64_T_LONG_LONG, 1, [Define if int64_t is a long long.])
522
      AC_MSG_RESULT($glibcxx_cv_int64_t_long_long)
523
    fi
524
  fi
525
 
526
  AC_LANG_RESTORE
527
])
528
 
529
 
530
dnl
531
dnl Check whether LFS support is available.
532
dnl
533
AC_DEFUN([GLIBCXX_CHECK_LFS], [
534
  AC_LANG_SAVE
535
  AC_LANG_CPLUSPLUS
536
  ac_save_CXXFLAGS="$CXXFLAGS"
537
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
538
  AC_MSG_CHECKING([for LFS support])
539
  AC_CACHE_VAL(glibcxx_cv_LFS, [
540
    GCC_TRY_COMPILE_OR_LINK(
541
      [#include <unistd.h>
542
       #include <stdio.h>
543
       #include <sys/stat.h>
544
      ],
545
      [FILE* fp;
546
       fopen64("t", "w");
547
       fseeko64(fp, 0, SEEK_CUR);
548
       ftello64(fp);
549
       lseek64(1, 0, SEEK_CUR);
550
       struct stat64 buf;
551
       fstat64(1, &buf);],
552
      [glibcxx_cv_LFS=yes],
553
      [glibcxx_cv_LFS=no])
554
  ])
555
  if test $glibcxx_cv_LFS = yes; then
556
    AC_DEFINE(_GLIBCXX_USE_LFS, 1, [Define if LFS support is available.])
557
  fi
558
  AC_MSG_RESULT($glibcxx_cv_LFS)
559
  CXXFLAGS="$ac_save_CXXFLAGS"
560
  AC_LANG_RESTORE
561
])
562
 
563
 
564
dnl
565
dnl Check for whether a fully dynamic basic_string implementation should
566
dnl be turned on, that does not put empty objects in per-process static
567
dnl memory (mostly useful together with shared memory allocators, see PR
568
dnl libstdc++/16612 for details).
569
dnl
570
dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1
571
dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0
572
dnl otherwise undefined
573
dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
574
dnl       Where DEFAULT is either `yes' or `no'.
575
dnl
576
AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
577
  GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
578
  if test $enable_fully_dynamic_string = yes; then
579
    enable_fully_dynamic_string_def=1
580
  else
581
    enable_fully_dynamic_string_def=0
582
  fi
583
  AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}],
584
              [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults])
585
])
586
 
587
 
588
dnl
589
dnl Does any necessary configuration of the testsuite directory.  Generates
590
dnl the testsuite_hooks.h header.
591
dnl
592
dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
593
dnl
594
dnl Sets:
595
dnl  enable_abi_check
596
dnl  GLIBCXX_TEST_WCHAR_T
597
dnl  GLIBCXX_TEST_THREAD
598
dnl Substs:
599
dnl  baseline_dir
600
dnl  baseline_subdir_switch
601
dnl
602
AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
603
  if $GLIBCXX_IS_NATIVE ; then
604
    # Do checks for resource limit functions.
605
    GLIBCXX_CHECK_SETRLIMIT
606
 
607
    # Look for setenv, so that extended locale tests can be performed.
608
    GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
609
  fi
610
 
611
  if $GLIBCXX_IS_NATIVE && test $is_hosted = yes &&
612
     test $enable_symvers != no; then
613
    case "$host" in
614
      *-*-cygwin*)
615
        enable_abi_check=no ;;
616
      *)
617
        enable_abi_check=yes ;;
618
    esac
619
  else
620
    # Only build this as native, since automake does not understand
621
    # CXX_FOR_BUILD.
622
    enable_abi_check=no
623
  fi
624
 
625
  # Export file names for ABI checking.
626
  baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}"
627
  AC_SUBST(baseline_dir)
628
  baseline_subdir_switch="$abi_baseline_subdir_switch"
629
  AC_SUBST(baseline_subdir_switch)
630
])
631
 
632
 
633
dnl
634
dnl Does any necessary configuration for docbook in the docs directory.
635
dnl
636
dnl XSLTPROC must be set before this
637
dnl
638
dnl Sets:
639
dnl  glibcxx_stylesheets
640
dnl Substs:
641
dnl  XSL_STYLE_DIR
642
dnl
643
AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
644
 
645
AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
646
glibcxx_stylesheets=no
647
if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
648
  glibcxx_stylesheets=yes
649
fi
650
AC_MSG_RESULT($glibcxx_stylesheets)
651
 
652
AC_MSG_CHECKING([for local stylesheet directory])
653
glibcxx_local_stylesheets=no
654
if test x"$glibcxx_stylesheets" = x"yes"; then
655
  if test -d /usr/share/sgml/docbook/xsl-ns-stylesheets; then
656
    glibcxx_local_stylesheets=yes
657
    XSL_STYLE_DIR=/usr/share/sgml/docbook/xsl-ns-stylesheets
658
  fi
659
  if test -d /usr/share/xml/docbook/stylesheet/docbook-xsl-ns; then
660
    glibcxx_local_stylesheets=yes
661
    XSL_STYLE_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl-ns
662
  fi
663
fi
664
AC_MSG_RESULT($glibcxx_local_stylesheets)
665
 
666
if test x"$glibcxx_local_stylesheets" = x"yes"; then
667
  AC_SUBST(XSL_STYLE_DIR)
668
  AC_MSG_NOTICE($XSL_STYLE_DIR)
669
else
670
  glibcxx_stylesheets=no
671
fi
672
 
673
# Check for epub3 dependencies.
674
AC_MSG_CHECKING([for epub3 stylesheets for documentation creation])
675
glibcxx_epub_stylesheets=no
676
if test x"$glibcxx_local_stylesheets" = x"yes"; then
677
   if test -f "$XSL_STYLE_DIR/epub3/chunk.xsl"; then
678
      glibcxx_epub_stylesheets=yes
679
   fi
680
fi
681
AC_MSG_RESULT($glibcxx_epub_stylesheets)
682
AM_CONDITIONAL(BUILD_EPUB, test x"$glibcxx_epub_stylesheets" = x"yes")
683
 
684
])
685
 
686
 
687
dnl
688
dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
689
dnl
690
dnl Substs:
691
dnl  GLIBCXX_INCLUDES
692
dnl  TOPLEVEL_INCLUDES
693
dnl
694
AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
695
  # Used for every C++ compile we perform.
696
  GLIBCXX_INCLUDES="\
697
-I$glibcxx_builddir/include/$host_alias \
698
-I$glibcxx_builddir/include \
699
-I$glibcxx_srcdir/libsupc++"
700
 
701
  # For Canadian crosses, pick this up too.
702
  if test $CANADIAN = yes; then
703
    GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
704
  fi
705
 
706
  # Stuff in the actual top level.  Currently only used by libsupc++ to
707
  # get unwind* headers from the libgcc dir.
708
  #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc -I$(toplevel_srcdir)/include'
709
  TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/libgcc'
710
 
711
  # Now, export this to all the little Makefiles....
712
  AC_SUBST(GLIBCXX_INCLUDES)
713
  AC_SUBST(TOPLEVEL_INCLUDES)
714
])
715
 
716
 
717
dnl
718
dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
719
dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
720
dnl
721
dnl Substs:
722
dnl  OPTIMIZE_CXXFLAGS
723
dnl  WARN_FLAGS
724
dnl
725
AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
726
  # Optimization flags that are probably a good idea for thrill-seekers. Just
727
  # uncomment the lines below and make, everything else is ready to go...
728
  # Alternatively OPTIMIZE_CXXFLAGS can be set in configure.host.
729
  # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
730
  AC_SUBST(OPTIMIZE_CXXFLAGS)
731
 
732
  WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi'
733
  AC_SUBST(WARN_FLAGS)
734
])
735
 
736
 
737
dnl
738
dnl All installation directory information is determined here.
739
dnl
740
dnl Substs:
741
dnl  gxx_install_dir
742
dnl  glibcxx_prefixdir
743
dnl  glibcxx_toolexecdir
744
dnl  glibcxx_toolexeclibdir
745
dnl
746
dnl Assumes cross_compiling bits already done, and with_cross_host in
747
dnl particular.
748
dnl
749
dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir.
750
dnl config/gxx-include-dir.m4 must be kept consistant with this as well.
751
AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
752
  glibcxx_toolexecdir=no
753
  glibcxx_toolexeclibdir=no
754
  glibcxx_prefixdir=$prefix
755
 
756
  AC_MSG_CHECKING([for gxx-include-dir])
757
  AC_ARG_WITH([gxx-include-dir],
758
    AC_HELP_STRING([--with-gxx-include-dir=DIR],
759
                   [installation directory for include files]),
760
    [case "$withval" in
761
      yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
762
      no)  gxx_include_dir=no ;;
763
      *)   gxx_include_dir=$withval ;;
764
     esac],
765
    [gxx_include_dir=no])
766
  AC_MSG_RESULT($gxx_include_dir)
767
 
768
  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
769
  AC_ARG_ENABLE([version-specific-runtime-libs],
770
    AC_HELP_STRING([--enable-version-specific-runtime-libs],
771
                   [Specify that runtime libraries should be installed in a compiler-specific directory]),
772
    [case "$enableval" in
773
      yes) version_specific_libs=yes ;;
774
      no)  version_specific_libs=no ;;
775
      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
776
     esac],
777
    [version_specific_libs=no])
778
  AC_MSG_RESULT($version_specific_libs)
779
 
780
  # Default case for install directory for include files.
781
  if test $version_specific_libs = no && test $gxx_include_dir = no; then
782
    gxx_include_dir='include/c++/${gcc_version}'
783
    if test -n "$with_cross_host" &&
784
       test x"$with_cross_host" != x"no"; then
785
      gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir"
786
    else
787
      gxx_include_dir='${prefix}/'"$gxx_include_dir"
788
    fi
789
  fi
790
 
791
  # Version-specific runtime libs processing.
792
  if test $version_specific_libs = yes; then
793
    # Need the gcc compiler version to know where to install libraries
794
    # and header files if --enable-version-specific-runtime-libs option
795
    # is selected.  FIXME: these variables are misnamed, there are
796
    # no executables installed in _toolexecdir or _toolexeclibdir.
797
    if test x"$gxx_include_dir" = x"no"; then
798
      gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++'
799
    fi
800
    glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
801
    glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
802
  fi
803
 
804
  # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
805
  # Install a library built with a cross compiler in tooldir, not libdir.
806
  if test x"$glibcxx_toolexecdir" = x"no"; then
807
    if test -n "$with_cross_host" &&
808
       test x"$with_cross_host" != x"no"; then
809
      glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
810
      glibcxx_toolexeclibdir='${toolexecdir}/lib'
811
    else
812
      glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
813
      glibcxx_toolexeclibdir='${libdir}'
814
    fi
815
    multi_os_directory=`$CXX -print-multi-os-directory`
816
    case $multi_os_directory in
817
      .) ;; # Avoid trailing /.
818
      *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
819
    esac
820
  fi
821
 
822
  AC_MSG_CHECKING([for install location])
823
  AC_MSG_RESULT($gxx_include_dir)
824
 
825
  AC_SUBST(glibcxx_prefixdir)
826
  AC_SUBST(gxx_include_dir)
827
  AC_SUBST(glibcxx_toolexecdir)
828
  AC_SUBST(glibcxx_toolexeclibdir)
829
])
830
 
831
 
832
dnl
833
dnl GLIBCXX_ENABLE
834
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
835
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
836
dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
837
dnl
838
dnl See docs/html/17_intro/configury.html#enable for documentation.
839
dnl
840
m4_define([GLIBCXX_ENABLE],[dnl
841
m4_define([_g_switch],[--enable-$1])dnl
842
m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
843
 AC_ARG_ENABLE([$1],m4_dquote(_g_help),
844
  m4_bmatch([$5],
845
   [^permit ],
846
     [[
847
      case "$enableval" in
848
       m4_bpatsubst([$5],[permit ])) ;;
849
       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
850
          dnl Idea for future:  generate a URL pointing to
851
          dnl "onlinedocs/configopts.html#whatever"
852
      esac
853
     ]],
854
   [^$],
855
     [[
856
      case "$enableval" in
857
       yes|no) ;;
858
       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
859
      esac
860
     ]],
861
   [[$5]]),
862
  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
863
m4_undefine([_g_switch])dnl
864
m4_undefine([_g_help])dnl
865
])
866
 
867
 
868
dnl
869
dnl Check for ISO/IEC 9899:1999 "C99" support.
870
dnl
871
dnl --enable-c99 defines _GLIBCXX_USE_C99
872
dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
873
dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
874
dnl       Where DEFAULT is either `yes' or `no'.
875
dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
876
dnl
877
AC_DEFUN([GLIBCXX_ENABLE_C99], [
878
  GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
879
 
880
  if test x"$enable_c99" = x"yes"; then
881
 
882
  AC_LANG_SAVE
883
  AC_LANG_CPLUSPLUS
884
 
885
  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
886
  # undefined and fake C99 facilities - like pre-standard snprintf - may be
887
  # spuriously enabled.
888
  # Long term, -std=c++0x could be even better, could manage to explicitely
889
  # request C99 facilities to the underlying C headers.
890
  ac_save_CXXFLAGS="$CXXFLAGS"
891
  CXXFLAGS="$CXXFLAGS -std=c++98"
892
  ac_save_LIBS="$LIBS"
893
  ac_save_gcc_no_link="$gcc_no_link"
894
 
895
  if test x$gcc_no_link != xyes; then
896
    # Use -fno-exceptions to that the C driver can link these tests without
897
    # hitting undefined references to personality routines.
898
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
899
    AC_CHECK_LIB(m, sin, [
900
      LIBS="$LIBS -lm"
901
    ], [
902
      # Use the default compile-only tests in GCC_TRY_COMPILE_OR_LINK
903
      gcc_no_link=yes
904
    ])
905
  fi
906
 
907
  # Check for the existence of <math.h> functions used if C99 is enabled.
908
  AC_MSG_CHECKING([for ISO C99 support in <math.h>])
909
  AC_CACHE_VAL(glibcxx_cv_c99_math, [
910
  GCC_TRY_COMPILE_OR_LINK(
911
     [#include <math.h>
912
      volatile double d1, d2;
913
      volatile int i;],
914
     [i = fpclassify(d1);
915
      i = isfinite(d1);
916
      i = isinf(d1);
917
      i = isnan(d1);
918
      i = isnormal(d1);
919
      i = signbit(d1);
920
      i = isgreater(d1, d2);
921
      i = isgreaterequal(d1, d2);
922
      i = isless(d1, d2);
923
      i = islessequal(d1, d2);
924
      i = islessgreater(d1, d2);
925
      i = islessgreater(d1, d2);
926
      i = isunordered(d1, d2);
927
     ],[glibcxx_cv_c99_math=yes], [glibcxx_cv_c99_math=no])
928
  ])
929
  AC_MSG_RESULT($glibcxx_cv_c99_math)
930
  if test x"$glibcxx_cv_c99_math" = x"yes"; then
931
    AC_DEFINE(_GLIBCXX_USE_C99_MATH, 1,
932
              [Define if C99 functions or macros in <math.h> should be imported
933
              in <cmath> in namespace std.])
934
  fi
935
 
936
  # Check for the existence of <complex.h> complex math functions.
937
  # This is necessary even though libstdc++ uses the builtin versions
938
  # of these functions, because if the builtin cannot be used, a reference
939
  # to the library function is emitted.
940
  AC_CHECK_HEADERS(tgmath.h, ac_has_tgmath_h=yes, ac_has_tgmath_h=no)
941
  AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
942
  glibcxx_cv_c99_complex=no;
943
  if test x"$ac_has_complex_h" = x"yes"; then
944
    AC_MSG_CHECKING([for ISO C99 support in <complex.h>])
945
    GCC_TRY_COMPILE_OR_LINK(
946
       [#include <complex.h>
947
        typedef __complex__ float float_type;
948
        typedef __complex__ double double_type;
949
        typedef __complex__ long double ld_type;
950
        volatile float_type tmpf;
951
        volatile double_type tmpd;
952
        volatile ld_type tmpld;
953
        volatile float f;
954
        volatile double d;
955
        volatile long double ld;],
956
       [f = cabsf(tmpf);
957
        f = cargf(tmpf);
958
        tmpf = ccosf(tmpf);
959
        tmpf = ccoshf(tmpf);
960
        tmpf = cexpf(tmpf);
961
        tmpf = clogf(tmpf);
962
        tmpf = csinf(tmpf);
963
        tmpf = csinhf(tmpf);
964
        tmpf = csqrtf(tmpf);
965
        tmpf = ctanf(tmpf);
966
        tmpf = ctanhf(tmpf);
967
        tmpf = cpowf(tmpf, tmpf);
968
        tmpf = cprojf(tmpf);
969
        d = cabs(tmpd);
970
        d = carg(tmpd);
971
        tmpd = ccos(tmpd);
972
        tmpd = ccosh(tmpd);
973
        tmpd = cexp(tmpd);
974
        tmpd = clog(tmpd);
975
        tmpd = csin(tmpd);
976
        tmpd = csinh(tmpd);
977
        tmpd = csqrt(tmpd);
978
        tmpd = ctan(tmpd);
979
        tmpd = ctanh(tmpd);
980
        tmpd = cpow(tmpd, tmpd);
981
        tmpd = cproj(tmpd);
982
        ld = cabsl(tmpld);
983
        ld = cargl(tmpld);
984
        tmpld = ccosl(tmpld);
985
        tmpld = ccoshl(tmpld);
986
        tmpld = cexpl(tmpld);
987
        tmpld = clogl(tmpld);
988
        tmpld = csinl(tmpld);
989
        tmpld = csinhl(tmpld);
990
        tmpld = csqrtl(tmpld);
991
        tmpld = ctanl(tmpld);
992
        tmpld = ctanhl(tmpld);
993
        tmpld = cpowl(tmpld, tmpld);
994
        tmpld = cprojl(tmpld);
995
       ],[glibcxx_cv_c99_complex=yes], [glibcxx_cv_c99_complex=no])
996
  fi
997
  AC_MSG_RESULT($glibcxx_cv_c99_complex)
998
  if test x"$glibcxx_cv_c99_complex" = x"yes"; then
999
    AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX, 1,
1000
              [Define if C99 functions in <complex.h> should be used in
1001
              <complex>. Using compiler builtins for these functions requires
1002
              corresponding C99 library functions to be present.])
1003
  fi
1004
 
1005
  # Check for the existence in <stdio.h> of vscanf, et. al.
1006
  AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
1007
  AC_CACHE_VAL(glibcxx_cv_c99_stdio, [
1008
  GCC_TRY_COMPILE_OR_LINK(
1009
     [#include <stdio.h>
1010
      #include <stdarg.h>
1011
      void foo(char* fmt, ...)
1012
      {
1013
        va_list args; va_start(args, fmt);
1014
        vfscanf(stderr, "%i", args);
1015
        vscanf("%i", args);
1016
        vsnprintf(fmt, 0, "%i", args);
1017
        vsscanf(fmt, "%i", args);
1018
      }],
1019
     [snprintf("12", 0, "%i");],
1020
     [glibcxx_cv_c99_stdio=yes], [glibcxx_cv_c99_stdio=no])
1021
  ])
1022
  AC_MSG_RESULT($glibcxx_cv_c99_stdio)
1023
 
1024
  # Check for the existence in <stdlib.h> of lldiv_t, et. al.
1025
  AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
1026
  AC_CACHE_VAL(glibcxx_cv_c99_stdlib, [
1027
  GCC_TRY_COMPILE_OR_LINK(
1028
     [#include <stdlib.h>
1029
      volatile float f;
1030
      volatile long double ld;
1031
      volatile unsigned long long ll;
1032
      lldiv_t mydivt;],
1033
     [char* tmp;
1034
      f = strtof("gnu", &tmp);
1035
      ld = strtold("gnu", &tmp);
1036
      ll = strtoll("gnu", &tmp, 10);
1037
      ll = strtoull("gnu", &tmp, 10);
1038
      ll = llabs(10);
1039
      mydivt = lldiv(10,1);
1040
      ll = mydivt.quot;
1041
      ll = mydivt.rem;
1042
      ll = atoll("10");
1043
      _Exit(0);
1044
      ],[glibcxx_cv_c99_stdlib=yes], [glibcxx_cv_c99_stdlib=no])
1045
  ])
1046
  AC_MSG_RESULT($glibcxx_cv_c99_stdlib)
1047
 
1048
  # Check for the existence in <wchar.h> of wcstold, etc.
1049
  glibcxx_cv_c99_wchar=no;
1050
  if test x"$ac_has_wchar_h" = xyes &&
1051
     test x"$ac_has_wctype_h" = xyes; then
1052
    AC_MSG_CHECKING([for ISO C99 support in <wchar.h>])
1053
    AC_TRY_COMPILE([#include <wchar.h>
1054
                    namespace test
1055
                    {
1056
                      using ::wcstold;
1057
                      using ::wcstoll;
1058
                      using ::wcstoull;
1059
                    }
1060
                   ],[],[glibcxx_cv_c99_wchar=yes], [glibcxx_cv_c99_wchar=no])
1061
 
1062
    # Checks for wide character functions that may not be present.
1063
    # Injection of these is wrapped with guard macros.
1064
    # NB: only put functions here, instead of immediately above, if
1065
    # absolutely necessary.
1066
    AC_TRY_COMPILE([#include <wchar.h>
1067
                    namespace test { using ::vfwscanf; } ], [],
1068
                   [AC_DEFINE(HAVE_VFWSCANF,1,
1069
                        [Defined if vfwscanf exists.])],[])
1070
 
1071
    AC_TRY_COMPILE([#include <wchar.h>
1072
                    namespace test { using ::vswscanf; } ], [],
1073
                   [AC_DEFINE(HAVE_VSWSCANF,1,
1074
                        [Defined if vswscanf exists.])],[])
1075
 
1076
    AC_TRY_COMPILE([#include <wchar.h>
1077
                    namespace test { using ::vwscanf; } ], [],
1078
                   [AC_DEFINE(HAVE_VWSCANF,1,[Defined if vwscanf exists.])],[])
1079
 
1080
    AC_TRY_COMPILE([#include <wchar.h>
1081
                    namespace test { using ::wcstof; } ], [],
1082
                   [AC_DEFINE(HAVE_WCSTOF,1,[Defined if wcstof exists.])],[])
1083
 
1084
    AC_TRY_COMPILE([#include <wctype.h>],
1085
                   [ wint_t t; int i = iswblank(t);],
1086
                   [AC_DEFINE(HAVE_ISWBLANK,1,
1087
                        [Defined if iswblank exists.])],[])
1088
 
1089
    AC_MSG_RESULT($glibcxx_cv_c99_wchar)
1090
  fi
1091
 
1092
  # Option parsed, now set things appropriately.
1093
  if test x"$glibcxx_cv_c99_math" = x"no" ||
1094
     test x"$glibcxx_cv_c99_complex" = x"no" ||
1095
     test x"$glibcxx_cv_c99_stdio" = x"no" ||
1096
     test x"$glibcxx_cv_c99_stdlib" = x"no" ||
1097
     test x"$glibcxx_cv_c99_wchar" = x"no"; then
1098
    enable_c99=no;
1099
  else
1100
    AC_DEFINE(_GLIBCXX_USE_C99, 1,
1101
    [Define if C99 functions or macros from <wchar.h>, <math.h>,
1102
    <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
1103
  fi
1104
 
1105
  gcc_no_link="$ac_save_gcc_no_link"
1106
  LIBS="$ac_save_LIBS"
1107
  CXXFLAGS="$ac_save_CXXFLAGS"
1108
  AC_LANG_RESTORE
1109
  fi
1110
 
1111
  AC_MSG_CHECKING([for fully enabled ISO C99 support])
1112
  AC_MSG_RESULT($enable_c99)
1113
])
1114
 
1115
 
1116
dnl
1117
dnl Check for clock_gettime, nanosleep and sched_yield, used in the
1118
dnl implementation of 20.8.5 [time.clock], and 30.2.2 [thread.thread.this]
1119
dnl in the current C++0x working draft.
1120
dnl
1121
dnl --enable-libstdcxx-time
1122
dnl --enable-libstdcxx-time=yes
1123
dnl        checks for the availability of monotonic and realtime clocks,
1124
dnl        nanosleep and sched_yield in libc and libposix4 and, in case, links
1125
dnl       the latter
1126
dnl --enable-libstdcxx-time=rt
1127
dnl        also searches (and, in case, links) librt.  Note that this is
1128
dnl        not always desirable because, in glibc, for example, in turn it
1129
dnl        triggers the linking of libpthread too, which activates locking,
1130
dnl        a large overhead for single-thread programs.
1131
dnl --enable-libstdcxx-time=no
1132
dnl --disable-libstdcxx-time
1133
dnl        disables the checks completely
1134
dnl
1135
AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
1136
 
1137
  AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
1138
  GLIBCXX_ENABLE(libstdcxx-time,$1,[[[=KIND]]],
1139
    [use KIND for check type],
1140
    [permit yes|no|rt])
1141
 
1142
  AC_LANG_SAVE
1143
  AC_LANG_CPLUSPLUS
1144
  ac_save_CXXFLAGS="$CXXFLAGS"
1145
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
1146
  ac_save_LIBS="$LIBS"
1147
 
1148
  ac_has_clock_monotonic=no
1149
  ac_has_clock_realtime=no
1150
  AC_MSG_RESULT($enable_libstdcxx_time)
1151
 
1152
  if test x"$enable_libstdcxx_time" != x"no"; then
1153
 
1154
    if test x"$enable_libstdcxx_time" = x"rt"; then
1155
      AC_SEARCH_LIBS(clock_gettime, [rt posix4])
1156
      AC_SEARCH_LIBS(nanosleep, [rt posix4])
1157
    else
1158
      AC_SEARCH_LIBS(clock_gettime, [posix4])
1159
      AC_SEARCH_LIBS(nanosleep, [posix4])
1160
    fi
1161
 
1162
    case "$ac_cv_search_clock_gettime" in
1163
      -l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
1164
      ;;
1165
    esac
1166
    case "$ac_cv_search_nanosleep" in
1167
      -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
1168
      ;;
1169
    esac
1170
 
1171
    AC_SEARCH_LIBS(sched_yield, [rt posix4])
1172
 
1173
    case "$ac_cv_search_sched_yield" in
1174
      -lposix4*)
1175
      GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1176
      AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1177
                [ Defined if sched_yield is available. ])
1178
      ;;
1179
      -lrt*)
1180
      if test x"$enable_libstdcxx_time" = x"rt"; then
1181
        GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
1182
        AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1183
                  [ Defined if sched_yield is available. ])
1184
      fi
1185
      ;;
1186
      *)
1187
      AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
1188
                [ Defined if sched_yield is available. ])
1189
      ;;
1190
    esac
1191
 
1192
    AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
1193
 
1194
    if test x"$ac_has_unistd_h" = x"yes"; then
1195
      AC_MSG_CHECKING([for monotonic clock])
1196
      AC_TRY_LINK(
1197
        [#include <unistd.h>
1198
         #include <time.h>
1199
        ],
1200
        [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
1201
          timespec tp;
1202
         #endif
1203
          clock_gettime(CLOCK_MONOTONIC, &tp);
1204
        ], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
1205
 
1206
      AC_MSG_RESULT($ac_has_clock_monotonic)
1207
 
1208
      AC_MSG_CHECKING([for realtime clock])
1209
      AC_TRY_LINK(
1210
        [#include <unistd.h>
1211
         #include <time.h>
1212
        ],
1213
        [#if _POSIX_TIMERS > 0
1214
          timespec tp;
1215
         #endif
1216
          clock_gettime(CLOCK_REALTIME, &tp);
1217
        ], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
1218
 
1219
      AC_MSG_RESULT($ac_has_clock_realtime)
1220
 
1221
      AC_MSG_CHECKING([for nanosleep])
1222
      AC_TRY_LINK(
1223
        [#include <unistd.h>
1224
         #include <time.h>
1225
        ],
1226
        [#if _POSIX_TIMERS > 0
1227
          timespec tp;
1228
         #endif
1229
          nanosleep(&tp, 0);
1230
        ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
1231
 
1232
      AC_MSG_RESULT($ac_has_nanosleep)
1233
    fi
1234
  fi
1235
 
1236
  if test x"$ac_has_clock_monotonic" = x"yes"; then
1237
    AC_DEFINE(_GLIBCXX_USE_CLOCK_MONOTONIC, 1,
1238
      [ Defined if clock_gettime has monotonic clock support. ])
1239
  fi
1240
 
1241
  if test x"$ac_has_clock_realtime" = x"yes"; then
1242
    AC_DEFINE(_GLIBCXX_USE_CLOCK_REALTIME, 1,
1243
      [ Defined if clock_gettime has realtime clock support. ])
1244
  fi
1245
 
1246
  if test x"$ac_has_nanosleep" = x"yes"; then
1247
    AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
1248
      [ Defined if nanosleep is available. ])
1249
  fi
1250
 
1251
  AC_SUBST(GLIBCXX_LIBS)
1252
 
1253
  CXXFLAGS="$ac_save_CXXFLAGS"
1254
  LIBS="$ac_save_LIBS"
1255
  AC_LANG_RESTORE
1256
])
1257
 
1258
dnl
1259
dnl Check for gettimeofday, used in the implementation of 20.8.5
1260
dnl [time.clock] in the current C++0x working draft.
1261
dnl
1262
AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
1263
 
1264
  AC_MSG_CHECKING([for gettimeofday])
1265
 
1266
  AC_LANG_SAVE
1267
  AC_LANG_CPLUSPLUS
1268
  ac_save_CXXFLAGS="$CXXFLAGS"
1269
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
1270
 
1271
  ac_has_gettimeofday=no;
1272
  AC_CHECK_HEADERS(sys/time.h, ac_has_sys_time_h=yes, ac_has_sys_time_h=no)
1273
  if test x"$ac_has_sys_time_h" = x"yes"; then
1274
    AC_MSG_CHECKING([for gettimeofday])
1275
    GCC_TRY_COMPILE_OR_LINK([#include <sys/time.h>],
1276
      [timeval tv; gettimeofday(&tv, 0);],
1277
      [ac_has_gettimeofday=yes], [ac_has_gettimeofday=no])
1278
 
1279
    AC_MSG_RESULT($ac_has_gettimeofday)
1280
  fi
1281
 
1282
  if test x"$ac_has_gettimeofday" = x"yes"; then
1283
    AC_DEFINE(_GLIBCXX_USE_GETTIMEOFDAY, 1,
1284
      [ Defined if gettimeofday is available. ])
1285
  fi
1286
 
1287
  CXXFLAGS="$ac_save_CXXFLAGS"
1288
  AC_LANG_RESTORE
1289
])
1290
 
1291
dnl
1292
dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
1293
dnl facilities in Chapter 8, "C compatibility".
1294
dnl
1295
AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
1296
 
1297
  AC_LANG_SAVE
1298
  AC_LANG_CPLUSPLUS
1299
 
1300
  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
1301
  # undefined and fake C99 facilities may be spuriously enabled.
1302
  ac_save_CXXFLAGS="$CXXFLAGS"
1303
  CXXFLAGS="$CXXFLAGS -std=c++98"
1304
 
1305
  # Check for the existence of <complex.h> complex math functions used
1306
  # by tr1/complex.
1307
  AC_CHECK_HEADERS(complex.h, ac_has_complex_h=yes, ac_has_complex_h=no)
1308
  ac_c99_complex_tr1=no;
1309
  if test x"$ac_has_complex_h" = x"yes"; then
1310
    AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
1311
    AC_TRY_COMPILE([#include <complex.h>],
1312
                   [typedef __complex__ float float_type; float_type tmpf;
1313
                    cacosf(tmpf);
1314
                    casinf(tmpf);
1315
                    catanf(tmpf);
1316
                    cacoshf(tmpf);
1317
                    casinhf(tmpf);
1318
                    catanhf(tmpf);
1319
                    typedef __complex__ double double_type; double_type tmpd;
1320
                    cacos(tmpd);
1321
                    casin(tmpd);
1322
                    catan(tmpd);
1323
                    cacosh(tmpd);
1324
                    casinh(tmpd);
1325
                    catanh(tmpd);
1326
                    typedef __complex__ long double ld_type; ld_type tmpld;
1327
                    cacosl(tmpld);
1328
                    casinl(tmpld);
1329
                    catanl(tmpld);
1330
                    cacoshl(tmpld);
1331
                    casinhl(tmpld);
1332
                    catanhl(tmpld);
1333
                   ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
1334
  fi
1335
  AC_MSG_RESULT($ac_c99_complex_tr1)
1336
  if test x"$ac_c99_complex_tr1" = x"yes"; then
1337
    AC_DEFINE(_GLIBCXX_USE_C99_COMPLEX_TR1, 1,
1338
              [Define if C99 functions in <complex.h> should be used in
1339
              <tr1/complex>. Using compiler builtins for these functions
1340
              requires corresponding C99 library functions to be present.])
1341
  fi
1342
 
1343
  # Check for the existence of <ctype.h> functions.
1344
  AC_MSG_CHECKING([for ISO C99 support to TR1 in <ctype.h>])
1345
  AC_CACHE_VAL(glibcxx_cv_c99_ctype_tr1, [
1346
  AC_TRY_COMPILE([#include <ctype.h>],
1347
                 [int ch;
1348
                  int ret;
1349
                  ret = isblank(ch);
1350
                 ],[glibcxx_cv_c99_ctype_tr1=yes],
1351
                   [glibcxx_cv_c99_ctype_tr1=no])
1352
  ])
1353
  AC_MSG_RESULT($glibcxx_cv_c99_ctype_tr1)
1354
  if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
1355
    AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
1356
              [Define if C99 functions in <ctype.h> should be imported in
1357
              <tr1/cctype> in namespace std::tr1.])
1358
  fi
1359
 
1360
  # Check for the existence of <fenv.h> functions.
1361
  AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
1362
  ac_c99_fenv_tr1=no;
1363
  if test x"$ac_has_fenv_h" = x"yes"; then
1364
    AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
1365
    AC_TRY_COMPILE([#include <fenv.h>],
1366
                   [int except, mode;
1367
                    fexcept_t* pflag;
1368
                    fenv_t* penv;
1369
                    int ret;
1370
                    ret = feclearexcept(except);
1371
                    ret = fegetexceptflag(pflag, except);
1372
                    ret = feraiseexcept(except);
1373
                    ret = fesetexceptflag(pflag, except);
1374
                    ret = fetestexcept(except);
1375
                    ret = fegetround();
1376
                    ret = fesetround(mode);
1377
                    ret = fegetenv(penv);
1378
                    ret = feholdexcept(penv);
1379
                    ret = fesetenv(penv);
1380
                    ret = feupdateenv(penv);
1381
                   ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
1382
  fi
1383
  AC_MSG_RESULT($ac_c99_fenv_tr1)
1384
  if test x"$ac_c99_fenv_tr1" = x"yes"; then
1385
    AC_DEFINE(_GLIBCXX_USE_C99_FENV_TR1, 1,
1386
              [Define if C99 functions in <fenv.h> should be imported in
1387
              <tr1/cfenv> in namespace std::tr1.])
1388
  fi
1389
 
1390
  # Check for the existence of <stdint.h> types.
1391
  AC_MSG_CHECKING([for ISO C99 support to TR1 in <stdint.h>])
1392
  AC_CACHE_VAL(glibcxx_cv_c99_stdint_tr1, [
1393
  AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
1394
                  #define __STDC_CONSTANT_MACROS
1395
                  #include <stdint.h>],
1396
                 [typedef int8_t          my_int8_t;
1397
                  my_int8_t               i8 = INT8_MIN;
1398
                  i8 = INT8_MAX;
1399
                  typedef int16_t         my_int16_t;
1400
                  my_int16_t              i16 = INT16_MIN;
1401
                  i16 = INT16_MAX;
1402
                  typedef int32_t         my_int32_t;
1403
                  my_int32_t              i32 = INT32_MIN;
1404
                  i32 = INT32_MAX;
1405
                  typedef int64_t         my_int64_t;
1406
                  my_int64_t              i64 = INT64_MIN;
1407
                  i64 = INT64_MAX;
1408
                  typedef int_fast8_t     my_int_fast8_t;
1409
                  my_int_fast8_t          if8 = INT_FAST8_MIN;
1410
                  if8 = INT_FAST8_MAX;
1411
                  typedef int_fast16_t    my_int_fast16_t;
1412
                  my_int_fast16_t         if16 = INT_FAST16_MIN;
1413
                  if16 = INT_FAST16_MAX;
1414
                  typedef int_fast32_t    my_int_fast32_t;
1415
                  my_int_fast32_t         if32 = INT_FAST32_MIN;
1416
                  if32 = INT_FAST32_MAX;
1417
                  typedef int_fast64_t    my_int_fast64_t;
1418
                  my_int_fast64_t         if64 = INT_FAST64_MIN;
1419
                  if64 = INT_FAST64_MAX;
1420
                  typedef int_least8_t    my_int_least8_t;
1421
                  my_int_least8_t         il8 = INT_LEAST8_MIN;
1422
                  il8 = INT_LEAST8_MAX;
1423
                  typedef int_least16_t   my_int_least16_t;
1424
                  my_int_least16_t        il16 = INT_LEAST16_MIN;
1425
                  il16 = INT_LEAST16_MAX;
1426
                  typedef int_least32_t   my_int_least32_t;
1427
                  my_int_least32_t        il32 = INT_LEAST32_MIN;
1428
                  il32 = INT_LEAST32_MAX;
1429
                  typedef int_least64_t   my_int_least64_t;
1430
                  my_int_least64_t        il64 = INT_LEAST64_MIN;
1431
                  il64 = INT_LEAST64_MAX;
1432
                  typedef intmax_t        my_intmax_t;
1433
                  my_intmax_t             im = INTMAX_MAX;
1434
                  im = INTMAX_MIN;
1435
                  typedef intptr_t        my_intptr_t;
1436
                  my_intptr_t             ip = INTPTR_MAX;
1437
                  ip = INTPTR_MIN;
1438
                  typedef uint8_t         my_uint8_t;
1439
                  my_uint8_t              ui8 = UINT8_MAX;
1440
                  ui8 = UINT8_MAX;
1441
                  typedef uint16_t        my_uint16_t;
1442
                  my_uint16_t             ui16 = UINT16_MAX;
1443
                  ui16 = UINT16_MAX;
1444
                  typedef uint32_t        my_uint32_t;
1445
                  my_uint32_t             ui32 = UINT32_MAX;
1446
                  ui32 = UINT32_MAX;
1447
                  typedef uint64_t        my_uint64_t;
1448
                  my_uint64_t             ui64 = UINT64_MAX;
1449
                  ui64 = UINT64_MAX;
1450
                  typedef uint_fast8_t    my_uint_fast8_t;
1451
                  my_uint_fast8_t         uif8 = UINT_FAST8_MAX;
1452
                  uif8 = UINT_FAST8_MAX;
1453
                  typedef uint_fast16_t   my_uint_fast16_t;
1454
                  my_uint_fast16_t        uif16 = UINT_FAST16_MAX;
1455
                  uif16 = UINT_FAST16_MAX;
1456
                  typedef uint_fast32_t   my_uint_fast32_t;
1457
                  my_uint_fast32_t        uif32 = UINT_FAST32_MAX;
1458
                  uif32 = UINT_FAST32_MAX;
1459
                  typedef uint_fast64_t   my_uint_fast64_t;
1460
                  my_uint_fast64_t        uif64 = UINT_FAST64_MAX;
1461
                  uif64 = UINT_FAST64_MAX;
1462
                  typedef uint_least8_t   my_uint_least8_t;
1463
                  my_uint_least8_t        uil8 = UINT_LEAST8_MAX;
1464
                  uil8 = UINT_LEAST8_MAX;
1465
                  typedef uint_least16_t  my_uint_least16_t;
1466
                  my_uint_least16_t       uil16 = UINT_LEAST16_MAX;
1467
                  uil16 = UINT_LEAST16_MAX;
1468
                  typedef uint_least32_t  my_uint_least32_t;
1469
                  my_uint_least32_t       uil32 = UINT_LEAST32_MAX;
1470
                  uil32 = UINT_LEAST32_MAX;
1471
                  typedef uint_least64_t  my_uint_least64_t;
1472
                  my_uint_least64_t       uil64 = UINT_LEAST64_MAX;
1473
                  uil64 = UINT_LEAST64_MAX;
1474
                  typedef uintmax_t       my_uintmax_t;
1475
                  my_uintmax_t            uim = UINTMAX_MAX;
1476
                  uim = UINTMAX_MAX;
1477
                  typedef uintptr_t       my_uintptr_t;
1478
                  my_uintptr_t            uip = UINTPTR_MAX;
1479
                  uip = UINTPTR_MAX;
1480
                 ],[glibcxx_cv_c99_stdint_tr1=yes],
1481
                   [glibcxx_cv_c99_stdint_tr1=no])
1482
  ])
1483
  AC_MSG_RESULT($glibcxx_cv_c99_stdint_tr1)
1484
  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1485
    AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
1486
              [Define if C99 types in <stdint.h> should be imported in
1487
              <tr1/cstdint> in namespace std::tr1.])
1488
  fi
1489
 
1490
  # Check for the existence of <math.h> functions.
1491
  AC_MSG_CHECKING([for ISO C99 support to TR1 in <math.h>])
1492
  AC_CACHE_VAL(glibcxx_cv_c99_math_tr1, [
1493
  AC_TRY_COMPILE([#include <math.h>],
1494
                 [typedef double_t  my_double_t;
1495
                  typedef float_t   my_float_t;
1496
                  acosh(0.0);
1497
                  acoshf(0.0f);
1498
                  acoshl(0.0l);
1499
                  asinh(0.0);
1500
                  asinhf(0.0f);
1501
                  asinhl(0.0l);
1502
                  atanh(0.0);
1503
                  atanhf(0.0f);
1504
                  atanhl(0.0l);
1505
                  cbrt(0.0);
1506
                  cbrtf(0.0f);
1507
                  cbrtl(0.0l);
1508
                  copysign(0.0, 0.0);
1509
                  copysignf(0.0f, 0.0f);
1510
                  copysignl(0.0l, 0.0l);
1511
                  erf(0.0);
1512
                  erff(0.0f);
1513
                  erfl(0.0l);
1514
                  erfc(0.0);
1515
                  erfcf(0.0f);
1516
                  erfcl(0.0l);
1517
                  exp2(0.0);
1518
                  exp2f(0.0f);
1519
                  exp2l(0.0l);
1520
                  expm1(0.0);
1521
                  expm1f(0.0f);
1522
                  expm1l(0.0l);
1523
                  fdim(0.0, 0.0);
1524
                  fdimf(0.0f, 0.0f);
1525
                  fdiml(0.0l, 0.0l);
1526
                  fma(0.0, 0.0, 0.0);
1527
                  fmaf(0.0f, 0.0f, 0.0f);
1528
                  fmal(0.0l, 0.0l, 0.0l);
1529
                  fmax(0.0, 0.0);
1530
                  fmaxf(0.0f, 0.0f);
1531
                  fmaxl(0.0l, 0.0l);
1532
                  fmin(0.0, 0.0);
1533
                  fminf(0.0f, 0.0f);
1534
                  fminl(0.0l, 0.0l);
1535
                  hypot(0.0, 0.0);
1536
                  hypotf(0.0f, 0.0f);
1537
                  hypotl(0.0l, 0.0l);
1538
                  ilogb(0.0);
1539
                  ilogbf(0.0f);
1540
                  ilogbl(0.0l);
1541
                  lgamma(0.0);
1542
                  lgammaf(0.0f);
1543
                  lgammal(0.0l);
1544
                  llrint(0.0);
1545
                  llrintf(0.0f);
1546
                  llrintl(0.0l);
1547
                  llround(0.0);
1548
                  llroundf(0.0f);
1549
                  llroundl(0.0l);
1550
                  log1p(0.0);
1551
                  log1pf(0.0f);
1552
                  log1pl(0.0l);
1553
                  log2(0.0);
1554
                  log2f(0.0f);
1555
                  log2l(0.0l);
1556
                  logb(0.0);
1557
                  logbf(0.0f);
1558
                  logbl(0.0l);
1559
                  lrint(0.0);
1560
                  lrintf(0.0f);
1561
                  lrintl(0.0l);
1562
                  lround(0.0);
1563
                  lroundf(0.0f);
1564
                  lroundl(0.0l);
1565
                  nan(0);
1566
                  nanf(0);
1567
                  nanl(0);
1568
                  nearbyint(0.0);
1569
                  nearbyintf(0.0f);
1570
                  nearbyintl(0.0l);
1571
                  nextafter(0.0, 0.0);
1572
                  nextafterf(0.0f, 0.0f);
1573
                  nextafterl(0.0l, 0.0l);
1574
                  nexttoward(0.0, 0.0);
1575
                  nexttowardf(0.0f, 0.0f);
1576
                  nexttowardl(0.0l, 0.0l);
1577
                  remainder(0.0, 0.0);
1578
                  remainderf(0.0f, 0.0f);
1579
                  remainderl(0.0l, 0.0l);
1580
                  remquo(0.0, 0.0, 0);
1581
                  remquof(0.0f, 0.0f, 0);
1582
                  remquol(0.0l, 0.0l, 0);
1583
                  rint(0.0);
1584
                  rintf(0.0f);
1585
                  rintl(0.0l);
1586
                  round(0.0);
1587
                  roundf(0.0f);
1588
                  roundl(0.0l);
1589
                  scalbln(0.0, 0l);
1590
                  scalblnf(0.0f, 0l);
1591
                  scalblnl(0.0l, 0l);
1592
                  scalbn(0.0, 0);
1593
                  scalbnf(0.0f, 0);
1594
                  scalbnl(0.0l, 0);
1595
                  tgamma(0.0);
1596
                  tgammaf(0.0f);
1597
                  tgammal(0.0l);
1598
                  trunc(0.0);
1599
                  truncf(0.0f);
1600
                  truncl(0.0l);
1601
                 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
1602
  ])
1603
  AC_MSG_RESULT($glibcxx_cv_c99_math_tr1)
1604
  if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
1605
    AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
1606
              [Define if C99 functions or macros in <math.h> should be imported
1607
              in <tr1/cmath> in namespace std::tr1.])
1608
  fi
1609
 
1610
  # Check for the existence of <inttypes.h> functions (NB: doesn't make
1611
  # sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1612
  ac_c99_inttypes_tr1=no;
1613
  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1614
    AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
1615
    AC_TRY_COMPILE([#include <inttypes.h>],
1616
                   [intmax_t i, numer, denom, base;
1617
                    const char* s;
1618
                    char** endptr;
1619
                    intmax_t ret = imaxabs(i);
1620
                    imaxdiv_t dret = imaxdiv(numer, denom);
1621
                    ret = strtoimax(s, endptr, base);
1622
                    uintmax_t uret = strtoumax(s, endptr, base);
1623
                   ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
1624
  fi
1625
  AC_MSG_RESULT($ac_c99_inttypes_tr1)
1626
  if test x"$ac_c99_inttypes_tr1" = x"yes"; then
1627
    AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_TR1, 1,
1628
              [Define if C99 functions in <inttypes.h> should be imported in
1629
              <tr1/cinttypes> in namespace std::tr1.])
1630
  fi
1631
 
1632
  # Check for the existence of whcar_t <inttypes.h> functions (NB: doesn't
1633
  # make sense if the glibcxx_cv_c99_stdint_tr1 check fails, per C99, 7.8/1).
1634
  ac_c99_inttypes_wchar_t_tr1=no;
1635
  if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
1636
    AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
1637
    AC_TRY_COMPILE([#include <inttypes.h>],
1638
                   [intmax_t base;
1639
                    const wchar_t* s;
1640
                    wchar_t** endptr;
1641
                    intmax_t ret = wcstoimax(s, endptr, base);
1642
                    uintmax_t uret = wcstoumax(s, endptr, base);
1643
                   ],[ac_c99_inttypes_wchar_t_tr1=yes],
1644
                     [ac_c99_inttypes_wchar_t_tr1=no])
1645
  fi
1646
  AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
1647
  if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
1648
    AC_DEFINE(_GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1, 1,
1649
              [Define if wchar_t C99 functions in <inttypes.h> should be
1650
              imported in <tr1/cinttypes> in namespace std::tr1.])
1651
  fi
1652
 
1653
  # Check for the existence of the <stdbool.h> header.
1654
  AC_CHECK_HEADERS(stdbool.h)
1655
 
1656
  # Check for the existence of the <stdalign.h> header.
1657
  AC_CHECK_HEADERS(stdalign.h)
1658
 
1659
  CXXFLAGS="$ac_save_CXXFLAGS"
1660
  AC_LANG_RESTORE
1661
])
1662
 
1663
dnl
1664
dnl Check whether "/dev/random" and "/dev/urandom" are available for the
1665
dnl random_device of "TR1" (Chapter 5.1, "Random number generation").
1666
dnl
1667
AC_DEFUN([GLIBCXX_CHECK_RANDOM_TR1], [
1668
 
1669
  AC_MSG_CHECKING([for "/dev/random" and "/dev/urandom" for TR1 random_device])
1670
  AC_CACHE_VAL(glibcxx_cv_random_tr1, [
1671
    if test -r /dev/random && test -r /dev/urandom; then
1672
      glibcxx_cv_random_tr1=yes;
1673
    else
1674
      glibcxx_cv_random_tr1=no;
1675
    fi
1676
  ])
1677
  AC_MSG_RESULT($glibcxx_cv_random_tr1)
1678
 
1679
  if test x"$glibcxx_cv_random_tr1" = x"yes"; then
1680
    AC_DEFINE(_GLIBCXX_USE_RANDOM_TR1, 1,
1681
              [Define if /dev/random and /dev/urandom are available for
1682
               the random_device of TR1 (Chapter 5.1).])
1683
  fi
1684
 
1685
])
1686
 
1687
dnl
1688
dnl Compute the EOF, SEEK_CUR, and SEEK_END integer constants.
1689
dnl
1690
AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS], [
1691
 
1692
  AC_CACHE_CHECK([for the value of EOF], glibcxx_cv_stdio_eof, [
1693
  AC_COMPUTE_INT([glibcxx_cv_stdio_eof], [[EOF]],
1694
                 [#include <stdio.h>],
1695
                 [AC_MSG_ERROR([computing EOF failed])])
1696
  ])
1697
  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_EOF, $glibcxx_cv_stdio_eof,
1698
                     [Define to the value of the EOF integer constant.])
1699
 
1700
  AC_CACHE_CHECK([for the value of SEEK_CUR], glibcxx_cv_stdio_seek_cur, [
1701
  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_cur], [[SEEK_CUR]],
1702
                 [#include <stdio.h>],
1703
                 [AC_MSG_ERROR([computing SEEK_CUR failed])])
1704
  ])
1705
  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_CUR, $glibcxx_cv_stdio_seek_cur,
1706
                     [Define to the value of the SEEK_CUR integer constant.])
1707
 
1708
  AC_CACHE_CHECK([for the value of SEEK_END], glibcxx_cv_stdio_seek_end, [
1709
  AC_COMPUTE_INT([glibcxx_cv_stdio_seek_end], [[SEEK_END]],
1710
                 [#include <stdio.h>],
1711
                 [AC_MSG_ERROR([computing SEEK_END failed])])
1712
  ])
1713
  AC_DEFINE_UNQUOTED(_GLIBCXX_STDIO_SEEK_END, $glibcxx_cv_stdio_seek_end,
1714
                     [Define to the value of the SEEK_END integer constant.])
1715
])
1716
 
1717
dnl
1718
dnl Check whether required C++ overloads are present in <math.h>.
1719
dnl
1720
 
1721
AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
1722
 
1723
  AC_LANG_SAVE
1724
  AC_LANG_CPLUSPLUS
1725
 
1726
  case "$host" in
1727
    *-*-solaris2.*)
1728
      # Solaris 8 FCS only had an overload for double std::abs(double) in
1729
      # <iso/math_iso.h>.  Patches 111721-04 (SPARC) and 112757-01 (x86)
1730
      # introduced the full set also found from Solaris 9 onwards.
1731
      AC_MSG_CHECKING([for float std::abs(float) overload])
1732
      AC_CACHE_VAL(glibcxx_cv_abs_float, [
1733
        AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1734
          [#include <math.h>
1735
           namespace std {
1736
             inline float abs(float __x)
1737
             {  return __builtin_fabsf(__x); }
1738
           }
1739
        ])],
1740
        [glibcxx_cv_abs_float=no],
1741
        [glibcxx_cv_abs_float=yes]
1742
      )])
1743
 
1744
      # autoheader cannot handle indented templates.
1745
      AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
1746
        [/* Define if all C++ overloads are available in <math.h>.  */
1747
#if __cplusplus >= 199711L
1748
#undef __CORRECT_ISO_CPP_MATH_H_PROTO1
1749
#endif])
1750
      AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
1751
        [/* Define if only double std::abs(double) is available in <math.h>.  */
1752
#if __cplusplus >= 199711L
1753
#undef __CORRECT_ISO_CPP_MATH_H_PROTO2
1754
#endif])
1755
 
1756
      if test $glibcxx_cv_abs_float = yes; then
1757
        AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
1758
      else
1759
        AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
1760
      fi
1761
      AC_MSG_RESULT($glibcxx_cv_abs_float)
1762
      ;;
1763
  esac
1764
 
1765
  AC_LANG_RESTORE
1766
])
1767
 
1768
dnl
1769
dnl Check whether required C++ overloads are present in <stdlib.h>.
1770
dnl
1771
 
1772
AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
1773
 
1774
  AC_LANG_SAVE
1775
  AC_LANG_CPLUSPLUS
1776
 
1777
  case "$host" in
1778
    *-*-solaris2.*)
1779
      # Solaris 8 FCS lacked the overloads for long std::abs(long) and
1780
      # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>.  Patches 109607-02
1781
      # (SPARC) and 109608-02 (x86) introduced them.
1782
      AC_MSG_CHECKING([for long std::abs(long) overload])
1783
      AC_CACHE_VAL(glibcxx_cv_abs_long, [
1784
        AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1785
          [#include <stdlib.h>
1786
           namespace std {
1787
             inline long
1788
             abs(long __i) { return labs(__i); }
1789
           }
1790
        ])],
1791
        [glibcxx_cv_abs_long=no],
1792
        [glibcxx_cv_abs_long=yes]
1793
      )])
1794
 
1795
      # autoheader cannot handle indented templates.
1796
      AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
1797
        [/* Define if all C++ overloads are available in <stdlib.h>.  */
1798
#if __cplusplus >= 199711L
1799
#undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
1800
#endif])
1801
      if test $glibcxx_cv_abs_long = yes; then
1802
        AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
1803
      fi
1804
      AC_MSG_RESULT($glibcxx_cv_abs_long)
1805
      ;;
1806
  esac
1807
 
1808
  AC_LANG_RESTORE
1809
])
1810
 
1811
dnl
1812
dnl Check whether macros, etc are present for <system_error>
1813
dnl
1814
AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [
1815
 
1816
m4_pushdef([n_syserr], [1])dnl
1817
m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA,
1818
                      ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED,
1819
                      EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY,
1820
                      ECHILD, ENOSPC, EPERM,
1821
                      ETIMEDOUT, EWOULDBLOCK],
1822
[m4_pushdef([SYSERR], m4_toupper(syserr))dnl
1823
AC_MSG_CHECKING([for syserr])
1824
AC_CACHE_VAL([glibcxx_cv_system_error[]n_syserr], [
1825
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <errno.h>]],
1826
                                   [int i = syserr;])],
1827
                  [glibcxx_cv_system_error[]n_syserr=yes],
1828
                  [glibcxx_cv_system_error[]n_syserr=no])
1829
])
1830
AC_MSG_RESULT([$glibcxx_cv_system_error[]n_syserr])
1831
if test x"$glibcxx_cv_system_error[]n_syserr" = x"yes"; then
1832
  AC_DEFINE([HAVE_]SYSERR, 1, [Define if ]syserr[ exists.])
1833
fi
1834
m4_define([n_syserr], m4_incr(n_syserr))dnl
1835
m4_popdef([SYSERR])dnl
1836
])
1837
m4_popdef([n_syserr])dnl
1838
])
1839
 
1840
dnl
1841
dnl Check for what type of C headers to use.
1842
dnl
1843
dnl --enable-cheaders= [does stuff].
1844
dnl --disable-cheaders [does not do anything, really].
1845
dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
1846
dnl       Where DEFAULT is either 'c' or 'c_std' or 'c_global'.
1847
dnl
1848
AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
1849
  GLIBCXX_ENABLE(cheaders,$1,[[[=KIND]]],
1850
    [construct "C" headers for g++], [permit c|c_std|c_global])
1851
  AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
1852
 
1853
  C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1854
 
1855
  # Allow overrides to configure.host here.
1856
  if test $enable_cheaders = c_global; then
1857
     c_compatibility=yes
1858
  fi
1859
 
1860
  AC_SUBST(C_INCLUDE_DIR)
1861
  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1862
  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
1863
  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_GLOBAL, test $enable_cheaders = c_global)
1864
  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
1865
])
1866
 
1867
 
1868
dnl
1869
dnl Check for which locale library to use.  The choice is mapped to
1870
dnl a subdirectory of config/locale.
1871
dnl
1872
dnl Default is generic.
1873
dnl
1874
AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
1875
  GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
1876
    [use MODEL for target locale package],
1877
    [permit generic|gnu|ieee_1003.1-2001|newlib|yes|no|auto])
1878
 
1879
  # Deal with gettext issues.  Default to not using it (=no) until we detect
1880
  # support for it later.  Let the user turn it off via --e/d, but let that
1881
  # default to on for easier handling.
1882
  USE_NLS=no
1883
  AC_ARG_ENABLE(nls,
1884
    AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1885
    [],
1886
    [enable_nls=yes])
1887
 
1888
  # Either a known package, or "auto"
1889
  if test $enable_clocale = no || test $enable_clocale = yes; then
1890
     enable_clocale=auto
1891
  fi
1892
  enable_clocale_flag=$enable_clocale
1893
 
1894
  # Probe for locale model to use if none specified.
1895
  # Default to "generic".
1896
  if test $enable_clocale_flag = auto; then
1897
    case ${target_os} in
1898
      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
1899
        enable_clocale_flag=gnu
1900
        ;;
1901
      darwin* | freebsd*)
1902
        enable_clocale_flag=darwin
1903
        ;;
1904
      *)
1905
        if test x"$with_newlib" = x"yes"; then
1906
          enable_clocale_flag=newlib
1907
        else
1908
          enable_clocale_flag=generic
1909
        fi
1910
        ;;
1911
    esac
1912
  fi
1913
 
1914
  # Sanity check model, and test for special functionality.
1915
  if test $enable_clocale_flag = gnu; then
1916
    AC_EGREP_CPP([_GLIBCXX_ok], [
1917
    #include <features.h>
1918
    #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(__UCLIBC__)
1919
      _GLIBCXX_ok
1920
    #endif
1921
    ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1922
 
1923
    # Set it to scream when it hurts.
1924
    ac_save_CFLAGS="$CFLAGS"
1925
    CFLAGS="-Wimplicit-function-declaration -Werror"
1926
 
1927
    # Use strxfrm_l if available.
1928
    AC_TRY_COMPILE([#define _GNU_SOURCE 1
1929
                    #include <string.h>
1930
                    #include <locale.h>],
1931
                    [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
1932
                    AC_DEFINE(HAVE_STRXFRM_L, 1,
1933
                    [Define if strxfrm_l is available in <string.h>.]),)
1934
 
1935
    # Use strerror_l if available.
1936
    AC_TRY_COMPILE([#define _GNU_SOURCE 1
1937
                    #include <string.h>
1938
                    #include <locale.h>],
1939
                    [__locale_t loc; strerror_l(5, loc);],
1940
                    AC_DEFINE(HAVE_STRERROR_L, 1,
1941
                    [Define if strerror_l is available in <string.h>.]),)
1942
 
1943
    CFLAGS="$ac_save_CFLAGS"
1944
  fi
1945
 
1946
  # Perhaps use strerror_r if available, and strerror_l isn't.
1947
  ac_save_CFLAGS="$CFLAGS"
1948
  CFLAGS="-Wimplicit-function-declaration -Werror"
1949
  AC_TRY_COMPILE([#define _GNU_SOURCE 1
1950
                  #include <string.h>
1951
                  #include <locale.h>],
1952
                  [char s[128]; strerror_r(5, s, 128);],
1953
                  AC_DEFINE(HAVE_STRERROR_R, 1,
1954
                  [Define if strerror_r is available in <string.h>.]),)
1955
  CFLAGS="$ac_save_CFLAGS"
1956
 
1957
  # Set configure bits for specified locale package
1958
  AC_MSG_CHECKING([for C locale to use])
1959
  case ${enable_clocale_flag} in
1960
    generic)
1961
      AC_MSG_RESULT(generic)
1962
 
1963
      CLOCALE_H=config/locale/generic/c_locale.h
1964
      CLOCALE_CC=config/locale/generic/c_locale.cc
1965
      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1966
      CCOLLATE_CC=config/locale/generic/collate_members.cc
1967
      CCTYPE_CC=config/locale/generic/ctype_members.cc
1968
      CMESSAGES_H=config/locale/generic/messages_members.h
1969
      CMESSAGES_CC=config/locale/generic/messages_members.cc
1970
      CMONEY_CC=config/locale/generic/monetary_members.cc
1971
      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1972
      CTIME_H=config/locale/generic/time_members.h
1973
      CTIME_CC=config/locale/generic/time_members.cc
1974
      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1975
      ;;
1976
    darwin)
1977
      AC_MSG_RESULT(darwin or freebsd)
1978
 
1979
      CLOCALE_H=config/locale/generic/c_locale.h
1980
      CLOCALE_CC=config/locale/generic/c_locale.cc
1981
      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1982
      CCOLLATE_CC=config/locale/generic/collate_members.cc
1983
      CCTYPE_CC=config/locale/darwin/ctype_members.cc
1984
      CMESSAGES_H=config/locale/generic/messages_members.h
1985
      CMESSAGES_CC=config/locale/generic/messages_members.cc
1986
      CMONEY_CC=config/locale/generic/monetary_members.cc
1987
      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1988
      CTIME_H=config/locale/generic/time_members.h
1989
      CTIME_CC=config/locale/generic/time_members.cc
1990
      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1991
      ;;
1992
 
1993
    gnu)
1994
      AC_MSG_RESULT(gnu)
1995
 
1996
      # Declare intention to use gettext, and add support for specific
1997
      # languages.
1998
      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1999
      ALL_LINGUAS="de fr"
2000
 
2001
      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
2002
      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
2003
      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
2004
        USE_NLS=yes
2005
      fi
2006
      # Export the build objects.
2007
      for ling in $ALL_LINGUAS; do \
2008
        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
2009
        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
2010
      done
2011
      AC_SUBST(glibcxx_MOFILES)
2012
      AC_SUBST(glibcxx_POFILES)
2013
 
2014
      CLOCALE_H=config/locale/gnu/c_locale.h
2015
      CLOCALE_CC=config/locale/gnu/c_locale.cc
2016
      CCODECVT_CC=config/locale/gnu/codecvt_members.cc
2017
      CCOLLATE_CC=config/locale/gnu/collate_members.cc
2018
      CCTYPE_CC=config/locale/gnu/ctype_members.cc
2019
      CMESSAGES_H=config/locale/gnu/messages_members.h
2020
      CMESSAGES_CC=config/locale/gnu/messages_members.cc
2021
      CMONEY_CC=config/locale/gnu/monetary_members.cc
2022
      CNUMERIC_CC=config/locale/gnu/numeric_members.cc
2023
      CTIME_H=config/locale/gnu/time_members.h
2024
      CTIME_CC=config/locale/gnu/time_members.cc
2025
      CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
2026
      ;;
2027
    ieee_1003.1-2001)
2028
      AC_MSG_RESULT(IEEE 1003.1)
2029
 
2030
      CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
2031
      CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
2032
      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2033
      CCOLLATE_CC=config/locale/generic/collate_members.cc
2034
      CCTYPE_CC=config/locale/generic/ctype_members.cc
2035
      CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
2036
      CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
2037
      CMONEY_CC=config/locale/generic/monetary_members.cc
2038
      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2039
      CTIME_H=config/locale/generic/time_members.h
2040
      CTIME_CC=config/locale/generic/time_members.cc
2041
      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2042
      ;;
2043
    newlib)
2044
      AC_MSG_RESULT(newlib)
2045
 
2046
      CLOCALE_H=config/locale/generic/c_locale.h
2047
      CLOCALE_CC=config/locale/generic/c_locale.cc
2048
      CCODECVT_CC=config/locale/generic/codecvt_members.cc
2049
      CCOLLATE_CC=config/locale/generic/collate_members.cc
2050
      CCTYPE_CC=config/locale/newlib/ctype_members.cc
2051
      CMESSAGES_H=config/locale/generic/messages_members.h
2052
      CMESSAGES_CC=config/locale/generic/messages_members.cc
2053
      CMONEY_CC=config/locale/generic/monetary_members.cc
2054
      CNUMERIC_CC=config/locale/generic/numeric_members.cc
2055
      CTIME_H=config/locale/generic/time_members.h
2056
      CTIME_CC=config/locale/generic/time_members.cc
2057
      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
2058
      ;;
2059
  esac
2060
 
2061
  # This is where the testsuite looks for locale catalogs, using the
2062
  # -DLOCALEDIR define during testsuite compilation.
2063
  glibcxx_localedir=${glibcxx_builddir}/po/share/locale
2064
  AC_SUBST(glibcxx_localedir)
2065
 
2066
  # A standalone libintl (e.g., GNU libintl) may be in use.
2067
  if test $USE_NLS = yes; then
2068
    AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
2069
    AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
2070
  fi
2071
  if test $USE_NLS = yes; then
2072
    AC_DEFINE(_GLIBCXX_USE_NLS, 1,
2073
              [Define if NLS translations are to be used.])
2074
  fi
2075
 
2076
  AC_SUBST(USE_NLS)
2077
  AC_SUBST(CLOCALE_H)
2078
  AC_SUBST(CMESSAGES_H)
2079
  AC_SUBST(CCODECVT_CC)
2080
  AC_SUBST(CCOLLATE_CC)
2081
  AC_SUBST(CCTYPE_CC)
2082
  AC_SUBST(CMESSAGES_CC)
2083
  AC_SUBST(CMONEY_CC)
2084
  AC_SUBST(CNUMERIC_CC)
2085
  AC_SUBST(CTIME_H)
2086
  AC_SUBST(CTIME_CC)
2087
  AC_SUBST(CLOCALE_CC)
2088
  AC_SUBST(CLOCALE_INTERNAL_H)
2089
])
2090
 
2091
 
2092
dnl
2093
dnl Check for which std::allocator base class to use.  The choice is
2094
dnl mapped from a subdirectory of include/ext.
2095
dnl
2096
dnl Default is new.
2097
dnl
2098
AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
2099
  AC_MSG_CHECKING([for std::allocator base class])
2100
  GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
2101
    [use KIND for target std::allocator base],
2102
    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
2103
 
2104
  # If they didn't use this option switch, or if they specified --enable
2105
  # with no specific model, we'll have to look for one.  If they
2106
  # specified --disable (???), do likewise.
2107
  if test $enable_libstdcxx_allocator = no ||
2108
     test $enable_libstdcxx_allocator = yes;
2109
  then
2110
     enable_libstdcxx_allocator=auto
2111
  fi
2112
 
2113
  # Either a known package, or "auto". Auto implies the default choice
2114
  # for a particular platform.
2115
  enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
2116
 
2117
  # Probe for host-specific support if no specific model is specified.
2118
  # Default to "new".
2119
  if test $enable_libstdcxx_allocator_flag = auto; then
2120
    case ${target_os} in
2121
      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
2122
        enable_libstdcxx_allocator_flag=new
2123
        ;;
2124
      *)
2125
        enable_libstdcxx_allocator_flag=new
2126
        ;;
2127
    esac
2128
  fi
2129
  AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
2130
 
2131
 
2132
  # Set configure bits for specified locale package
2133
  case ${enable_libstdcxx_allocator_flag} in
2134
    bitmap)
2135
      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
2136
      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
2137
      ;;
2138
    malloc)
2139
      ALLOCATOR_H=config/allocator/malloc_allocator_base.h
2140
      ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
2141
      ;;
2142
    mt)
2143
      ALLOCATOR_H=config/allocator/mt_allocator_base.h
2144
      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
2145
      ;;
2146
    new)
2147
      ALLOCATOR_H=config/allocator/new_allocator_base.h
2148
      ALLOCATOR_NAME=__gnu_cxx::new_allocator
2149
      ;;
2150
    pool)
2151
      ALLOCATOR_H=config/allocator/pool_allocator_base.h
2152
      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
2153
      ;;
2154
  esac
2155
 
2156
  AC_SUBST(ALLOCATOR_H)
2157
  AC_SUBST(ALLOCATOR_NAME)
2158
])
2159
 
2160
 
2161
dnl
2162
dnl Check for whether the Boost-derived checks should be turned on.
2163
dnl
2164
dnl --enable-concept-checks turns them on.
2165
dnl --disable-concept-checks leaves them off.
2166
dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
2167
dnl       Where DEFAULT is either `yes' or `no'.
2168
dnl
2169
AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
2170
  GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
2171
  if test $enable_concept_checks = yes; then
2172
    AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1,
2173
              [Define to use concept checking code from the boost libraries.])
2174
  fi
2175
])
2176
 
2177
dnl
2178
dnl Use extern templates.
2179
dnl
2180
dnl --enable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 1
2181
dnl --disable-extern-template defines _GLIBCXX_EXTERN_TEMPLATE to 0
2182
 
2183
dnl  +  Usage:  GLIBCXX_ENABLE_TEMPLATE[(DEFAULT)]
2184
dnl       Where DEFAULT is `yes' or `no'.
2185
dnl
2186
AC_DEFUN([GLIBCXX_ENABLE_EXTERN_TEMPLATE], [
2187
 
2188
  GLIBCXX_ENABLE(extern-template,$1,,[enable extern template])
2189
 
2190
  AC_MSG_CHECKING([for extern template support])
2191
  AC_MSG_RESULT([$enable_extern_template])
2192
 
2193
  GLIBCXX_CONDITIONAL(ENABLE_EXTERN_TEMPLATE, test $enable_extern_template = yes)
2194
])
2195
 
2196
dnl
2197
dnl Check for parallel mode pre-requisites, including OpenMP support.
2198
dnl
2199
dnl  +  Usage:  GLIBCXX_ENABLE_PARALLEL
2200
dnl
2201
AC_DEFUN([GLIBCXX_ENABLE_PARALLEL], [
2202
 
2203
  enable_parallel=no;
2204
 
2205
  # See if configured libgomp/omp.h exists. (libgomp may be in
2206
  # noconfigdirs but not explicitly disabled.)
2207
  if echo " ${TARGET_CONFIGDIRS} " | grep " libgomp " > /dev/null 2>&1 ; then
2208
    enable_parallel=yes;
2209
  else
2210
    AC_MSG_NOTICE([target-libgomp not built])
2211
  fi
2212
 
2213
  AC_MSG_CHECKING([for parallel mode support])
2214
  AC_MSG_RESULT([$enable_parallel])
2215
  GLIBCXX_CONDITIONAL(ENABLE_PARALLEL, test $enable_parallel = yes)
2216
])
2217
 
2218
 
2219
dnl
2220
dnl Check for which I/O library to use:  stdio, or something specific.
2221
dnl
2222
dnl Default is stdio.
2223
dnl
2224
AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
2225
  AC_MSG_CHECKING([for underlying I/O to use])
2226
  GLIBCXX_ENABLE(cstdio,stdio,[[[=PACKAGE]]],
2227
    [use target-specific I/O package], [permit stdio])
2228
 
2229
  # Now that libio has been removed, you can have any color you want as long
2230
  # as it's black.  This is one big no-op until other packages are added, but
2231
  # showing the framework never hurts.
2232
  case ${enable_cstdio} in
2233
    stdio)
2234
      CSTDIO_H=config/io/c_io_stdio.h
2235
      BASIC_FILE_H=config/io/basic_file_stdio.h
2236
      BASIC_FILE_CC=config/io/basic_file_stdio.cc
2237
      AC_MSG_RESULT(stdio)
2238
      ;;
2239
  esac
2240
 
2241
  AC_SUBST(CSTDIO_H)
2242
  AC_SUBST(BASIC_FILE_H)
2243
  AC_SUBST(BASIC_FILE_CC)
2244
])
2245
 
2246
 
2247
dnl
2248
dnl Check for "unusual" flags to pass to the compiler while building.
2249
dnl
2250
dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
2251
dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
2252
dnl --disable-cxx-flags passes nothing.
2253
dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
2254
dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
2255
dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
2256
dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
2257
dnl       If "default flags" is an empty string, the effect is the same
2258
dnl       as --disable or --enable=no.
2259
dnl
2260
AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
2261
  AC_MSG_CHECKING([for extra compiler flags for building])
2262
  GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
2263
    [pass compiler FLAGS when building library],
2264
    [case "x$enable_cxx_flags" in
2265
      xno | x)   enable_cxx_flags= ;;
2266
      x-*)       ;;
2267
      *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2268
     esac])
2269
 
2270
  # Run through flags (either default or command-line) and set anything
2271
  # extra (e.g., #defines) that must accompany particular g++ options.
2272
  if test -n "$enable_cxx_flags"; then
2273
    for f in $enable_cxx_flags; do
2274
      case "$f" in
2275
        -fhonor-std)  ;;
2276
        -*)  ;;
2277
        *)   # and we're trying to pass /what/ exactly?
2278
             AC_MSG_ERROR([compiler flags start with a -]) ;;
2279
      esac
2280
    done
2281
  fi
2282
 
2283
  EXTRA_CXX_FLAGS="$enable_cxx_flags"
2284
  AC_MSG_RESULT($EXTRA_CXX_FLAGS)
2285
  AC_SUBST(EXTRA_CXX_FLAGS)
2286
])
2287
 
2288
 
2289
dnl
2290
dnl Check to see if debugging libraries are to be built.
2291
dnl
2292
dnl --enable-libstdcxx-debug
2293
dnl builds a separate set of debugging libraries in addition to the
2294
dnl normal (shared, static) libstdc++ binaries.
2295
dnl
2296
dnl --disable-libstdcxx-debug
2297
dnl builds only one (non-debug) version of libstdc++.
2298
dnl
2299
dnl --enable-libstdcxx-debug-flags=FLAGS
2300
dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
2301
dnl
2302
dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
2303
dnl       Where DEFAULT is either `yes' or `no'.
2304
dnl
2305
AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
2306
  AC_MSG_CHECKING([for additional debug build])
2307
  GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
2308
  AC_MSG_RESULT($enable_libstdcxx_debug)
2309
  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
2310
])
2311
 
2312
 
2313
dnl
2314
dnl Check for explicit debug flags.
2315
dnl
2316
dnl --enable-libstdcxx-debug-flags='-O1'
2317
dnl is a general method for passing flags to be used when
2318
dnl building debug libraries with --enable-debug.
2319
dnl
2320
dnl --disable-libstdcxx-debug-flags does nothing.
2321
dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
2322
dnl       If "default flags" is an empty string, the effect is the same
2323
dnl       as --disable or --enable=no.
2324
dnl
2325
AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
2326
  GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
2327
    [pass compiler FLAGS when building debug library],
2328
    [case "x$enable_libstdcxx_debug_flags" in
2329
      xno | x)    enable_libstdcxx_debug_flags= ;;
2330
      x-*)        ;;
2331
      *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
2332
     esac])
2333
 
2334
  # Option parsed, now set things appropriately
2335
  DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
2336
  AC_SUBST(DEBUG_FLAGS)
2337
 
2338
  AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
2339
])
2340
 
2341
 
2342
dnl
2343
dnl Check if the user only wants a freestanding library implementation.
2344
dnl
2345
dnl --disable-hosted-libstdcxx will turn off most of the library build,
2346
dnl installing only the headers required by [17.4.1.3] and the language
2347
dnl support library.  More than that will be built (to keep the Makefiles
2348
dnl conveniently clean), but not installed.
2349
dnl
2350
dnl Sets:
2351
dnl  is_hosted  (yes/no)
2352
dnl
2353
dnl Defines:
2354
dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
2355
dnl
2356
AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
2357
  AC_ARG_ENABLE([hosted-libstdcxx],
2358
    AC_HELP_STRING([--disable-hosted-libstdcxx],
2359
                   [only build freestanding C++ runtime support]),,
2360
    [case "$host" in
2361
        arm*-*-symbianelf*)
2362
            enable_hosted_libstdcxx=no
2363
            ;;
2364
        *)
2365
            enable_hosted_libstdcxx=yes
2366
            ;;
2367
     esac])
2368
  if test "$enable_hosted_libstdcxx" = no; then
2369
    AC_MSG_NOTICE([Only freestanding libraries will be built])
2370
    is_hosted=no
2371
    hosted_define=0
2372
    enable_abi_check=no
2373
    enable_libstdcxx_pch=no
2374
  else
2375
    is_hosted=yes
2376
    hosted_define=1
2377
  fi
2378
  GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
2379
  AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
2380
    [Define to 1 if a full hosted library is built, or 0 if freestanding.])
2381
])
2382
 
2383
 
2384
dnl
2385
dnl Check for template specializations for the 'long long' type.
2386
dnl The result determines only whether 'long long' I/O is enabled; things
2387
dnl like numeric_limits<> specializations are always available.
2388
dnl
2389
dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
2390
dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
2391
dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
2392
dnl       Where DEFAULT is either `yes' or `no'.
2393
dnl
2394
AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
2395
  GLIBCXX_ENABLE(long-long,$1,,[enable template specializations for 'long long'])
2396
  if test $enable_long_long = yes; then
2397
    AC_DEFINE(_GLIBCXX_USE_LONG_LONG, 1,
2398
              [Define if code specialized for long long should be used.])
2399
  fi
2400
  AC_MSG_CHECKING([for enabled long long specializations])
2401
  AC_MSG_RESULT([$enable_long_long])
2402
])
2403
 
2404
 
2405
dnl
2406
dnl Check for decimal floating point.
2407
dnl See:
2408
dnl http://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html#Decimal-Float
2409
dnl
2410
dnl This checks to see if the host supports decimal floating point types.
2411
dnl
2412
dnl Defines:
2413
dnl  _GLIBCXX_USE_DECIMAL_FLOAT
2414
dnl
2415
AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
2416
 
2417
  # Fake what AC_TRY_COMPILE does, without linking as this is
2418
  # unnecessary for this test.
2419
 
2420
    cat > conftest.$ac_ext << EOF
2421
[#]line __oline__ "configure"
2422
int main()
2423
{
2424
  _Decimal32 d1;
2425
  _Decimal64 d2;
2426
  _Decimal128 d3;
2427
  return 0;
2428
}
2429
EOF
2430
 
2431
    AC_MSG_CHECKING([for ISO/IEC TR 24733 ])
2432
    if AC_TRY_EVAL(ac_compile); then
2433
      AC_DEFINE(_GLIBCXX_USE_DECIMAL_FLOAT, 1,
2434
      [Define if ISO/IEC TR 24733 decimal floating point types are supported on this host.])
2435
      enable_dfp=yes
2436
    else
2437
      enable_dfp=no
2438
    fi
2439
    AC_MSG_RESULT($enable_dfp)
2440
    rm -f conftest*
2441
])
2442
 
2443
dnl
2444
dnl Check for GNU 128-bit integer and floating point types.
2445
dnl
2446
dnl Note: also checks that the types aren't standard types.
2447
dnl
2448
dnl Defines:
2449
dnl  _GLIBCXX_USE_INT128
2450
dnl  _GLIBCXX_USE_FLOAT128
2451
dnl
2452
AC_DEFUN([GLIBCXX_ENABLE_INT128_FLOAT128], [
2453
 
2454
  AC_LANG_SAVE
2455
  AC_LANG_CPLUSPLUS
2456
 
2457
  # Fake what AC_TRY_COMPILE does, without linking as this is
2458
  # unnecessary for this test.
2459
 
2460
    cat > conftest.$ac_ext << EOF
2461
[#]line __oline__ "configure"
2462
template<typename T1, typename T2>
2463
  struct same
2464
  { typedef T2 type; };
2465
 
2466
template<typename T>
2467
  struct same<T, T>;
2468
 
2469
int main()
2470
{
2471
  typename same<long, __int128>::type                i1;
2472
  typename same<long long, __int128>::type           i2;
2473
}
2474
EOF
2475
 
2476
    AC_MSG_CHECKING([for __int128])
2477
    if AC_TRY_EVAL(ac_compile); then
2478
      AC_DEFINE(_GLIBCXX_USE_INT128, 1,
2479
      [Define if __int128 is supported on this host.])
2480
      enable_int128=yes
2481
    else
2482
      enable_int128=no
2483
    fi
2484
    AC_MSG_RESULT($enable_int128)
2485
    rm -f conftest*
2486
 
2487
    cat > conftest.$ac_ext << EOF
2488
[#]line __oline__ "configure"
2489
template<typename T1, typename T2>
2490
  struct same
2491
  { typedef T2 type; };
2492
 
2493
template<typename T>
2494
  struct same<T, T>;
2495
 
2496
int main()
2497
{
2498
  typename same<double, __float128>::type      f1;
2499
  typename same<long double, __float128>::type f2;
2500
}
2501
EOF
2502
 
2503
    AC_MSG_CHECKING([for __float128])
2504
    if AC_TRY_EVAL(ac_compile); then
2505
      AC_DEFINE(_GLIBCXX_USE_FLOAT128, 1,
2506
      [Define if __float128 is supported on this host.])
2507
      enable_float128=yes
2508
    else
2509
      enable_float128=no
2510
    fi
2511
    AC_MSG_RESULT($enable_float128)
2512
    rm -f conftest*
2513
 
2514
  AC_LANG_RESTORE
2515
])
2516
 
2517
dnl
2518
dnl Check for template specializations for the 'wchar_t' type.
2519
dnl
2520
dnl --enable-wchar_t defines _GLIBCXX_USE_WCHAR_T
2521
dnl --disable-wchar_t leaves _GLIBCXX_USE_WCHAR_T undefined
2522
dnl  +  Usage:  GLIBCXX_ENABLE_WCHAR_T[(DEFAULT)]
2523
dnl       Where DEFAULT is either `yes' or `no'.
2524
dnl
2525
dnl Necessary support must also be present.
2526
dnl
2527
AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
2528
  GLIBCXX_ENABLE(wchar_t,$1,,[enable template specializations for 'wchar_t'])
2529
 
2530
  # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
2531
  AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
2532
  AC_MSG_CHECKING([for mbstate_t])
2533
  AC_TRY_COMPILE([#include <wchar.h>],
2534
  [mbstate_t teststate;],
2535
  have_mbstate_t=yes, have_mbstate_t=no)
2536
  AC_MSG_RESULT($have_mbstate_t)
2537
  if test x"$have_mbstate_t" = xyes; then
2538
    AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.])
2539
  fi
2540
 
2541
  # Test it always, for use in GLIBCXX_ENABLE_C99, together with
2542
  # ac_has_wchar_h.
2543
  AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
2544
 
2545
  if test x"$enable_wchar_t" = x"yes"; then
2546
 
2547
    AC_LANG_SAVE
2548
    AC_LANG_CPLUSPLUS
2549
 
2550
    if test x"$ac_has_wchar_h" = xyes &&
2551
       test x"$ac_has_wctype_h" = xyes; then
2552
      AC_TRY_COMPILE([#include <wchar.h>
2553
                      #include <stddef.h>
2554
                      wint_t i;
2555
                      long l = WEOF;
2556
                      long j = WCHAR_MIN;
2557
                      long k = WCHAR_MAX;
2558
                      namespace test
2559
                      {
2560
                        using ::btowc;
2561
                        using ::fgetwc;
2562
                        using ::fgetws;
2563
                        using ::fputwc;
2564
                        using ::fputws;
2565
                        using ::fwide;
2566
                        using ::fwprintf;
2567
                        using ::fwscanf;
2568
                        using ::getwc;
2569
                        using ::getwchar;
2570
                        using ::mbrlen;
2571
                        using ::mbrtowc;
2572
                        using ::mbsinit;
2573
                        using ::mbsrtowcs;
2574
                        using ::putwc;
2575
                        using ::putwchar;
2576
                        using ::swprintf;
2577
                        using ::swscanf;
2578
                        using ::ungetwc;
2579
                        using ::vfwprintf;
2580
                        using ::vswprintf;
2581
                        using ::vwprintf;
2582
                        using ::wcrtomb;
2583
                        using ::wcscat;
2584
                        using ::wcschr;
2585
                        using ::wcscmp;
2586
                        using ::wcscoll;
2587
                        using ::wcscpy;
2588
                        using ::wcscspn;
2589
                        using ::wcsftime;
2590
                        using ::wcslen;
2591
                        using ::wcsncat;
2592
                        using ::wcsncmp;
2593
                        using ::wcsncpy;
2594
                        using ::wcspbrk;
2595
                        using ::wcsrchr;
2596
                        using ::wcsrtombs;
2597
                        using ::wcsspn;
2598
                        using ::wcsstr;
2599
                        using ::wcstod;
2600
                        using ::wcstok;
2601
                        using ::wcstol;
2602
                        using ::wcstoul;
2603
                        using ::wcsxfrm;
2604
                        using ::wctob;
2605
                        using ::wmemchr;
2606
                        using ::wmemcmp;
2607
                        using ::wmemcpy;
2608
                        using ::wmemmove;
2609
                        using ::wmemset;
2610
                        using ::wprintf;
2611
                        using ::wscanf;
2612
                      }
2613
                     ],[],[], [enable_wchar_t=no])
2614
    else
2615
      enable_wchar_t=no
2616
    fi
2617
 
2618
    AC_LANG_RESTORE
2619
  fi
2620
 
2621
  if test x"$enable_wchar_t" = x"yes"; then
2622
    AC_DEFINE(_GLIBCXX_USE_WCHAR_T, 1,
2623
              [Define if code specialized for wchar_t should be used.])
2624
  fi
2625
 
2626
  AC_MSG_CHECKING([for enabled wchar_t specializations])
2627
  AC_MSG_RESULT([$enable_wchar_t])
2628
])
2629
 
2630
 
2631
dnl
2632
dnl Check to see if building and using a C++ precompiled header can be done.
2633
dnl
2634
dnl --enable-libstdcxx-pch=yes
2635
dnl default, this shows intent to use stdc++.h.gch If it looks like it
2636
dnl may work, after some light-hearted attempts to puzzle out compiler
2637
dnl support, flip bits on in include/Makefile.am
2638
dnl
2639
dnl --disable-libstdcxx-pch
2640
dnl turns off attempts to use or build stdc++.h.gch.
2641
dnl
2642
dnl Substs:
2643
dnl  glibcxx_PCHFLAGS
2644
dnl
2645
AC_DEFUN([GLIBCXX_ENABLE_PCH], [
2646
  GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
2647
  if test $enable_libstdcxx_pch = yes; then
2648
    AC_CACHE_CHECK([for compiler with PCH support],
2649
      [glibcxx_cv_prog_CXX_pch],
2650
      [ac_save_CXXFLAGS="$CXXFLAGS"
2651
       CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
2652
       AC_LANG_SAVE
2653
       AC_LANG_CPLUSPLUS
2654
       echo '#include <math.h>' > conftest.h
2655
       if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
2656
                          -o conftest.h.gch 1>&5 2>&1 &&
2657
                echo '#error "pch failed"' > conftest.h &&
2658
          echo '#include "conftest.h"' > conftest.cc &&
2659
               $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
2660
       then
2661
         glibcxx_cv_prog_CXX_pch=yes
2662
       else
2663
         glibcxx_cv_prog_CXX_pch=no
2664
       fi
2665
       rm -f conftest*
2666
       CXXFLAGS=$ac_save_CXXFLAGS
2667
       AC_LANG_RESTORE
2668
      ])
2669
    enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
2670
  fi
2671
 
2672
  AC_MSG_CHECKING([for enabled PCH])
2673
  AC_MSG_RESULT([$enable_libstdcxx_pch])
2674
 
2675
  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
2676
  if test $enable_libstdcxx_pch = yes; then
2677
    glibcxx_PCHFLAGS="-include bits/stdc++.h"
2678
  else
2679
    glibcxx_PCHFLAGS=""
2680
  fi
2681
  AC_SUBST(glibcxx_PCHFLAGS)
2682
])
2683
 
2684
 
2685
dnl
2686
dnl Check for atomic builtins.
2687
dnl See:
2688
dnl http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
2689
dnl
2690
dnl This checks to see if the host supports the compiler-generated
2691
dnl builtins for atomic operations for various integral sizes. Note, this
2692
dnl is intended to be an all-or-nothing switch, so all the atomic operations
2693
dnl that are used should be checked.
2694
dnl
2695
dnl Note:
2696
dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
2697
dnl
2698
AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
2699
  AC_LANG_SAVE
2700
  AC_LANG_CPLUSPLUS
2701
  old_CXXFLAGS="$CXXFLAGS"
2702
 
2703
  # Do link tests if possible, instead asm tests, limited to some platforms
2704
  # see discussion in PR target/40134, PR libstdc++/40133 and the thread
2705
  # starting at http://gcc.gnu.org/ml/gcc-patches/2009-07/msg00322.html
2706
  atomic_builtins_link_tests=no
2707
  if test x$gcc_no_link != xyes; then
2708
    # Can do link tests. Limit to some tested platforms
2709
    case "$host" in
2710
      *-*-linux* | *-*-uclinux* | *-*-kfreebsd*-gnu | *-*-gnu*)
2711
        atomic_builtins_link_tests=yes
2712
        ;;
2713
    esac
2714
  fi
2715
 
2716
  if test x$atomic_builtins_link_tests = xyes; then
2717
 
2718
  # Do link tests.
2719
 
2720
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
2721
 
2722
  AC_MSG_CHECKING([for atomic builtins for bool])
2723
  AC_CACHE_VAL(glibcxx_cv_atomic_bool, [
2724
    AC_TRY_LINK(
2725
      [ ],
2726
      [typedef bool atomic_type;
2727
       atomic_type c1;
2728
       atomic_type c2;
2729
       atomic_type c3(0);
2730
       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2731
       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2732
                                   __ATOMIC_RELAXED);
2733
       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2734
       __atomic_load_n(&c1, __ATOMIC_RELAXED);
2735
      ],
2736
      [glibcxx_cv_atomic_bool=yes],
2737
      [glibcxx_cv_atomic_bool=no])
2738
  ])
2739
  AC_MSG_RESULT($glibcxx_cv_atomic_bool)
2740
 
2741
  AC_MSG_CHECKING([for atomic builtins for short])
2742
  AC_CACHE_VAL(glibcxx_cv_atomic_short, [
2743
    AC_TRY_LINK(
2744
      [ ],
2745
      [typedef short atomic_type;
2746
       atomic_type c1;
2747
       atomic_type c2;
2748
       atomic_type c3(0);
2749
       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2750
       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2751
                                   __ATOMIC_RELAXED);
2752
       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2753
       __atomic_load_n(&c1, __ATOMIC_RELAXED);
2754
      ],
2755
      [glibcxx_cv_atomic_short=yes],
2756
      [glibcxx_cv_atomic_short=no])
2757
  ])
2758
  AC_MSG_RESULT($glibcxx_cv_atomic_short)
2759
 
2760
  AC_MSG_CHECKING([for atomic builtins for int])
2761
  AC_CACHE_VAL(glibcxx_cv_atomic_int, [
2762
    AC_TRY_LINK(
2763
      [ ],
2764
      [typedef int atomic_type;
2765
       atomic_type c1;
2766
       atomic_type c2;
2767
       atomic_type c3(0);
2768
       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2769
       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2770
                                   __ATOMIC_RELAXED);
2771
       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2772
       __atomic_load_n(&c1, __ATOMIC_RELAXED);
2773
      ],
2774
      [glibcxx_cv_atomic_int=yes],
2775
      [glibcxx_cv_atomic_int=no])
2776
  ])
2777
  AC_MSG_RESULT($glibcxx_cv_atomic_int)
2778
 
2779
  AC_MSG_CHECKING([for atomic builtins for long long])
2780
  AC_CACHE_VAL(glibcxx_cv_atomic_long_long, [
2781
    AC_TRY_LINK(
2782
      [ ],
2783
      [typedef long long atomic_type;
2784
       atomic_type c1;
2785
       atomic_type c2;
2786
       atomic_type c3(0);
2787
       __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2788
       __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2789
                                   __ATOMIC_RELAXED);
2790
       __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2791
       __atomic_load_n(&c1, __ATOMIC_RELAXED);
2792
      ],
2793
      [glibcxx_cv_atomic_long_long=yes],
2794
      [glibcxx_cv_atomic_long_long=no])
2795
  ])
2796
  AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
2797
 
2798
  else
2799
 
2800
  # Do asm tests.
2801
 
2802
  # Compile unoptimized.
2803
  CXXFLAGS='-O0 -S'
2804
 
2805
  # Fake what AC_TRY_COMPILE does.
2806
 
2807
    cat > conftest.$ac_ext << EOF
2808
[#]line __oline__ "configure"
2809
int main()
2810
{
2811
  typedef bool atomic_type;
2812
  atomic_type c1;
2813
  atomic_type c2;
2814
  atomic_type c3(0);
2815
  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2816
  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2817
                              __ATOMIC_RELAXED);
2818
  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2819
  __atomic_load_n(&c1, __ATOMIC_RELAXED);
2820
 
2821
  return 0;
2822
}
2823
EOF
2824
 
2825
    AC_MSG_CHECKING([for atomic builtins for bool])
2826
    if AC_TRY_EVAL(ac_compile); then
2827
      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
2828
        glibcxx_cv_atomic_bool=no
2829
      else
2830
        glibcxx_cv_atomic_bool=yes
2831
      fi
2832
    fi
2833
    AC_MSG_RESULT($glibcxx_cv_atomic_bool)
2834
    rm -f conftest*
2835
 
2836
    cat > conftest.$ac_ext << EOF
2837
[#]line __oline__ "configure"
2838
int main()
2839
{
2840
  typedef short atomic_type;
2841
  atomic_type c1;
2842
  atomic_type c2;
2843
  atomic_type c3(0);
2844
  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2845
  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2846
                              __ATOMIC_RELAXED);
2847
  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2848
  __atomic_load_n(&c1, __ATOMIC_RELAXED);
2849
 
2850
  return 0;
2851
}
2852
EOF
2853
 
2854
    AC_MSG_CHECKING([for atomic builtins for short])
2855
    if AC_TRY_EVAL(ac_compile); then
2856
      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
2857
        glibcxx_cv_atomic_short=no
2858
      else
2859
        glibcxx_cv_atomic_short=yes
2860
      fi
2861
    fi
2862
    AC_MSG_RESULT($glibcxx_cv_atomic_short)
2863
    rm -f conftest*
2864
 
2865
    cat > conftest.$ac_ext << EOF
2866
[#]line __oline__ "configure"
2867
int main()
2868
{
2869
  // NB: _Atomic_word not necessarily int.
2870
  typedef int atomic_type;
2871
  atomic_type c1;
2872
  atomic_type c2;
2873
  atomic_type c3(0);
2874
  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2875
  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2876
                              __ATOMIC_RELAXED);
2877
  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2878
  __atomic_load_n(&c1, __ATOMIC_RELAXED);
2879
 
2880
  return 0;
2881
}
2882
EOF
2883
 
2884
    AC_MSG_CHECKING([for atomic builtins for int])
2885
    if AC_TRY_EVAL(ac_compile); then
2886
      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
2887
        glibcxx_cv_atomic_int=no
2888
      else
2889
        glibcxx_cv_atomic_int=yes
2890
      fi
2891
    fi
2892
    AC_MSG_RESULT($glibcxx_cv_atomic_int)
2893
    rm -f conftest*
2894
 
2895
    cat > conftest.$ac_ext << EOF
2896
[#]line __oline__ "configure"
2897
int main()
2898
{
2899
  typedef long long atomic_type;
2900
  atomic_type c1;
2901
  atomic_type c2;
2902
  atomic_type c3(0);
2903
  __atomic_fetch_add(&c1, c2, __ATOMIC_RELAXED);
2904
  __atomic_compare_exchange_n(&c1, &c2, c3, true, __ATOMIC_ACQ_REL,
2905
                              __ATOMIC_RELAXED);
2906
  __atomic_test_and_set(&c1, __ATOMIC_RELAXED);
2907
  __atomic_load_n(&c1, __ATOMIC_RELAXED);
2908
 
2909
  return 0;
2910
}
2911
EOF
2912
 
2913
    AC_MSG_CHECKING([for atomic builtins for long long])
2914
    if AC_TRY_EVAL(ac_compile); then
2915
      if grep __atomic_ conftest.s >/dev/null 2>&1 ; then
2916
        glibcxx_cv_atomic_long_long=no
2917
      else
2918
        glibcxx_cv_atomic_long_long=yes
2919
      fi
2920
    fi
2921
    AC_MSG_RESULT($glibcxx_cv_atomic_long_long)
2922
    rm -f conftest*
2923
 
2924
  fi
2925
 
2926
  CXXFLAGS="$old_CXXFLAGS"
2927
  AC_LANG_RESTORE
2928
 
2929
  # Set atomicity_dir to builtins if all of above tests pass.
2930
  if test $glibcxx_cv_atomic_bool = yes \
2931
     && test $glibcxx_cv_atomic_short = yes \
2932
     && test $glibcxx_cv_atomic_int = yes \
2933
     && test $glibcxx_cv_atomic_long_long = yes ; then
2934
    AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1,
2935
    [Define if the compiler supports C++11 atomics.])
2936
    atomicity_dir=cpu/generic/atomicity_builtins
2937
  fi
2938
 
2939
  # If still generic, set to mutex.
2940
  if test $atomicity_dir = "cpu/generic" ; then
2941
    atomicity_dir=cpu/generic/atomicity_mutex
2942
    AC_MSG_WARN([No native atomic operations are provided for this platform.])
2943
      if test "x$target_thread_file" = xsingle; then
2944
        AC_MSG_WARN([They cannot be faked when thread support is disabled.])
2945
        AC_MSG_WARN([Thread-safety of certain classes is not guaranteed.])
2946
      else
2947
        AC_MSG_WARN([They will be faked using a mutex.])
2948
        AC_MSG_WARN([Performance of certain classes will degrade as a result.])
2949
      fi
2950
  fi
2951
 
2952
])
2953
 
2954
 
2955
dnl
2956
dnl Check for exception handling support.  If an explicit enable/disable
2957
dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
2958
dnl target may or may not support call frame exceptions.
2959
dnl
2960
dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
2961
dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
2962
dnl Neither one forces an attempt at detection.
2963
dnl
2964
dnl Defines:
2965
dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
2966
dnl
2967
AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
2968
  AC_MSG_CHECKING([for exception model to use])
2969
  AC_LANG_SAVE
2970
  AC_LANG_CPLUSPLUS
2971
  GLIBCXX_ENABLE(sjlj-exceptions,auto,,
2972
    [force use of builtin_setjmp for exceptions],
2973
    [permit yes|no|auto])
2974
 
2975
  if test $enable_sjlj_exceptions = auto; then
2976
    # Botheration.  Now we've got to detect the exception model.  Link tests
2977
    # against libgcc.a are problematic since we've not been given proper -L
2978
    # bits for single-tree newlib and libgloss.
2979
    #
2980
    # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
2981
    cat > conftest.$ac_ext << EOF
2982
[#]line __oline__ "configure"
2983
struct S { ~S(); };
2984
void bar();
2985
void foo()
2986
{
2987
  S s;
2988
  bar();
2989
}
2990
EOF
2991
    old_CXXFLAGS="$CXXFLAGS"
2992
    CXXFLAGS=-S
2993
    if AC_TRY_EVAL(ac_compile); then
2994
      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
2995
        enable_sjlj_exceptions=yes
2996
      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
2997
        enable_sjlj_exceptions=no
2998
      elif grep __cxa_end_cleanup conftest.s >/dev/null 2>&1 ; then
2999
        enable_sjlj_exceptions=no
3000
      fi
3001
    fi
3002
    CXXFLAGS="$old_CXXFLAGS"
3003
    rm -f conftest*
3004
  fi
3005
 
3006
  # This is a tad weird, for hysterical raisins.  We have to map
3007
  # enable/disable to two different models.
3008
  case $enable_sjlj_exceptions in
3009
    yes)
3010
      AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
3011
        [Define if the compiler is configured for setjmp/longjmp exceptions.])
3012
      ac_exception_model_name=sjlj
3013
      ;;
3014
    no)
3015
      ac_exception_model_name="call frame"
3016
      ;;
3017
    *)
3018
      AC_MSG_ERROR([unable to detect exception model])
3019
      ;;
3020
  esac
3021
 AC_LANG_RESTORE
3022
 AC_MSG_RESULT($ac_exception_model_name)
3023
])
3024
 
3025
 
3026
dnl
3027
dnl Allow visibility attributes to be used on namespaces, objects, etc.
3028
dnl
3029
dnl --enable-libstdcxx-visibility enables attempt to use visibility attributes.
3030
dnl --disable-libstdcxx-visibility turns off all use of visibility attributes.
3031
dnl  +  Usage:  GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY[(DEFAULT)]
3032
dnl       Where DEFAULT is 'yes'.
3033
dnl
3034
AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY], [
3035
GLIBCXX_ENABLE(libstdcxx-visibility,$1,,[enables visibility safe usage])
3036
 
3037
if test x$enable_libstdcxx_visibility = xyes ; then
3038
  dnl all hail libgfortran
3039
  dnl Check whether the target supports hidden visibility.
3040
  AC_CACHE_CHECK([whether the target supports hidden visibility],
3041
                 glibcxx_cv_have_attribute_visibility, [
3042
  save_CFLAGS="$CFLAGS"
3043
  CFLAGS="$CFLAGS -Werror"
3044
  AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
3045
                 [], glibcxx_cv_have_attribute_visibility=yes,
3046
                 glibcxx_cv_have_attribute_visibility=no)
3047
  CFLAGS="$save_CFLAGS"])
3048
  if test $glibcxx_cv_have_attribute_visibility = no; then
3049
    enable_libstdcxx_visibility=no
3050
  fi
3051
fi
3052
 
3053
GLIBCXX_CONDITIONAL(ENABLE_VISIBILITY, test $enable_libstdcxx_visibility = yes)
3054
AC_MSG_NOTICE([visibility supported: $enable_libstdcxx_visibility])
3055
])
3056
 
3057
 
3058
dnl
3059
dnl Add version tags to symbols in shared library (or not), additionally
3060
dnl marking other symbols as private/local (or not).
3061
dnl
3062
dnl Sets libtool_VERSION, and determines shared library SONAME.
3063
dnl
3064
dnl  This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
3065
dnl
3066
dnl --enable-symvers=style adds a version script to the linker call when
3067
dnl       creating the shared library.  The choice of version script is
3068
dnl       controlled by 'style'.
3069
dnl --disable-symvers does not.
3070
dnl
3071
dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
3072
dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
3073
dnl       choose a default style based on linker characteristics.  Passing
3074
dnl       'no' disables versioning.
3075
dnl
3076
AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
3077
 
3078
GLIBCXX_ENABLE(symvers,$1,[[[=STYLE]]],
3079
  [enables symbol versioning of the shared library],
3080
  [permit yes|no|gnu|gnu-versioned-namespace|darwin|darwin-export|sun])
3081
 
3082
# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
3083
# don't know enough about $LD to do tricks...
3084
AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
3085
# Sun style symbol versions needs GNU c++filt for make_sunver.pl to work
3086
# with extern "C++" in version scripts.
3087
AC_REQUIRE([GCC_PROG_GNU_CXXFILT])
3088
 
3089
# Turn a 'yes' into a suitable default.
3090
if test x$enable_symvers = xyes ; then
3091
  if test $enable_shared = no || test "x$LD" = x || test x$gcc_no_link = xyes; then
3092
    enable_symvers=no
3093
  else
3094
    if test $with_gnu_ld = yes ; then
3095
      case ${target_os} in
3096
        hpux*)
3097
          enable_symvers=no ;;
3098
        *)
3099
          enable_symvers=gnu ;;
3100
      esac
3101
    else
3102
      case ${target_os} in
3103
        darwin*)
3104
          enable_symvers=darwin ;;
3105
        # Sun symbol versioning exists since Solaris 2.5.
3106
        solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
3107
          # make_sunver.pl needs GNU c++filt to support extern "C++" in
3108
          # version scripts, so disable symbol versioning if none can be
3109
          # found.
3110
          if test -z "$ac_cv_path_CXXFILT"; then
3111
            AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3112
            AC_MSG_WARN([=== no GNU c++filt could  be found.])
3113
            AC_MSG_WARN([=== Symbol versioning will be disabled.])
3114
            enable_symvers=no
3115
          else
3116
            enable_symvers=sun
3117
          fi
3118
          ;;
3119
        *)
3120
          enable_symvers=no ;;
3121
      esac
3122
    fi
3123
  fi
3124
fi
3125
 
3126
# Check to see if 'darwin' or 'darwin-export' can win.
3127
if test x$enable_symvers = xdarwin-export ; then
3128
    enable_symvers=darwin
3129
fi
3130
 
3131
# Check if 'sun' was requested on non-Solaris 2 platforms.
3132
if test x$enable_symvers = xsun ; then
3133
  case ${target_os} in
3134
    solaris2*)
3135
      # All fine.
3136
      ;;
3137
    *)
3138
      # Unlikely to work.
3139
      AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
3140
      AC_MSG_WARN([=== you are not targetting Solaris 2.])
3141
      AC_MSG_WARN([=== Symbol versioning will be disabled.])
3142
      enable_symvers=no
3143
      ;;
3144
  esac
3145
fi
3146
 
3147
# Check to see if 'gnu' can win.
3148
if test $enable_symvers = gnu ||
3149
  test $enable_symvers = gnu-versioned-namespace ||
3150
  test $enable_symvers = sun; then
3151
  # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
3152
  AC_MSG_CHECKING([for shared libgcc])
3153
  ac_save_CFLAGS="$CFLAGS"
3154
  CFLAGS=' -lgcc_s'
3155
  AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
3156
  CFLAGS="$ac_save_CFLAGS"
3157
  if test $glibcxx_shared_libgcc = no; then
3158
    cat > conftest.c <<EOF
3159
int main (void) { return 0; }
3160
EOF
3161
changequote(,)dnl
3162
    glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
3163
                             -shared -shared-libgcc -o conftest.so \
3164
                             conftest.c -v 2>&1 >/dev/null \
3165
                             | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
3166
changequote([,])dnl
3167
    rm -f conftest.c conftest.so
3168
    if test x${glibcxx_libgcc_s_suffix+set} = xset; then
3169
      CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
3170
      AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
3171
      CFLAGS="$ac_save_CFLAGS"
3172
    fi
3173
  fi
3174
  AC_MSG_RESULT($glibcxx_shared_libgcc)
3175
 
3176
  # For GNU ld, we need at least this version.  The format is described in
3177
  # GLIBCXX_CHECK_LINKER_FEATURES above.
3178
  glibcxx_min_gnu_ld_version=21400
3179
 
3180
  # If no shared libgcc, can't win.
3181
  if test $glibcxx_shared_libgcc != yes; then
3182
      AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3183
      AC_MSG_WARN([=== you are not building a shared libgcc_s.])
3184
      AC_MSG_WARN([=== Symbol versioning will be disabled.])
3185
      enable_symvers=no
3186
  elif test $with_gnu_ld != yes && test $enable_symvers = sun; then
3187
    : All interesting versions of Sun ld support sun style symbol versioning.
3188
  elif test $with_gnu_ld != yes ; then
3189
    # just fail for now
3190
    AC_MSG_WARN([=== You have requested GNU symbol versioning, but])
3191
    AC_MSG_WARN([=== you are not using the GNU linker.])
3192
    AC_MSG_WARN([=== Symbol versioning will be disabled.])
3193
    enable_symvers=no
3194
  elif test $glibcxx_ld_is_gold = yes ; then
3195
    : All versions of gold support symbol versioning.
3196
  elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then
3197
    # The right tools, the right setup, but too old.  Fallbacks?
3198
    AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
3199
    AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
3200
    AC_MSG_WARN(=== You would need to upgrade your binutils to version)
3201
    AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
3202
    AC_MSG_WARN([=== Symbol versioning will be disabled.])
3203
    enable_symvers=no
3204
  fi
3205
fi
3206
 
3207
# For libtool versioning info, format is CURRENT:REVISION:AGE
3208
libtool_VERSION=6:17:0
3209
 
3210
# Everything parsed; figure out what files and settings to use.
3211
case $enable_symvers in
3212
  no)
3213
    SYMVER_FILE=config/abi/pre/none.ver
3214
    ;;
3215
  gnu)
3216
    SYMVER_FILE=config/abi/pre/gnu.ver
3217
    AC_DEFINE(_GLIBCXX_SYMVER_GNU, 1,
3218
              [Define to use GNU versioning in the shared library.])
3219
    ;;
3220
  gnu-versioned-namespace)
3221
    libtool_VERSION=7:0:0
3222
    SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
3223
    AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
3224
              [Define to use GNU namespace versioning in the shared library.])
3225
    ;;
3226
  darwin)
3227
    SYMVER_FILE=config/abi/pre/gnu.ver
3228
    AC_DEFINE(_GLIBCXX_SYMVER_DARWIN, 1,
3229
              [Define to use darwin versioning in the shared library.])
3230
    ;;
3231
  sun)
3232
    SYMVER_FILE=config/abi/pre/gnu.ver
3233
    AC_DEFINE(_GLIBCXX_SYMVER_SUN, 1,
3234
              [Define to use Sun versioning in the shared library.])
3235
    ;;
3236
esac
3237
 
3238
if test x$enable_symvers != xno ; then
3239
  AC_DEFINE(_GLIBCXX_SYMVER, 1,
3240
         [Define to use symbol versioning in the shared library.])
3241
fi
3242
 
3243
AC_CACHE_CHECK([whether the target supports .symver directive],
3244
               glibcxx_cv_have_as_symver_directive, [
3245
  AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
3246
                 [], glibcxx_cv_have_as_symver_directive=yes,
3247
                 glibcxx_cv_have_as_symver_directive=no)])
3248
if test $glibcxx_cv_have_as_symver_directive = yes; then
3249
  AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
3250
    [Define to 1 if the target assembler supports .symver directive.])
3251
fi
3252
 
3253
AC_SUBST(SYMVER_FILE)
3254
AC_SUBST(port_specific_symbol_files)
3255
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS, test $enable_symvers != no)
3256
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers = gnu)
3257
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU_NAMESPACE, test $enable_symvers = gnu-versioned-namespace)
3258
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN, test $enable_symvers = darwin)
3259
GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_SUN, test $enable_symvers = sun)
3260
AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
3261
 
3262
if test $enable_symvers != no ; then
3263
   case ${target_os} in
3264
     # The Solaris 2 runtime linker doesn't support the GNU extension of
3265
     # binding the same symbol to different versions
3266
     solaris2*)
3267
       ;;
3268
     # Other platforms with GNU symbol versioning (GNU/Linux, more?) do.
3269
     *)
3270
       AC_DEFINE(HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT, 1,
3271
         [Define to 1 if the target runtime linker supports binding the same symbol to different versions.])
3272
       ;;
3273
    esac
3274
fi
3275
 
3276
# Now, set up compatibility support, if any.
3277
# In addition, need this to deal with std::size_t mangling in
3278
# src/compatibility.cc.  In a perfect world, could use
3279
# typeid(std::size_t).name()[0] to do direct substitution.
3280
AC_MSG_CHECKING([for size_t as unsigned int])
3281
ac_save_CFLAGS="$CFLAGS"
3282
CFLAGS="-Werror"
3283
AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
3284
                 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
3285
CFLAGS=$ac_save_CFLAGS
3286
if test "$glibcxx_size_t_is_i" = yes; then
3287
  AC_DEFINE(_GLIBCXX_SIZE_T_IS_UINT, 1, [Define if size_t is unsigned int.])
3288
fi
3289
AC_MSG_RESULT([$glibcxx_size_t_is_i])
3290
 
3291
AC_MSG_CHECKING([for ptrdiff_t as int])
3292
ac_save_CFLAGS="$CFLAGS"
3293
CFLAGS="-Werror"
3294
AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
3295
                 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
3296
CFLAGS=$ac_save_CFLAGS
3297
if test "$glibcxx_ptrdiff_t_is_i" = yes; then
3298
  AC_DEFINE(_GLIBCXX_PTRDIFF_T_IS_INT, 1, [Define if ptrdiff_t is int.])
3299
fi
3300
AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i])
3301
])
3302
 
3303
 
3304
dnl
3305
dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
3306
dnl We must stage the required headers so that they will be installed
3307
dnl with the library (unlike libgcc, the STL implementation is provided
3308
dnl solely within headers).  Since we must not inject random user-space
3309
dnl macro names into user-provided C++ code, we first stage into <file>-in
3310
dnl and process to <file> with an output command.  The reason for a two-
3311
dnl stage process here is to correctly handle $srcdir!=$objdir without
3312
dnl having to write complex code (the sed commands to clean the macro
3313
dnl namespace are complex and fragile enough as it is).  We must also
3314
dnl add a relative path so that -I- is supported properly.
3315
dnl
3316
AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
3317
  AC_MSG_CHECKING([for thread model used by GCC])
3318
  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3319
  AC_MSG_RESULT([$target_thread_file])
3320
])
3321
 
3322
 
3323
dnl
3324
dnl Check if gthread implementation defines the types and functions
3325
dnl required by the c++0x thread library.  Conforming gthread
3326
dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
3327
dnl
3328
dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
3329
dnl
3330
AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
3331
  GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
3332
 
3333
  if test x$enable_libstdcxx_threads = xauto ||
3334
     test x$enable_libstdcxx_threads = xyes; then
3335
 
3336
  AC_LANG_SAVE
3337
  AC_LANG_CPLUSPLUS
3338
 
3339
  ac_save_CXXFLAGS="$CXXFLAGS"
3340
  CXXFLAGS="$CXXFLAGS -fno-exceptions \
3341
        -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
3342
 
3343
  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
3344
  case $target_thread_file in
3345
    posix)
3346
      CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
3347
  esac
3348
 
3349
  AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
3350
 
3351
  AC_TRY_COMPILE([#include <unistd.h>],
3352
    [
3353
      // In case of POSIX threads check _POSIX_TIMEOUTS.
3354
      #if (defined(_PTHREADS) \
3355
          && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
3356
      #error
3357
      #endif
3358
    ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
3359
 
3360
  AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
3361
                     [Define to 1 if mutex_timedlock is available.])
3362
 
3363
  if test $ac_gthread_use_mutex_timedlock = 1 ; then res_mutex_timedlock=yes ;
3364
  else res_mutex_timedlock=no ; fi
3365
  AC_MSG_RESULT([$res_mutex_timedlock])
3366
 
3367
  AC_MSG_CHECKING([for gthreads library])
3368
 
3369
  AC_TRY_COMPILE([#include "gthr.h"],
3370
    [
3371
      #ifndef __GTHREADS_CXX0X
3372
      #error
3373
      #endif
3374
    ], [case $target_os in
3375
          # gthreads support breaks symbol versioning on Solaris 8/9 (PR
3376
          # libstdc++/52189).
3377
          solaris2.[[89]]*)
3378
            if test x$enable_symvers = xno; then
3379
              ac_has_gthreads=yes
3380
            elif test x$enable_libstdcxx_threads = xyes; then
3381
              AC_MSG_WARN([You have requested C++11 threads support, but])
3382
              AC_MSG_WARN([this breaks symbol versioning.])
3383
              ac_has_gthreads=yes
3384
            else
3385
              ac_has_gthreads=no
3386
            fi
3387
            ;;
3388
          *)
3389
            ac_has_gthreads=yes
3390
            ;;
3391
        esac],
3392
       [ac_has_gthreads=no])
3393
  else
3394
    ac_has_gthreads=no
3395
  fi
3396
 
3397
  AC_MSG_RESULT([$ac_has_gthreads])
3398
 
3399
  if test x"$ac_has_gthreads" = x"yes"; then
3400
    AC_DEFINE(_GLIBCXX_HAS_GTHREADS, 1,
3401
              [Define if gthreads library is available.])
3402
  fi
3403
 
3404
  CXXFLAGS="$ac_save_CXXFLAGS"
3405
  AC_LANG_RESTORE
3406
])
3407
 
3408
 
3409
# Check whether LC_MESSAGES is available in <locale.h>.
3410
# Ulrich Drepper <drepper@cygnus.com>, 1995.
3411
#
3412
# This file file be copied and used freely without restrictions.  It can
3413
# be used in projects which are not available under the GNU Public License
3414
# but which still want to provide support for the GNU gettext functionality.
3415
# Please note that the actual code is *not* freely available.
3416
AC_DEFUN([AC_LC_MESSAGES], [
3417
  AC_CHECK_HEADER(locale.h, [
3418
    AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
3419
      [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
3420
       ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
3421
    if test $ac_cv_val_LC_MESSAGES = yes; then
3422
      AC_DEFINE(HAVE_LC_MESSAGES, 1,
3423
                [Define if LC_MESSAGES is available in <locale.h>.])
3424
    fi
3425
  ])
3426
])
3427
 
3428
dnl
3429
dnl Check whether get_nprocs is available in <sys/sysinfo.h>, and define _GLIBCXX_USE_GET_NPROCS.
3430
dnl
3431
AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
3432
 
3433
  AC_LANG_SAVE
3434
  AC_LANG_CPLUSPLUS
3435
  ac_save_CXXFLAGS="$CXXFLAGS"
3436
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3437
 
3438
  AC_MSG_CHECKING([for get_nprocs])
3439
  AC_CACHE_VAL(glibcxx_cv_GET_NPROCS, [
3440
    GCC_TRY_COMPILE_OR_LINK(
3441
      [#include <sys/sysinfo.h>],
3442
      [int n = get_nprocs();],
3443
      [glibcxx_cv_GET_NPROCS=yes],
3444
      [glibcxx_cv_GET_NPROCS=no])
3445
  ])
3446
  if test $glibcxx_cv_GET_NPROCS = yes; then
3447
    AC_DEFINE(_GLIBCXX_USE_GET_NPROCS, 1, [Define if get_nprocs is available in <sys/sysinfo.h>.])
3448
  fi
3449
  AC_MSG_RESULT($glibcxx_cv_GET_NPROCS)
3450
 
3451
  CXXFLAGS="$ac_save_CXXFLAGS"
3452
  AC_LANG_RESTORE
3453
])
3454
 
3455
dnl
3456
dnl Check whether sysconf(_SC_NPROCESSORS_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROCESSORS_ONLN.
3457
dnl
3458
AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
3459
 
3460
  AC_LANG_SAVE
3461
  AC_LANG_CPLUSPLUS
3462
  ac_save_CXXFLAGS="$CXXFLAGS"
3463
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3464
 
3465
  AC_MSG_CHECKING([for _SC_NPROCESSORS_ONLN])
3466
  AC_CACHE_VAL(glibcxx_cv_SC_NPROCESSORS_ONLN, [
3467
    GCC_TRY_COMPILE_OR_LINK(
3468
      [#include <unistd.h>],
3469
      [int n = sysconf(_SC_NPROCESSORS_ONLN);],
3470
      [glibcxx_cv_SC_NPROCESSORS_ONLN=yes],
3471
      [glibcxx_cv_SC_NPROCESSORS_ONLN=no])
3472
  ])
3473
  if test $glibcxx_cv_SC_NPROCESSORS_ONLN = yes; then
3474
    AC_DEFINE(_GLIBCXX_USE_SC_NPROCESSORS_ONLN, 1, [Define if _SC_NPROCESSORS_ONLN  is available in <unistd.h>.])
3475
  fi
3476
  AC_MSG_RESULT($glibcxx_cv_SC_NPROCESSORS_ONLN)
3477
 
3478
  CXXFLAGS="$ac_save_CXXFLAGS"
3479
  AC_LANG_RESTORE
3480
])
3481
 
3482
dnl
3483
dnl Check whether sysconf(_SC_NPROC_ONLN) is available in <unistd.h>, and define _GLIBCXX_USE_SC_NPROC_ONLN.
3484
dnl
3485
AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
3486
 
3487
  AC_LANG_SAVE
3488
  AC_LANG_CPLUSPLUS
3489
  ac_save_CXXFLAGS="$CXXFLAGS"
3490
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3491
 
3492
  AC_MSG_CHECKING([for _SC_NPROC_ONLN])
3493
  AC_CACHE_VAL(glibcxx_cv_SC_NPROC_ONLN, [
3494
    GCC_TRY_COMPILE_OR_LINK(
3495
      [#include <unistd.h>],
3496
      [int n = sysconf(_SC_NPROC_ONLN);],
3497
      [glibcxx_cv_SC_NPROC_ONLN=yes],
3498
      [glibcxx_cv_SC_NPROC_ONLN=no])
3499
  ])
3500
  if test $glibcxx_cv_SC_NPROC_ONLN = yes; then
3501
    AC_DEFINE(_GLIBCXX_USE_SC_NPROC_ONLN, 1, [Define if _SC_NPROC_ONLN  is available in <unistd.h>.])
3502
  fi
3503
  AC_MSG_RESULT($glibcxx_cv_SC_NPROC_ONLN)
3504
 
3505
  CXXFLAGS="$ac_save_CXXFLAGS"
3506
  AC_LANG_RESTORE
3507
])
3508
 
3509
dnl
3510
dnl Check whether pthread_num_processors_np is available in <pthread.h>, and define _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP.
3511
dnl
3512
AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
3513
 
3514
  AC_LANG_SAVE
3515
  AC_LANG_CPLUSPLUS
3516
  ac_save_CXXFLAGS="$CXXFLAGS"
3517
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3518
 
3519
  AC_MSG_CHECKING([for pthreads_num_processors_np])
3520
  AC_CACHE_VAL(glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP, [
3521
    GCC_TRY_COMPILE_OR_LINK(
3522
      [#include <pthread.h>],
3523
      [int n = pthread_num_processors_np();],
3524
      [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=yes],
3525
      [glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP=no])
3526
  ])
3527
  if test $glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP = yes; then
3528
    AC_DEFINE(_GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP, 1, [Define if pthreads_num_processors_np is available in <pthread.h>.])
3529
  fi
3530
  AC_MSG_RESULT($glibcxx_cv_PTHREADS_NUM_PROCESSORS_NP)
3531
 
3532
  CXXFLAGS="$ac_save_CXXFLAGS"
3533
  AC_LANG_RESTORE
3534
])
3535
 
3536
dnl
3537
dnl Check whether sysctl is available in <pthread.h>, and define _GLIBCXX_USE_SYSCTL_HW_NCPU.
3538
dnl
3539
AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
3540
 
3541
  AC_LANG_SAVE
3542
  AC_LANG_CPLUSPLUS
3543
  ac_save_CXXFLAGS="$CXXFLAGS"
3544
  CXXFLAGS="$CXXFLAGS -fno-exceptions"
3545
 
3546
  AC_MSG_CHECKING([for hw.ncpu sysctl])
3547
  AC_CACHE_VAL(glibcxx_cv_SYSCTL_HW_NCPU, [
3548
    GCC_TRY_COMPILE_OR_LINK(
3549
      [
3550
       #include <stddef.h>
3551
       #include <sys/sysctl.h>
3552
       ],
3553
      [
3554
       int count;
3555
       size_t size = sizeof(count);
3556
       int mib[] = { CTL_HW, HW_NCPU };
3557
       sysctl(mib, 2, &count, &size, NULL, 0);
3558
      ],
3559
      [glibcxx_cv_SYSCTL_HW_NCPU=yes],
3560
      [glibcxx_cv_SYSCTL_HW_NCPU=no])
3561
  ])
3562
  if test $glibcxx_cv_SYSCTL_HW_NCPU = yes; then
3563
    AC_DEFINE(_GLIBCXX_USE_SYSCTL_HW_NCPU, 1, [Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>.])
3564
  fi
3565
  AC_MSG_RESULT($glibcxx_cv_SYSCTL_HW_NCPU)
3566
 
3567
  CXXFLAGS="$ac_save_CXXFLAGS"
3568
  AC_LANG_RESTORE
3569
])
3570
 
3571
dnl
3572
dnl Check to see if python pretty printing can be activated.
3573
dnl
3574
dnl --with-python-dir=dir
3575
dnl installs directory into $prefix/dir
3576
AC_DEFUN([GLIBCXX_ENABLE_PYTHON], [
3577
 
3578
AC_MSG_CHECKING([for custom python install directory])
3579
AC_ARG_WITH([python-dir],
3580
            AS_HELP_STRING([--with-python-dir],
3581
                           [the location to install Python modules. This path is relative starting from the prefix.]),
3582
            [with_python_dir=$withval], [with_python_dir="no"])
3583
AC_MSG_RESULT(${with_python_dir})
3584
 
3585
# Needed for installing Python modules during make install.
3586
python_mod_dir="${with_python_dir}"
3587
AC_SUBST(python_mod_dir)
3588
GLIBCXX_CONDITIONAL(ENABLE_PYTHONDIR, test $python_mod_dir != no)
3589
])
3590
 
3591
dnl
3592
dnl Check to see if -Werror is disabled.
3593
dnl
3594
dnl --enable-werror/--disable-werror
3595
AC_DEFUN([GLIBCXX_ENABLE_WERROR], [
3596
  AC_MSG_CHECKING([for -Werror])
3597
  GLIBCXX_ENABLE(werror,$1,,[turns on -Werror])
3598
  AC_MSG_RESULT($enable_werror)
3599
  GLIBCXX_CONDITIONAL(ENABLE_WERROR, test $enable_werror = yes)
3600
])
3601
 
3602
 
3603
# Macros from the top-level gcc directory.
3604
m4_include([../config/gc++filt.m4])
3605
m4_include([../config/tls.m4])

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.