acinclude.m4 revision 132720
1
2dnl
3dnl GLIBCXX_CONDITIONAL (NAME, SHELL-TEST)
4dnl
5dnl Exactly like AM_CONDITIONAL, but delays evaluation of the test until the
6dnl end of configure.  This lets tested variables be reassigned, and the
7dnl conditional will depend on the final state of the variable.  For a simple
8dnl example of why this is needed, see GLIBCXX_ENABLE_HOSTED.
9dnl
10m4_define([_m4_divert(glibcxx_diversion)], 8000)dnl
11AC_DEFUN([GLIBCXX_CONDITIONAL], [dnl
12  m4_divert_text([glibcxx_diversion],dnl
13   AM_CONDITIONAL([$1],[$2])
14  )dnl
15])dnl
16AC_DEFUN([GLIBCXX_EVALUATE_CONDITIONALS], [m4_undivert([glibcxx_diversion])])dnl
17
18
19dnl
20dnl Check to see what architecture and operating system we are compiling
21dnl for.  Also, if architecture- or OS-specific flags are required for
22dnl compilation, pick them up here.
23dnl
24AC_DEFUN([GLIBCXX_CHECK_HOST], [
25  . $glibcxx_srcdir/configure.host
26  AC_MSG_NOTICE([CPU config directory is $cpu_include_dir])
27  AC_MSG_NOTICE([OS config directory is $os_include_dir])
28])
29
30
31dnl
32dnl Initialize basic configure bits.
33dnl
34dnl Substs:
35dnl  multi_basedir
36dnl
37AC_DEFUN([GLIBCXX_TOPREL_CONFIGURE], [
38  # Sets up multi_basedir, which is srcdir/.. plus the usual
39  # "multi_source_toprel_bottom_adjust" lunacy as needed.
40  AM_ENABLE_MULTILIB(, ..)
41
42  # The generated code is exactly the same, except that automake's looks in
43  # ".. $srcdir/.." and autoconf's looks in multi_basedir.  Apparently other
44  # things are triggered on the presence of the two ...AUX_DIR[S], but I don't
45  # know what they are or what the other differences might be (and they keep
46  # changing anyhow).
47  #
48  # Looking in multi_basedir seems smarter, so actually execute that branch.
49  if false; then
50    # this is for automake
51    AC_CONFIG_AUX_DIR(..)
52  else
53    # this is for autoconf
54    AC_CONFIG_AUX_DIRS(${multi_basedir})
55  fi
56
57  dnl XXX Turn this on.
58  dnl AC_LANG_CPLUSPLUS
59])
60
61
62dnl
63dnl Initialize the rest of the library configury.  At this point we have
64dnl variables like $host.
65dnl
66dnl Sets:
67dnl  gcc_version          (x.y.z format)
68dnl  SUBDIRS
69dnl Substs:
70dnl  glibcxx_builddir     (absolute path)
71dnl  glibcxx_srcdir       (absolute path)
72dnl  toplevel_srcdir      (absolute path)
73dnl  with_cross_host
74dnl  with_newlib
75dnl  with_target_subdir
76dnl plus
77dnl  - the variables in GLIBCXX_CHECK_HOST / configure.host
78dnl  - default settings for all AM_CONFITIONAL test variables
79dnl  - lots of tools, like CC and CXX
80dnl
81AC_DEFUN([GLIBCXX_CONFIGURE], [
82  # Keep these sync'd with the list in Makefile.am.  The first provides an
83  # expandable list at autoconf time; the second provides an expandable list
84  # (i.e., shell variable) at configure time.
85  m4_define([glibcxx_SUBDIRS],[include libmath libsupc++ src po testsuite])
86  SUBDIRS='glibcxx_SUBDIRS'
87
88  # These need to be absolute paths, yet at the same time need to
89  # canonicalize only relative paths, because then amd will not unmount
90  # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
91  glibcxx_builddir=`${PWDCMD-pwd}`
92  case $srcdir in
93    [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;;
94    *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
95  esac
96  toplevel_srcdir=${glibcxx_srcdir}/..
97  AC_SUBST(glibcxx_builddir)
98  AC_SUBST(glibcxx_srcdir)
99  AC_SUBST(toplevel_srcdir)
100
101  # We use these options to decide which functions to include.  They are
102  # set from the top level.
103  AC_ARG_WITH([target-subdir],
104    AC_HELP_STRING([--with-target-subdir=SUBDIR],
105                   [configuring in a subdirectory]))
106
107  AC_ARG_WITH([cross-host],
108    AC_HELP_STRING([--with-cross-host=HOST],
109                   [configuring with a cross compiler]))
110
111  AC_ARG_WITH([newlib],
112    AC_HELP_STRING([--with-newlib],
113                   [assume newlib as a system C library]))
114
115  # We're almost certainly being configured before anything else which uses
116  # C++, so all of our AC_PROG_* discoveries will be cached.  It's vital that
117  # we not cache the value of CXX that we "discover" here, because it's set
118  # to something unique for us and libjava.  Other target libraries need to
119  # find CXX for themselves.  We yank the rug out from under the normal AC_*
120  # process by sneakily renaming the cache variable.  This also lets us debug
121  # the value of "our" CXX in postmortems.
122  #
123  # We must also force CXX to /not/ be a precious variable, otherwise the
124  # wrong (non-multilib-adjusted) value will be used in multilibs.  This
125  # little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS.  And as a side
126  # effect, CXXFLAGS is no longer automagically subst'd, so we have to do
127  # that ourselves.  Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
128  #
129  # -fno-builtin must be present here so that a non-conflicting form of
130  # std::exit can be guessed by AC_PROG_CXX, and used in later tests.
131
132  m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
133  m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
134  m4_define([_AC_ARG_VAR_PRECIOUS],[])
135  save_CXXFLAGS="$CXXFLAGS"
136  CXXFLAGS="$CXXFLAGS -fno-builtin"
137  AC_PROG_CC
138  AC_PROG_CXX
139  CXXFLAGS="$save_CXXFLAGS"
140  m4_rename([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
141  AC_SUBST(CFLAGS)
142  AC_SUBST(CXXFLAGS)
143
144  # For directory versioning (e.g., headers) and other variables.
145  AC_MSG_CHECKING([for GCC version number])
146  gcc_version=`$CXX -dumpversion`
147  AC_MSG_RESULT($gcc_version)
148
149  # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
150  # available).  Uncomment the next line to force a particular method.
151  AC_PROG_LN_S
152  #LN_S='cp -p'
153
154  AC_CHECK_TOOL(AS, as)
155  AC_CHECK_TOOL(AR, ar)
156  AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
157
158  AM_MAINTAINER_MODE
159
160  # Set up safe default values for all subsequent AM_CONDITIONAL tests
161  # which are themselves conditionally expanded.
162  ## (Right now, this only matters for enable_wchar_t, but nothing prevents
163  ## other macros from doing the same.  This should be automated.)  -pme
164  need_libmath=no
165  enable_wchar_t=no
166  #enable_libstdcxx_debug=no
167  #enable_libstdcxx_pch=no
168  #enable_cheaders=c
169  #c_compatibility=no
170  #enable_abi_check=no
171  #enable_symvers=no
172  #enable_hosted_libstdcxx=yes
173
174  # Find platform-specific directories containing configuration info.
175  # Also possibly modify flags used elsewhere, as needed by the platform.
176  GLIBCXX_CHECK_HOST
177])
178
179
180m4_include([linkage.m4])
181m4_include([../config/no-executables.m4])
182
183
184dnl
185dnl Tests for newer compiler features, or features that are present in newer
186dnl compiler versions but not older compiler versions still in use, should
187dnl be placed here.
188dnl
189dnl Defines:
190dnl  WERROR='-Werror' if requested and possible; g++'s that lack the
191dnl   new inlining code or the new system_header pragma will die on -Werror.
192dnl   Leave it out by default and use maint-mode to use it.
193dnl  SECTION_FLAGS='-ffunction-sections -fdata-sections' if
194dnl   compiler supports it and the user has not requested debug mode.
195dnl
196AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURES], [
197  # All these tests are for C++; save the language and the compiler flags.
198  # The CXXFLAGS thing is suspicious, but based on similar bits previously
199  # found in GLIBCXX_CONFIGURE.
200  AC_LANG_SAVE
201  AC_LANG_CPLUSPLUS
202  ac_test_CXXFLAGS="${CXXFLAGS+set}"
203  ac_save_CXXFLAGS="$CXXFLAGS"
204
205  # Check for maintainer-mode bits.
206  if test x"$USE_MAINTAINER_MODE" = xno; then
207    WERROR=''
208  else
209    WERROR='-Werror'
210  fi
211
212  # Check for -ffunction-sections -fdata-sections
213  AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
214  CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
215  AC_TRY_COMPILE(, [int foo;], [ac_fdsections=yes], [ac_fdsections=no])
216  if test "$ac_test_CXXFLAGS" = set; then
217    CXXFLAGS="$ac_save_CXXFLAGS"
218  else
219    # this is the suspicious part
220    CXXFLAGS=''
221  fi
222  if test x"$ac_fdsections" = x"yes"; then
223    SECTION_FLAGS='-ffunction-sections -fdata-sections'
224  fi
225  AC_MSG_RESULT($ac_fdsections)
226
227  AC_LANG_RESTORE
228  AC_SUBST(WERROR)
229  AC_SUBST(SECTION_FLAGS)
230])
231
232
233dnl
234dnl If GNU ld is in use, check to see if tricky linker opts can be used.  If
235dnl the native linker is in use, all variables will be defined to something
236dnl safe (like an empty string).
237dnl
238dnl Defines:
239dnl  SECTION_LDFLAGS='-Wl,--gc-sections' if possible
240dnl  OPT_LDFLAGS='-Wl,-O1' if possible
241dnl  LD (as a side effect of testing)
242dnl Sets:
243dnl  with_gnu_ld
244dnl  glibcxx_gnu_ld_version (possibly)
245dnl
246dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
247dnl set glibcxx_gnu_ld_version to 12345.  Zeros cause problems.
248dnl
249AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
250  # If we're not using GNU ld, then there's no point in even trying these
251  # tests.  Check for that first.  We should have already tested for gld
252  # by now (in libtool), but require it now just to be safe...
253  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
254  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
255  AC_REQUIRE([AC_PROG_LD])
256  AC_REQUIRE([AC_PROG_AWK])
257
258  # The name set by libtool depends on the version of libtool.  Shame on us
259  # for depending on an impl detail, but c'est la vie.  Older versions used
260  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
261  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
262  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
263  # set (hence we're using an older libtool), then set it.
264  if test x${with_gnu_ld+set} != xset; then
265    if test x${ac_cv_prog_gnu_ld+set} != xset; then
266      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
267      with_gnu_ld=no
268    else
269      with_gnu_ld=$ac_cv_prog_gnu_ld
270    fi
271  fi
272
273  # Start by getting the version number.  I think the libtool test already
274  # does some of this, but throws away the result.
275  changequote(,)
276  ldver=`$LD --version 2>/dev/null | head -1 | \
277         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
278  changequote([,])
279  glibcxx_gnu_ld_version=`echo $ldver | \
280         $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
281
282  # Set --gc-sections.
283  if test "$with_gnu_ld" = "notbroken"; then
284    # GNU ld it is!  Joy and bunny rabbits!
285
286    # All these tests are for C++; save the language and the compiler flags.
287    # Need to do this so that g++ won't try to link in libstdc++
288    ac_test_CFLAGS="${CFLAGS+set}"
289    ac_save_CFLAGS="$CFLAGS"
290    CFLAGS='-x c++  -Wl,--gc-sections'
291
292    # Check for -Wl,--gc-sections
293    # XXX This test is broken at the moment, as symbols required for linking
294    # are now in libsupc++ (not built yet).  In addition, this test has
295    # cored on solaris in the past.  In addition, --gc-sections doesn't
296    # really work at the moment (keeps on discarding used sections, first
297    # .eh_frame and now some of the glibc sections for iconv).
298    # Bzzzzt.  Thanks for playing, maybe next time.
299    AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
300    AC_TRY_RUN([
301     int main(void)
302     {
303       try { throw 1; }
304       catch (...) { };
305       return 0;
306     }
307    ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
308    if test "$ac_test_CFLAGS" = set; then
309      CFLAGS="$ac_save_CFLAGS"
310    else
311      # this is the suspicious part
312      CFLAGS=''
313    fi
314    if test "$ac_sectionLDflags" = "yes"; then
315      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
316    fi
317    AC_MSG_RESULT($ac_sectionLDflags)
318  fi
319
320  # Set linker optimization flags.
321  if test x"$with_gnu_ld" = x"yes"; then
322    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
323  fi
324
325  AC_SUBST(SECTION_LDFLAGS)
326  AC_SUBST(OPT_LDFLAGS)
327])
328
329
330dnl
331dnl Check to see if this target can enable the wchar_t parts.
332dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
333dnl must have been previously checked.)  By default, wide characters are
334dnl disabled.
335dnl
336dnl Defines:
337dnl  HAVE_MBSTATE_T if mbstate_t is not in wchar.h
338dnl  _GLIBCXX_USE_WCHAR_T if all the bits are found.
339dnl
340AC_DEFUN([GLIBCXX_CHECK_WCHAR_T_SUPPORT], [
341  # Test wchar.h for mbstate_t, which is needed for char_traits and
342  # others even if wchar_t support is not on.
343  AC_MSG_CHECKING([for mbstate_t])
344  AC_TRY_COMPILE([#include <wchar.h>],
345  [mbstate_t teststate;],
346  have_mbstate_t=yes, have_mbstate_t=no)
347  AC_MSG_RESULT($have_mbstate_t)
348  if test x"$have_mbstate_t" = xyes; then
349    AC_DEFINE(HAVE_MBSTATE_T)
350  fi
351
352  # Sanity check for existence of ISO C99 headers for extended encoding.
353  AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
354  AC_CHECK_HEADERS(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
355
356  # Only continue checking if the ISO C99 headers exist and support is on.
357  if test x"$ac_has_wchar_h" = xyes &&
358     test x"$ac_has_wctype_h" = xyes &&
359     test x"$enable_c_mbchar" != xno; then
360
361    # Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
362    # numeric_limits can instantiate type_traits<wchar_t>
363    AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
364    AC_TRY_COMPILE([#include <wchar.h>],
365    [int i = WCHAR_MIN; int j = WCHAR_MAX;],
366    has_wchar_minmax=yes, has_wchar_minmax=no)
367    AC_MSG_RESULT($has_wchar_minmax)
368
369    # Test wchar.h for WEOF, which is what we use to determine whether
370    # to specialize for char_traits<wchar_t> or not.
371    AC_MSG_CHECKING([for WEOF])
372    AC_TRY_COMPILE([
373      #include <wchar.h>
374      #include <stddef.h>],
375    [wint_t i = WEOF;],
376    has_weof=yes, has_weof=no)
377    AC_MSG_RESULT($has_weof)
378
379    # Tests for wide character functions used in char_traits<wchar_t>.
380    ac_wfuncs=yes
381    AC_CHECK_FUNCS([wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset],
382    [],[ac_wfuncs=no])
383
384    # Checks for names injected into std:: by the c_std headers.
385    AC_CHECK_FUNCS([btowc wctob fgetwc fgetws fputwc fputws fwide \
386    fwprintf fwscanf swprintf swscanf vfwprintf vswprintf \
387    vwprintf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
388    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstol \
389    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
390    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr],
391    [],[ac_wfuncs=no])
392
393    # Checks for wide character functions that are not required
394    # for basic wchar_t support.  Don't disable support if they are missing.
395    # Injection of these is wrapped with guard macros.
396    AC_CHECK_FUNCS([vfwscanf vswscanf vwscanf wcstof iswblank],[],[])
397
398    AC_MSG_CHECKING([for ISO C99 wchar_t support])
399    if test x"$has_weof" = xyes &&
400       test x"$has_wchar_minmax" = xyes &&
401       test x"$ac_wfuncs" = xyes;
402    then
403      ac_isoC99_wchar_t=yes
404    else
405      ac_isoC99_wchar_t=no
406    fi
407    AC_MSG_RESULT($ac_isoC99_wchar_t)
408
409    # Use iconv for wchar_t to char conversions. As such, check for
410    # X/Open Portability Guide, version 2 features (XPG2).
411    AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
412    AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
413
414    # Check for existence of libiconv.a providing XPG2 wchar_t support.
415    AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
416    ac_save_LIBS="$LIBS"
417    LIBS="$LIBS $libiconv"
418
419    AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo],
420    [ac_XPG2funcs=yes], [ac_XPG2funcs=no])
421
422    LIBS="$ac_save_LIBS"
423
424    AC_MSG_CHECKING([for XPG2 wchar_t support])
425    if test x"$ac_has_iconv_h" = xyes &&
426       test x"$ac_has_langinfo_h" = xyes &&
427       test x"$ac_XPG2funcs" = xyes;
428    then
429      ac_XPG2_wchar_t=yes
430    else
431      ac_XPG2_wchar_t=no
432    fi
433    AC_MSG_RESULT($ac_XPG2_wchar_t)
434
435    # At the moment, only enable wchar_t specializations if all the
436    # above support is present.
437    if test x"$ac_isoC99_wchar_t" = xyes &&
438       test x"$ac_XPG2_wchar_t" = xyes;
439    then
440      AC_DEFINE(_GLIBCXX_USE_WCHAR_T)
441      enable_wchar_t=yes
442    fi
443  fi
444  AC_MSG_CHECKING([for enabled wchar_t specializations])
445  AC_MSG_RESULT($enable_wchar_t)
446])
447
448
449dnl
450dnl Check for headers for, and arguments to, the setrlimit() function.
451dnl Used only in testsuite_hooks.h.  Called from GLIBCXX_CONFIGURE_TESTSUITE.
452dnl
453dnl Defines:
454dnl  _GLIBCXX_RES_LIMITS if we can set artificial resource limits 
455dnl  various HAVE_LIMIT_* for individual limit names
456dnl
457AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
458  AC_TRY_COMPILE(
459    [#include <unistd.h>
460     #include <sys/time.h>
461     #include <sys/resource.h>
462    ],
463    [ int f = RLIMIT_$1 ; ],
464    [glibcxx_mresult=1], [glibcxx_mresult=0])
465  AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
466                     [Only used in build directory testsuite_hooks.h.])
467])
468
469AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
470  setrlimit_have_headers=yes
471  AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
472                   [],
473                   [setrlimit_have_headers=no])
474  # If don't have the headers, then we can't run the tests now, and we
475  # won't be seeing any of these during testsuite compilation.
476  if test $setrlimit_have_headers = yes; then
477    # Can't do these in a loop, else the resulting syntax is wrong.
478    GLIBCXX_CHECK_SETRLIMIT_ancilliary(DATA)
479    GLIBCXX_CHECK_SETRLIMIT_ancilliary(RSS)
480    GLIBCXX_CHECK_SETRLIMIT_ancilliary(VMEM)
481    GLIBCXX_CHECK_SETRLIMIT_ancilliary(AS)
482    GLIBCXX_CHECK_SETRLIMIT_ancilliary(FSIZE)
483
484    # Check for rlimit, setrlimit.
485    AC_CACHE_VAL(ac_setrlimit, [
486      AC_TRY_COMPILE(
487        [#include <unistd.h>
488         #include <sys/time.h>
489         #include <sys/resource.h>
490        ],
491        [struct rlimit r;
492         setrlimit(0, &r);],
493        [ac_setrlimit=yes], [ac_setrlimit=no])
494    ])
495  fi
496
497  AC_MSG_CHECKING([for testsuite resource limits support])
498  if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
499    ac_res_limits=yes
500    AC_DEFINE(_GLIBCXX_RES_LIMITS)
501  else
502    ac_res_limits=no
503  fi
504  AC_MSG_RESULT($ac_res_limits)
505])
506
507
508dnl
509dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
510dnl Define HAVE_S_ISREG / HAVE_S_IFREG appropriately.
511dnl
512AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
513  AC_CACHE_VAL(glibcxx_cv_S_ISREG, [
514    AC_TRY_LINK(
515      [#include <sys/stat.h>],
516      [struct stat buffer;
517       fstat(0, &buffer);
518       S_ISREG(buffer.st_mode);],
519      [glibcxx_cv_S_ISREG=yes],
520      [glibcxx_cv_S_ISREG=no])
521  ])
522  AC_CACHE_VAL(glibcxx_cv_S_IFREG, [
523    AC_TRY_LINK(
524      [#include <sys/stat.h>],
525      [struct stat buffer;
526       fstat(0, &buffer);
527       S_IFREG & buffer.st_mode;],
528      [glibcxx_cv_S_IFREG=yes],
529      [glibcxx_cv_S_IFREG=no])
530  ])
531  if test $glibcxx_cv_S_ISREG = yes; then
532    AC_DEFINE(HAVE_S_ISREG)
533  elif test $glibcxx_cv_S_IFREG = yes; then
534    AC_DEFINE(HAVE_S_IFREG)
535  fi
536])
537
538
539dnl
540dnl Check whether poll is available in <poll.h>, and define HAVE_POLL.
541dnl
542AC_DEFUN([GLIBCXX_CHECK_POLL], [
543  AC_CACHE_VAL(glibcxx_cv_POLL, [
544    AC_TRY_LINK(
545      [#include <poll.h>],
546      [struct pollfd pfd[1];
547       pfd[0].events = POLLIN;
548       poll(pfd, 1, 0);],
549      [glibcxx_cv_POLL=yes],
550      [glibcxx_cv_POLL=no])
551  ])
552  if test $glibcxx_cv_POLL = yes; then
553    AC_DEFINE(HAVE_POLL)
554  fi
555])
556
557
558dnl
559dnl Check whether writev is available in <sys/uio.h>, and define HAVE_WRITEV.
560dnl
561AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
562  AC_CACHE_VAL(glibcxx_cv_WRITEV, [
563    AC_TRY_LINK(
564      [#include <sys/uio.h>],
565      [struct iovec iov[2];
566       writev(0, iov, 0);],
567      [glibcxx_cv_WRITEV=yes],
568      [glibcxx_cv_WRITEV=no])
569  ])
570  if test $glibcxx_cv_WRITEV = yes; then
571    AC_DEFINE(HAVE_WRITEV)
572  fi
573])
574
575
576dnl
577dnl Check whether int64_t is available in <stdint.h>, and define HAVE_INT64_T.
578dnl
579AC_DEFUN([GLIBCXX_CHECK_INT64_T], [
580  AC_CACHE_VAL(glibcxx_cv_INT64_T, [
581    AC_TRY_COMPILE(
582      [#include <stdint.h>],
583      [int64_t var;],
584      [glibcxx_cv_INT64_T=yes],
585      [glibcxx_cv_INT64_T=no])
586  ])
587  if test $glibcxx_cv_INT64_T = yes; then
588    AC_DEFINE(HAVE_INT64_T)
589  fi
590])
591
592
593dnl
594dnl Check whether LFS support is available.
595dnl
596AC_DEFUN([GLIBCXX_CHECK_LFS], [
597  AC_LANG_SAVE
598  AC_LANG_CPLUSPLUS
599  ac_save_CXXFLAGS="$CXXFLAGS"
600  CXXFLAGS="$CXXFLAGS -fno-exceptions"	
601  AC_CACHE_VAL(glibcxx_cv_LFS, [
602    AC_TRY_LINK(
603      [#include <unistd.h>
604       #include <stdio.h>
605      ],
606      [FILE* fp;
607       fopen64("t", "w");
608       fseeko64(fp, 0, SEEK_CUR);
609       ftello64(fp);
610       lseek64(1, 0, SEEK_CUR);],	
611      [glibcxx_cv_LFS=yes],
612      [glibcxx_cv_LFS=no])
613  ])
614  if test $glibcxx_cv_LFS = yes; then
615    AC_DEFINE(_GLIBCXX_USE_LFS)
616  fi
617  CXXFLAGS="$ac_save_CXXFLAGS"
618  AC_LANG_RESTORE
619])
620
621
622dnl
623dnl Does any necessary configuration of the testsuite directory.  Generates
624dnl the testsuite_hooks.h header.
625dnl
626dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
627dnl
628dnl Sets:
629dnl  enable_abi_check / GLIBCXX_TEST_ABI
630dnl Substs:
631dnl  baseline_dir
632dnl
633AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
634  if $GLIBCXX_IS_NATIVE && test $is_hosted = yes; then
635    # Do checks for resource limit functions.
636    GLIBCXX_CHECK_SETRLIMIT
637
638    # Look for setenv, so that extended locale tests can be performed.
639    GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
640
641    if test $enable_symvers = no; then
642      enable_abi_check=no
643    else
644      case "$host" in
645        *-*-cygwin*)
646          enable_abi_check=no ;;
647        *)
648          enable_abi_check=yes ;;
649      esac
650    fi
651  else
652    # Only build this as native, since automake does not understand
653    # CXX_FOR_BUILD.
654    enable_abi_check=no
655  fi
656
657  # Export file names for ABI checking.
658  baseline_dir="$glibcxx_srcdir/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)"
659  AC_SUBST(baseline_dir)
660
661  GLIBCXX_CONDITIONAL(GLIBCXX_TEST_WCHAR_T, test $enable_wchar_t = yes)
662  GLIBCXX_CONDITIONAL(GLIBCXX_TEST_ABI, test $enable_abi_check = yes)
663])
664
665
666dnl
667dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
668dnl
669dnl Substs:
670dnl  GLIBCXX_INCLUDES
671dnl  TOPLEVEL_INCLUDES
672dnl
673AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
674  # Used for every C++ compile we perform.
675  GLIBCXX_INCLUDES="\
676-I$glibcxx_builddir/include/$host_alias \
677-I$glibcxx_builddir/include \
678-I$glibcxx_srcdir/libsupc++"
679
680  # For Canadian crosses, pick this up too.
681  if test $CANADIAN = yes; then
682    GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
683  fi
684
685  # Stuff in the actual top level.  Currently only used by libsupc++ to
686  # get unwind* headers from the gcc dir.
687  #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
688  TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
689
690  # Now, export this to all the little Makefiles....
691  AC_SUBST(GLIBCXX_INCLUDES)
692  AC_SUBST(TOPLEVEL_INCLUDES)
693])
694
695
696dnl
697dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
698dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
699dnl
700dnl Substs:
701dnl  OPTIMIZE_CXXFLAGS
702dnl  WARN_FLAGS
703dnl
704AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
705  # Optimization flags that are probably a good idea for thrill-seekers. Just
706  # uncomment the lines below and make, everything else is ready to go...
707  # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
708  OPTIMIZE_CXXFLAGS=
709  AC_SUBST(OPTIMIZE_CXXFLAGS)
710
711  WARN_FLAGS='-Wall -W -Wwrite-strings -Wcast-qual'
712  AC_SUBST(WARN_FLAGS)
713])
714
715
716dnl
717dnl All installation directory information is determined here.
718dnl
719dnl Substs:
720dnl  gxx_install_dir
721dnl  glibcxx_prefixdir
722dnl  glibcxx_toolexecdir
723dnl  glibcxx_toolexeclibdir
724dnl
725dnl Assumes cross_compiling bits already done, and with_cross_host in
726dnl particular.
727dnl
728AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
729  glibcxx_toolexecdir=no
730  glibcxx_toolexeclibdir=no
731  glibcxx_prefixdir=$prefix
732
733  AC_MSG_CHECKING([for gxx-include-dir])
734  AC_ARG_WITH([gxx-include-dir],
735    AC_HELP_STRING([--with-gxx-include-dir=DIR],
736                   [installation directory for include files]),
737    [case "$withval" in
738      yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
739      no)  gxx_include_dir=no ;;
740      *)   gxx_include_dir=$withval ;;
741     esac],
742    [gxx_include_dir=no])
743  AC_MSG_RESULT($gxx_include_dir)
744
745  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
746  AC_ARG_ENABLE([version-specific-runtime-libs],
747    AC_HELP_STRING([--enable-version-specific-runtime-libs],
748                   [Specify that runtime libraries should be installed in a compiler-specific directory]),
749    [case "$enableval" in
750      yes) version_specific_libs=yes ;;
751      no)  version_specific_libs=no ;;
752      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
753     esac],
754    [version_specific_libs=no])
755  AC_MSG_RESULT($version_specific_libs)
756
757  # Default case for install directory for include files.
758  if test $version_specific_libs = no && test $gxx_include_dir = no; then
759    gxx_include_dir='${prefix}'/include/c++/${gcc_version}
760  fi
761
762  # Version-specific runtime libs processing.
763  if test $version_specific_libs = yes; then
764    # Need the gcc compiler version to know where to install libraries
765    # and header files if --enable-version-specific-runtime-libs option
766    # is selected.  FIXME: these variables are misnamed, there are
767    # no executables installed in _toolexecdir or _toolexeclibdir.
768    if test x"$gxx_include_dir" = x"no"; then
769      gxx_include_dir='${libdir}/gcc/${host_alias}/'$gcc_version/include/c++
770    fi
771    glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
772    glibcxx_toolexeclibdir='${toolexecdir}/'$gcc_version'$(MULTISUBDIR)'
773  fi
774
775  # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
776  # Install a library built with a cross compiler in tooldir, not libdir.
777  if test x"$glibcxx_toolexecdir" = x"no"; then
778    if test -n "$with_cross_host" &&
779       test x"$with_cross_host" != x"no"; then
780      glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
781      glibcxx_toolexeclibdir='${toolexecdir}/lib'
782    else
783      glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
784      glibcxx_toolexeclibdir='${libdir}'
785    fi
786    multi_os_directory=`$CXX -print-multi-os-directory`
787    case $multi_os_directory in
788      .) ;; # Avoid trailing /.
789      *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
790    esac
791  fi
792
793  AC_MSG_CHECKING([for install location])
794  AC_MSG_RESULT($gxx_include_dir)
795
796  AC_SUBST(glibcxx_prefixdir)
797  AC_SUBST(gxx_include_dir)
798  AC_SUBST(glibcxx_toolexecdir)
799  AC_SUBST(glibcxx_toolexeclibdir)
800])
801
802
803dnl
804dnl GLIBCXX_ENABLE
805dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
806dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
807dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
808dnl
809dnl See docs/html/17_intro/configury.html#enable for documentation.
810dnl
811m4_define([GLIBCXX_ENABLE],[dnl
812m4_define([_g_switch],[--enable-$1])dnl
813m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
814 AC_ARG_ENABLE($1,_g_help,
815  m4_bmatch([$5],
816   [^permit ],
817     [[
818      case "$enableval" in
819       m4_bpatsubst([$5],[permit ])) ;;
820       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
821          dnl Idea for future:  generate a URL pointing to
822          dnl "onlinedocs/configopts.html#whatever"
823      esac
824     ]],
825   [^$],
826     [[
827      case "$enableval" in
828       yes|no) ;;
829       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
830      esac
831     ]],
832   [[$5]]),
833  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
834m4_undefine([_g_switch])dnl
835m4_undefine([_g_help])dnl
836])
837
838
839dnl
840dnl Check for ISO/IEC 9899:1999 "C99" support.
841dnl
842dnl --enable-c99 defines _GLIBCXX_USE_C99
843dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
844dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
845dnl       Where DEFAULT is either `yes' or `no'.
846dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
847dnl
848AC_DEFUN([GLIBCXX_ENABLE_C99], [
849  GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
850
851  AC_LANG_SAVE
852  AC_LANG_CPLUSPLUS
853
854  # Check for the existence of <math.h> functions used if C99 is enabled.
855  ac_c99_math=yes;
856  AC_MSG_CHECKING([for ISO C99 support in <math.h>])
857  AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
858  AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
859  AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
860  AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
861  AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
862  AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
863  AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
864  AC_TRY_COMPILE([#include <math.h>],
865                 [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
866  AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
867  AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
868  AC_TRY_COMPILE([#include <math.h>],
869                 [islessgreater(0.0,0.0);],, [ac_c99_math=no])
870  AC_TRY_COMPILE([#include <math.h>],
871                 [isunordered(0.0,0.0);],, [ac_c99_math=no])
872  AC_MSG_RESULT($ac_c99_math)
873
874  if test x"$ac_c99_math" = x"yes"; then
875    AC_DEFINE(_GLIBCXX_USE_C99_MATH)
876  fi
877
878  # Check for the existence in <stdio.h> of vscanf, et. al.
879  ac_c99_stdio=yes;
880  AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
881  AC_TRY_COMPILE([#include <stdio.h>],
882                 [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
883  AC_TRY_COMPILE([#include <stdio.h>
884                  #include <stdarg.h>
885                  void foo(char* fmt, ...)
886                  {va_list args; va_start(args, fmt);
887                  vfscanf(stderr, "%i", args);}],
888                  [],, [ac_c99_stdio=no])
889  AC_TRY_COMPILE([#include <stdio.h>
890                  #include <stdarg.h>
891                  void foo(char* fmt, ...)
892                  {va_list args; va_start(args, fmt);
893                  vscanf("%i", args);}],
894                  [],, [ac_c99_stdio=no])
895  AC_TRY_COMPILE([#include <stdio.h>
896                  #include <stdarg.h>
897                  void foo(char* fmt, ...)
898                  {va_list args; va_start(args, fmt);
899                  vsnprintf(fmt, 0, "%i", args);}],
900                  [],, [ac_c99_stdio=no])
901  AC_TRY_COMPILE([#include <stdio.h>
902                  #include <stdarg.h>
903                  void foo(char* fmt, ...)
904                  {va_list args; va_start(args, fmt);
905                  vsscanf(fmt, "%i", args);}],
906                  [],, [ac_c99_stdio=no])
907  AC_MSG_RESULT($ac_c99_stdio)
908
909  # Check for the existence in <stdlib.h> of lldiv_t, et. al.
910  ac_c99_stdlib=yes;
911  AC_MSG_CHECKING([for lldiv_t declaration])
912  AC_CACHE_VAL(ac_c99_lldiv_t, [
913  AC_TRY_COMPILE([#include <stdlib.h>],
914                   [ lldiv_t mydivt;],
915                   [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
916  ])
917  AC_MSG_RESULT($ac_c99_lldiv_t)
918
919  AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
920  AC_TRY_COMPILE([#include <stdlib.h>],
921                 [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
922  AC_TRY_COMPILE([#include <stdlib.h>],
923                 [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
924  AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
925  AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
926  AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
927  AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
928  if test x"$ac_c99_lldiv_t" = x"no"; then
929    ac_c99_stdlib=no;
930  fi;
931  AC_MSG_RESULT($ac_c99_stdlib)
932
933  # Check for the existence of <wchar.h> functions used if C99 is enabled.
934  # XXX the wchar.h checks should be rolled into the general C99 bits.
935  ac_c99_wchar=yes;
936  AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
937  AC_TRY_COMPILE([#include <wchar.h>],
938                 [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
939  AC_TRY_COMPILE([#include <wchar.h>],
940                 [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
941  AC_TRY_COMPILE([#include <wchar.h>],
942                 [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
943  AC_MSG_RESULT($ac_c99_wchar)
944
945  AC_MSG_CHECKING([for enabled ISO C99 support])
946  if test x"$ac_c99_math" = x"no" ||
947     test x"$ac_c99_stdio" = x"no" ||
948     test x"$ac_c99_stdlib" = x"no" ||
949     test x"$ac_c99_wchar" = x"no"; then
950    enable_c99=no;
951  fi;
952  AC_MSG_RESULT($enable_c99)
953
954  if test x"$ac_99_math" = x"yes"; then
955    AC_DEFINE(_GLIBCXX_USE_C99_MATH)
956  fi
957
958  # Option parsed, now set things appropriately
959  if test x"$enable_c99" = x"yes"; then
960    AC_DEFINE(_GLIBCXX_USE_C99)
961  fi
962
963  AC_LANG_RESTORE
964])
965
966
967dnl
968dnl Check for what type of C headers to use.
969dnl
970dnl --enable-cheaders= [does stuff].
971dnl --disable-cheaders [does not do anything, really].
972dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
973dnl       Where DEFAULT is either `c' or `c_std'.
974dnl
975AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
976  GLIBCXX_ENABLE(cheaders,$1,[=KIND],
977    [construct "C" headers for g++], [permit c|c_std])
978  AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
979
980  C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
981
982  AC_SUBST(C_INCLUDE_DIR)
983  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
984  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
985  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
986])
987
988
989dnl
990dnl Check for which locale library to use.  The choice is mapped to
991dnl a subdirectory of config/locale.
992dnl
993dnl Default is generic.
994dnl
995AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
996  AC_MSG_CHECKING([for C locale to use])
997  GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
998    [use MODEL for target locale package],
999    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
1000  
1001  # If they didn't use this option switch, or if they specified --enable
1002  # with no specific model, we'll have to look for one.  If they
1003  # specified --disable (???), do likewise.
1004  if test $enable_clocale = no || test $enable_clocale = yes; then
1005     enable_clocale=auto
1006  fi
1007
1008  # Either a known package, or "auto"
1009  enable_clocale_flag=$enable_clocale
1010
1011  # Probe for locale support if no specific model is specified.
1012  # Default to "generic".
1013  if test $enable_clocale_flag = auto; then
1014    case x${target_os} in
1015      xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
1016        AC_EGREP_CPP([_GLIBCXX_ok], [
1017        #include <features.h>
1018        #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1019          _GLIBCXX_ok
1020        #endif
1021        ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1022
1023        # Test for bugs early in glibc-2.2.x series
1024          if test x$enable_clocale_flag = xgnu; then
1025          AC_TRY_RUN([
1026          #define _GNU_SOURCE 1
1027          #include <locale.h>
1028          #include <string.h>
1029          #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1030          extern __typeof(newlocale) __newlocale;
1031          extern __typeof(duplocale) __duplocale;
1032          extern __typeof(strcoll_l) __strcoll_l;
1033          #endif
1034          int main()
1035          {
1036              const char __one[] = "�uglein Augmen";
1037              const char __two[] = "�uglein";
1038              int i;
1039              int j;
1040              __locale_t        loc;
1041               __locale_t        loc_dup;
1042              loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1043              loc_dup = __duplocale(loc);
1044              i = __strcoll_l(__one, __two, loc);
1045              j = __strcoll_l(__one, __two, loc_dup);
1046              return 0;
1047          }
1048          ],
1049          [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1050          [enable_clocale_flag=generic])
1051          fi
1052
1053        # ... at some point put __strxfrm_l tests in as well.
1054        ;;
1055      *)
1056        enable_clocale_flag=generic
1057        ;;
1058    esac
1059  fi
1060
1061  # Deal with gettext issues.  Default to not using it (=no) until we detect
1062  # support for it later.  Let the user turn it off via --e/d, but let that
1063  # default to on for easier handling.
1064  USE_NLS=no
1065  AC_ARG_ENABLE(nls,
1066    AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1067    [],
1068    [enable_nls=yes])
1069
1070  # Set configure bits for specified locale package
1071  case ${enable_clocale_flag} in
1072    generic)
1073      AC_MSG_RESULT(generic)
1074
1075      CLOCALE_H=config/locale/generic/c_locale.h
1076      CLOCALE_CC=config/locale/generic/c_locale.cc
1077      CCODECVT_H=config/locale/generic/codecvt_specializations.h
1078      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1079      CCOLLATE_CC=config/locale/generic/collate_members.cc
1080      CCTYPE_CC=config/locale/generic/ctype_members.cc
1081      CMESSAGES_H=config/locale/generic/messages_members.h
1082      CMESSAGES_CC=config/locale/generic/messages_members.cc
1083      CMONEY_CC=config/locale/generic/monetary_members.cc
1084      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1085      CTIME_H=config/locale/generic/time_members.h
1086      CTIME_CC=config/locale/generic/time_members.cc
1087      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1088      ;;
1089    gnu)
1090      AC_MSG_RESULT(gnu)
1091
1092      # Declare intention to use gettext, and add support for specific
1093      # languages.
1094      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1095      ALL_LINGUAS="de fr"
1096
1097      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1098      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1099      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1100        USE_NLS=yes
1101      fi
1102      # Export the build objects.
1103      for ling in $ALL_LINGUAS; do \
1104        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
1105        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
1106      done
1107      AC_SUBST(glibcxx_MOFILES)
1108      AC_SUBST(glibcxx_POFILES)
1109
1110      CLOCALE_H=config/locale/gnu/c_locale.h
1111      CLOCALE_CC=config/locale/gnu/c_locale.cc
1112      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1113      CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1114      CCOLLATE_CC=config/locale/gnu/collate_members.cc
1115      CCTYPE_CC=config/locale/gnu/ctype_members.cc
1116      CMESSAGES_H=config/locale/gnu/messages_members.h
1117      CMESSAGES_CC=config/locale/gnu/messages_members.cc
1118      CMONEY_CC=config/locale/gnu/monetary_members.cc
1119      CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1120      CTIME_H=config/locale/gnu/time_members.h
1121      CTIME_CC=config/locale/gnu/time_members.cc
1122      CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1123      ;;
1124    ieee_1003.1-2001)
1125      AC_MSG_RESULT(IEEE 1003.1)
1126
1127      CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1128      CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1129      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1130      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1131      CCOLLATE_CC=config/locale/generic/collate_members.cc
1132      CCTYPE_CC=config/locale/generic/ctype_members.cc
1133      CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1134      CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1135      CMONEY_CC=config/locale/generic/monetary_members.cc
1136      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1137      CTIME_H=config/locale/generic/time_members.h
1138      CTIME_CC=config/locale/generic/time_members.cc
1139      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1140      ;;
1141  esac
1142
1143  # This is where the testsuite looks for locale catalogs, using the
1144  # -DLOCALEDIR define during testsuite compilation.
1145  glibcxx_localedir=${glibcxx_builddir}/po/share/locale
1146  AC_SUBST(glibcxx_localedir)
1147
1148  # A standalone libintl (e.g., GNU libintl) may be in use.
1149  if test $USE_NLS = yes; then
1150    AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
1151    AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
1152  fi
1153  if test $USE_NLS = yes; then
1154    AC_DEFINE(_GLIBCXX_USE_NLS)
1155  fi
1156
1157  AC_SUBST(USE_NLS)
1158  AC_SUBST(CLOCALE_H)
1159  AC_SUBST(CCODECVT_H)
1160  AC_SUBST(CMESSAGES_H)
1161  AC_SUBST(CCODECVT_CC)
1162  AC_SUBST(CCOLLATE_CC)
1163  AC_SUBST(CCTYPE_CC)
1164  AC_SUBST(CMESSAGES_CC)
1165  AC_SUBST(CMONEY_CC)
1166  AC_SUBST(CNUMERIC_CC)
1167  AC_SUBST(CTIME_H)
1168  AC_SUBST(CTIME_CC)
1169  AC_SUBST(CLOCALE_CC)
1170  AC_SUBST(CLOCALE_INTERNAL_H)
1171])
1172
1173
1174dnl
1175dnl Check for which std::allocator base class to use.  The choice is
1176dnl mapped from a subdirectory of include/ext.
1177dnl
1178dnl Default is new.
1179dnl
1180AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
1181  AC_MSG_CHECKING([for std::allocator base class to use])
1182  GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
1183    [use KIND for target std::allocator base],
1184    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
1185  # If they didn't use this option switch, or if they specified --enable
1186  # with no specific model, we'll have to look for one.  If they
1187  # specified --disable (???), do likewise.
1188  if test $enable_libstdcxx_allocator = no || test $enable_libstdcxx_allocator = yes; then
1189     enable_libstdcxx_allocator=auto
1190  fi
1191
1192  # Either a known package, or "auto"
1193  enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
1194
1195  # Probe for host-specific support if no specific model is specified.
1196  # Default to "new".
1197  if test $enable_libstdcxx_allocator_flag = auto; then
1198    case ${target_os} in
1199      *)
1200        enable_libstdcxx_allocator_flag=new
1201        ;;
1202    esac
1203  fi
1204  AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
1205  
1206
1207  # Set configure bits for specified locale package
1208  case ${enable_libstdcxx_allocator_flag} in
1209    bitmap)
1210      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
1211      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
1212      ;;
1213    malloc)
1214      ALLOCATOR_H=config/allocator/malloc_allocator_base.h
1215      ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
1216      ;;
1217    mt)
1218      ALLOCATOR_H=config/allocator/mt_allocator_base.h
1219      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
1220      ;;
1221    new)
1222      ALLOCATOR_H=config/allocator/new_allocator_base.h
1223      ALLOCATOR_NAME=__gnu_cxx::new_allocator
1224      ;;
1225    pool)
1226      ALLOCATOR_H=config/allocator/pool_allocator_base.h
1227      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
1228      ;;	
1229  esac
1230
1231  AC_SUBST(ALLOCATOR_H)
1232  AC_SUBST(ALLOCATOR_NAME)
1233])
1234
1235
1236dnl
1237dnl Check for whether the Boost-derived checks should be turned on.
1238dnl
1239dnl --enable-concept-checks turns them on.
1240dnl --disable-concept-checks leaves them off.
1241dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
1242dnl       Where DEFAULT is either `yes' or `no'.
1243dnl
1244AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
1245  GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
1246  if test $enable_concept_checks = yes; then
1247    AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS)
1248  fi
1249])
1250
1251
1252dnl
1253dnl Check for which I/O library to use:  stdio, or something specific.
1254dnl
1255dnl Default is stdio.
1256dnl
1257AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
1258  AC_MSG_CHECKING([for underlying I/O to use])
1259  GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
1260    [use target-specific I/O package], [permit stdio])
1261
1262  # Now that libio has been removed, you can have any color you want as long
1263  # as it's black.  This is one big no-op until other packages are added, but
1264  # showing the framework never hurts.
1265  case ${enable_cstdio} in
1266    stdio)
1267      CSTDIO_H=config/io/c_io_stdio.h
1268      BASIC_FILE_H=config/io/basic_file_stdio.h
1269      BASIC_FILE_CC=config/io/basic_file_stdio.cc
1270      AC_MSG_RESULT(stdio)
1271      ;;
1272  esac
1273
1274  AC_SUBST(CSTDIO_H)
1275  AC_SUBST(BASIC_FILE_H)
1276  AC_SUBST(BASIC_FILE_CC)
1277])
1278
1279
1280dnl
1281dnl Check for "unusual" flags to pass to the compiler while building.
1282dnl
1283dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1284dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
1285dnl --disable-cxx-flags passes nothing.
1286dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1287dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1288dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1289dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
1290dnl       If "default flags" is an empty string, the effect is the same
1291dnl       as --disable or --enable=no.
1292dnl
1293AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
1294  AC_MSG_CHECKING([for extra compiler flags for building])
1295  GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
1296    [pass compiler FLAGS when building library],
1297    [case "x$enable_cxx_flags" in
1298      xno | x)   enable_cxx_flags= ;;
1299      x-*)       ;;
1300      *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1301     esac])
1302
1303  # Run through flags (either default or command-line) and set anything
1304  # extra (e.g., #defines) that must accompany particular g++ options.
1305  if test -n "$enable_cxx_flags"; then
1306    for f in $enable_cxx_flags; do
1307      case "$f" in
1308        -fhonor-std)  ;;
1309        -*)  ;;
1310        *)   # and we're trying to pass /what/ exactly?
1311             AC_MSG_ERROR([compiler flags start with a -]) ;;
1312      esac
1313    done
1314  fi
1315
1316  EXTRA_CXX_FLAGS="$enable_cxx_flags"
1317  AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1318  AC_SUBST(EXTRA_CXX_FLAGS)
1319])
1320
1321
1322dnl
1323dnl Check for wide character support.  Has the same effect as the option
1324dnl in gcc's configure, but in a form that autoconf can mess with.
1325dnl
1326dnl --enable-c-mbchar requests all the wchar_t stuff.
1327dnl --disable-c-mbchar doesn't.
1328dnl  +  Usage:  GLIBCXX_ENABLE_C_MBCHAR[(DEFAULT)]
1329dnl       Where DEFAULT is either `yes' or `no'.
1330dnl
1331AC_DEFUN([GLIBCXX_ENABLE_C_MBCHAR], [
1332  GLIBCXX_ENABLE(c-mbchar,$1,,[enable multibyte (wide) characters])
1333  # Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1334])
1335
1336
1337dnl
1338dnl Check to see if debugging libraries are to be built.
1339dnl
1340dnl --enable-libstdcxx-debug
1341dnl builds a separate set of debugging libraries in addition to the
1342dnl normal (shared, static) libstdc++ binaries.
1343dnl
1344dnl --disable-libstdcxx-debug
1345dnl builds only one (non-debug) version of libstdc++.
1346dnl
1347dnl --enable-libstdcxx-debug-flags=FLAGS
1348dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1349dnl
1350dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
1351dnl       Where DEFAULT is either `yes' or `no'.
1352dnl
1353AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
1354  AC_MSG_CHECKING([for additional debug build])
1355  GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
1356  AC_MSG_RESULT($enable_libstdcxx_debug)
1357  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
1358])
1359
1360
1361dnl
1362dnl Check for explicit debug flags.
1363dnl
1364dnl --enable-libstdcxx-debug-flags='-O1'
1365dnl is a general method for passing flags to be used when
1366dnl building debug libraries with --enable-debug.
1367dnl
1368dnl --disable-libstdcxx-debug-flags does nothing.
1369dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
1370dnl       If "default flags" is an empty string, the effect is the same
1371dnl       as --disable or --enable=no.
1372dnl
1373AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
1374  GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
1375    [pass compiler FLAGS when building debug library],
1376    [case "x$enable_libstdcxx_debug_flags" in
1377      xno | x)    enable_libstdcxx_debug_flags= ;;
1378      x-*)        ;;
1379      *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1380     esac])
1381
1382  # Option parsed, now set things appropriately
1383  DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
1384  AC_SUBST(DEBUG_FLAGS)
1385
1386  AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
1387])
1388
1389
1390dnl
1391dnl Check if the user only wants a freestanding library implementation.
1392dnl
1393dnl --disable-hosted-libstdcxx will turn off most of the library build,
1394dnl installing only the headers required by [17.4.1.3] and the language
1395dnl support library.  More than that will be built (to keep the Makefiles
1396dnl conveniently clean), but not installed.
1397dnl
1398dnl Sets:
1399dnl  is_hosted  (yes/no)
1400dnl
1401dnl Defines:
1402dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
1403dnl
1404AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
1405  AC_ARG_ENABLE([hosted-libstdcxx],
1406    AC_HELP_STRING([--disable-hosted-libstdcxx],
1407                   [only build freestanding C++ runtime support]),,
1408    [enable_hosted_libstdcxx=yes])
1409  if test "$enable_hosted_libstdcxx" = no; then
1410    AC_MSG_NOTICE([Only freestanding libraries will be built])
1411    is_hosted=no
1412    hosted_define=0
1413    enable_abi_check=no
1414    enable_libstdcxx_pch=no
1415  else
1416    is_hosted=yes
1417    hosted_define=1
1418  fi
1419  GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
1420  AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
1421    [Define to 1 if a full hosted library is built, or 0 if freestanding.])
1422])
1423
1424
1425dnl
1426dnl Check for template specializations for the 'long long' type extension.
1427dnl The result determines only whether 'long long' I/O is enabled; things
1428dnl like numeric_limits<> specializations are always available.
1429dnl
1430dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
1431dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
1432dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
1433dnl       Where DEFAULT is either `yes' or `no'.
1434dnl
1435AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
1436  GLIBCXX_ENABLE(long-long,$1,,[enables I/O support for 'long long'])
1437  if test $enable_long_long = yes; then
1438    AC_DEFINE(_GLIBCXX_USE_LONG_LONG)
1439  fi
1440])
1441
1442
1443dnl
1444dnl Check to see if building and using a C++ precompiled header can be done.
1445dnl
1446dnl --enable-libstdcxx-pch=yes
1447dnl default, this shows intent to use stdc++.h.gch If it looks like it
1448dnl may work, after some light-hearted attempts to puzzle out compiler
1449dnl support, flip bits on in include/Makefile.am
1450dnl
1451dnl --disable-libstdcxx-pch
1452dnl turns off attempts to use or build stdc++.h.gch.
1453dnl
1454dnl Substs:
1455dnl  glibcxx_PCHFLAGS
1456dnl
1457AC_DEFUN([GLIBCXX_ENABLE_PCH], [
1458  AC_MSG_CHECKING([for enabled PCH])
1459  GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
1460  AC_MSG_RESULT([$enable_libstdcxx_pch])
1461
1462  if test $enable_libstdcxx_pch = yes; then
1463    AC_CACHE_CHECK([for compiler with PCH support],
1464      [glibcxx_cv_prog_CXX_pch],
1465      [ac_save_CXXFLAGS="$CXXFLAGS"
1466       CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
1467       AC_LANG_SAVE
1468       AC_LANG_CPLUSPLUS
1469       echo '#include <math.h>' > conftest.h
1470       if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
1471		          -o conftest.h.gch 1>&5 2>&1 &&
1472	        echo '#error "pch failed"' > conftest.h &&
1473          echo '#include "conftest.h"' > conftest.cc &&
1474	       $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
1475       then
1476         glibcxx_cv_prog_CXX_pch=yes
1477       else
1478         glibcxx_cv_prog_CXX_pch=no
1479       fi
1480       rm -f conftest*
1481       CXXFLAGS=$ac_save_CXXFLAGS
1482       AC_LANG_RESTORE
1483      ])
1484    enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
1485  fi
1486
1487  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
1488  if test $enable_libstdcxx_pch = yes; then
1489    glibcxx_PCHFLAGS="-include bits/stdc++.h"
1490  else
1491    glibcxx_PCHFLAGS=""
1492  fi
1493  AC_SUBST(glibcxx_PCHFLAGS)
1494])
1495
1496
1497dnl
1498dnl Check for exception handling support.  If an explicit enable/disable
1499dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1500dnl target may or may not support call frame exceptions.
1501dnl
1502dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1503dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1504dnl Neither one forces an attempt at detection.
1505dnl
1506dnl Defines:
1507dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
1508dnl
1509AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
1510  AC_MSG_CHECKING([for exception model to use])
1511  AC_LANG_SAVE
1512  AC_LANG_CPLUSPLUS
1513  GLIBCXX_ENABLE(sjlj-exceptions,auto,,
1514    [force use of builtin_setjmp for exceptions],
1515    [permit yes|no|auto])
1516
1517  if test $enable_sjlj_exceptions = auto; then
1518    # Botheration.  Now we've got to detect the exception model.  Link tests
1519    # against libgcc.a are problematic since we've not been given proper -L
1520    # bits for single-tree newlib and libgloss.
1521    #
1522    # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
1523    cat > conftest.$ac_ext << EOF
1524[#]line __oline__ "configure"
1525struct S { ~S(); };
1526void bar();
1527void foo()
1528{
1529  S s;
1530  bar();
1531}
1532EOF
1533    old_CXXFLAGS="$CXXFLAGS"
1534    CXXFLAGS=-S
1535    if AC_TRY_EVAL(ac_compile); then
1536      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1537        enable_sjlj_exceptions=yes
1538      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1539        enable_sjlj_exceptions=no
1540      fi
1541    fi
1542    CXXFLAGS="$old_CXXFLAGS"
1543    rm -f conftest*
1544  fi
1545
1546  # This is a tad weird, for hysterical raisins.  We have to map enable/disable 
1547  # to two different models.
1548  case $enable_sjlj_exceptions in
1549    yes)
1550      AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
1551        [Define if the compiler is configured for setjmp/longjmp exceptions.])
1552      ac_exception_model_name=sjlj
1553      ;;
1554    no)
1555      ac_exception_model_name="call frame"
1556      ;;
1557    *)
1558      AC_MSG_ERROR([unable to detect exception model])
1559      ;;
1560  esac
1561 AC_LANG_RESTORE
1562 AC_MSG_RESULT($ac_exception_model_name)
1563])
1564
1565
1566dnl
1567dnl Add version tags to symbols in shared library (or not), additionally
1568dnl marking other symbols as private/local (or not).
1569dnl
1570dnl --enable-symvers=style adds a version script to the linker call when
1571dnl       creating the shared library.  The choice of version script is
1572dnl       controlled by 'style'.
1573dnl --disable-symvers does not.
1574dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
1575dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
1576dnl       choose a default style based on linker characteristics.  Passing
1577dnl       'no' disables versioning.
1578dnl
1579AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
1580
1581GLIBCXX_ENABLE(symvers,$1,[=STYLE],
1582  [enables symbol versioning of the shared library],
1583  [permit yes|no|gnu])
1584
1585# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
1586# don't know enough about $LD to do tricks...
1587AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
1588# FIXME  The following test is too strict, in theory.
1589if test $enable_shared = no ||
1590        test "x$LD" = x ||
1591        test x$glibcxx_gnu_ld_version = x; then
1592  enable_symvers=no
1593fi
1594
1595# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
1596if test $enable_symvers != no; then
1597  AC_MSG_CHECKING([for shared libgcc])
1598  ac_save_CFLAGS="$CFLAGS"
1599  CFLAGS=' -lgcc_s'
1600  AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
1601  CFLAGS="$ac_save_CFLAGS"
1602  if test $glibcxx_shared_libgcc = no; then
1603    cat > conftest.c <<EOF
1604int main (void) { return 0; }
1605EOF
1606changequote(,)dnl
1607    glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1608			     -shared -shared-libgcc -o conftest.so \
1609			     conftest.c -v 2>&1 >/dev/null \
1610			     | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
1611changequote([,])dnl
1612    rm -f conftest.c conftest.so
1613    if test x${glibcxx_libgcc_s_suffix+set} = xset; then
1614      CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
1615      AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
1616      CFLAGS="$ac_save_CFLAGS"
1617    fi
1618  fi
1619  AC_MSG_RESULT($glibcxx_shared_libgcc)
1620fi
1621
1622# For GNU ld, we need at least this version.  The format is described in
1623# GLIBCXX_CHECK_LINKER_FEATURES above.
1624glibcxx_min_gnu_ld_version=21400
1625# XXXXXXXXXXX glibcxx_gnu_ld_version=21390
1626
1627# Check to see if unspecified "yes" value can win, given results above.
1628# Change "yes" into either "no" or a style name.
1629if test $enable_symvers = yes; then
1630  if test $with_gnu_ld = yes &&
1631     test $glibcxx_shared_libgcc = yes;
1632  then
1633    if test $glibcxx_gnu_ld_version -ge $glibcxx_min_gnu_ld_version ; then
1634      enable_symvers=gnu
1635    else
1636      # The right tools, the right setup, but too old.  Fallbacks?
1637      AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
1638      AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
1639      AC_MSG_WARN(=== You would need to upgrade your binutils to version)
1640      AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
1641      if test $glibcxx_gnu_ld_version -ge 21200 ; then
1642        # Globbing fix is present, proper block support is not.
1643        dnl AC_MSG_WARN([=== Dude, you are soooo close.  Maybe we can fake it.])
1644        dnl enable_symvers=???
1645        AC_MSG_WARN([=== Symbol versioning will be disabled.])
1646        enable_symvers=no
1647      else
1648        # 2.11 or older.
1649        AC_MSG_WARN([=== Symbol versioning will be disabled.])
1650        enable_symvers=no
1651      fi
1652    fi
1653  else
1654    # just fail for now
1655    AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
1656    AC_MSG_WARN([=== either you are not using a supported linker, or you are])
1657    AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
1658    AC_MSG_WARN([=== Symbol versioning will be disabled.])
1659    enable_symvers=no
1660  fi
1661fi
1662
1663# Everything parsed; figure out what file to use.
1664case $enable_symvers in
1665  no)
1666    SYMVER_MAP=config/linker-map.dummy
1667    ;;
1668  gnu)
1669    SYMVER_MAP=config/linker-map.gnu
1670    AC_DEFINE(_GLIBCXX_SYMVER)
1671    ;;
1672esac
1673
1674AC_SUBST(SYMVER_MAP)
1675AC_SUBST(port_specific_symbol_files)
1676GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
1677AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
1678])
1679
1680
1681dnl
1682dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1683dnl We must stage the required headers so that they will be installed
1684dnl with the library (unlike libgcc, the STL implementation is provided
1685dnl solely within headers).  Since we must not inject random user-space
1686dnl macro names into user-provided C++ code, we first stage into <file>-in
1687dnl and process to <file> with an output command.  The reason for a two-
1688dnl stage process here is to correctly handle $srcdir!=$objdir without
1689dnl having to write complex code (the sed commands to clean the macro
1690dnl namespace are complex and fragile enough as it is).  We must also
1691dnl add a relative path so that -I- is supported properly.
1692dnl
1693dnl Substs:
1694dnl  glibcxx_thread_h
1695dnl
1696dnl Defines:
1697dnl  HAVE_GTHR_DEFAULT
1698dnl
1699AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
1700  AC_MSG_CHECKING([for thread model used by GCC])
1701  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
1702  AC_MSG_RESULT([$target_thread_file])
1703
1704  if test $target_thread_file != single; then
1705    AC_DEFINE(HAVE_GTHR_DEFAULT)
1706  fi
1707
1708  glibcxx_thread_h=gthr-$target_thread_file.h
1709  AC_SUBST(glibcxx_thread_h)
1710])
1711
1712
1713# Check whether LC_MESSAGES is available in <locale.h>.
1714# Ulrich Drepper <drepper@cygnus.com>, 1995.
1715#
1716# This file file be copied and used freely without restrictions.  It can
1717# be used in projects which are not available under the GNU Public License
1718# but which still want to provide support for the GNU gettext functionality.
1719# Please note that the actual code is *not* freely available.
1720
1721# serial 1
1722AC_DEFUN([AC_LC_MESSAGES], [
1723  AC_CHECK_HEADER(locale.h, [
1724    AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1725      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1726       ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1727    if test $ac_cv_val_LC_MESSAGES = yes; then
1728      AC_DEFINE(HAVE_LC_MESSAGES)
1729    fi
1730  ])
1731])
1732
1733
1734sinclude([../libtool.m4])
1735dnl The lines below arrange for aclocal not to bring an installed
1736dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1737dnl add a definition of LIBTOOL to Makefile.in.
1738ifelse(,,,[AC_SUBST(LIBTOOL)
1739AC_DEFUN([AM_PROG_LIBTOOL])
1740AC_DEFUN([AC_LIBTOOL_DLOPEN])
1741AC_DEFUN([AC_PROG_LD])
1742])
1743
1744dnl vim:et:ts=2:sw=2
1745