acinclude.m4 revision 146897
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 Check for whether a fully dynamic basic_string implementation should
624dnl be turned on, that does not put empty objects in per-process static
625dnl memory (mostly useful together with shared memory allocators, see PR
626dnl libstdc++/16612 for details).
627dnl
628dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING
629dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined
630dnl  +  Usage:  GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)]
631dnl       Where DEFAULT is either `yes' or `no'.
632dnl
633AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [
634  GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory])
635  if test $enable_fully_dynamic_string = yes; then
636    AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING)
637  fi
638])
639
640
641dnl
642dnl Does any necessary configuration of the testsuite directory.  Generates
643dnl the testsuite_hooks.h header.
644dnl
645dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE must be done before this.
646dnl
647dnl Sets:
648dnl  enable_abi_check / GLIBCXX_TEST_ABI
649dnl Substs:
650dnl  baseline_dir
651dnl
652AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [
653  if $GLIBCXX_IS_NATIVE && test $is_hosted = yes; then
654    # Do checks for resource limit functions.
655    GLIBCXX_CHECK_SETRLIMIT
656
657    # Look for setenv, so that extended locale tests can be performed.
658    GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv)
659
660    if test $enable_symvers = no; then
661      enable_abi_check=no
662    else
663      case "$host" in
664        *-*-cygwin*)
665          enable_abi_check=no ;;
666        *)
667          enable_abi_check=yes ;;
668      esac
669    fi
670  else
671    # Only build this as native, since automake does not understand
672    # CXX_FOR_BUILD.
673    enable_abi_check=no
674  fi
675
676  # Export file names for ABI checking.
677  baseline_dir="$glibcxx_srcdir/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)"
678  AC_SUBST(baseline_dir)
679
680  GLIBCXX_CONDITIONAL(GLIBCXX_TEST_WCHAR_T, test $enable_wchar_t = yes)
681  GLIBCXX_CONDITIONAL(GLIBCXX_TEST_ABI, test $enable_abi_check = yes)
682])
683
684
685dnl
686dnl Set up *_INCLUDES variables for all sundry Makefile.am's.
687dnl
688dnl Substs:
689dnl  GLIBCXX_INCLUDES
690dnl  TOPLEVEL_INCLUDES
691dnl
692AC_DEFUN([GLIBCXX_EXPORT_INCLUDES], [
693  # Used for every C++ compile we perform.
694  GLIBCXX_INCLUDES="\
695-I$glibcxx_builddir/include/$host_alias \
696-I$glibcxx_builddir/include \
697-I$glibcxx_srcdir/libsupc++"
698
699  # For Canadian crosses, pick this up too.
700  if test $CANADIAN = yes; then
701    GLIBCXX_INCLUDES="$GLIBCXX_INCLUDES -I\${includedir}"
702  fi
703
704  # Stuff in the actual top level.  Currently only used by libsupc++ to
705  # get unwind* headers from the gcc dir.
706  #TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include'
707  TOPLEVEL_INCLUDES='-I$(toplevel_srcdir)/gcc'
708
709  # Now, export this to all the little Makefiles....
710  AC_SUBST(GLIBCXX_INCLUDES)
711  AC_SUBST(TOPLEVEL_INCLUDES)
712])
713
714
715dnl
716dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
717dnl (SECTION_FLAGS is done under CHECK_COMPILER_FEATURES.)
718dnl
719dnl Substs:
720dnl  OPTIMIZE_CXXFLAGS
721dnl  WARN_FLAGS
722dnl
723AC_DEFUN([GLIBCXX_EXPORT_FLAGS], [
724  # Optimization flags that are probably a good idea for thrill-seekers. Just
725  # uncomment the lines below and make, everything else is ready to go...
726  # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc
727  OPTIMIZE_CXXFLAGS=
728  AC_SUBST(OPTIMIZE_CXXFLAGS)
729
730  WARN_FLAGS='-Wall -W -Wwrite-strings -Wcast-qual'
731  AC_SUBST(WARN_FLAGS)
732])
733
734
735dnl
736dnl All installation directory information is determined here.
737dnl
738dnl Substs:
739dnl  gxx_install_dir
740dnl  glibcxx_prefixdir
741dnl  glibcxx_toolexecdir
742dnl  glibcxx_toolexeclibdir
743dnl
744dnl Assumes cross_compiling bits already done, and with_cross_host in
745dnl particular.
746dnl
747AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
748  glibcxx_toolexecdir=no
749  glibcxx_toolexeclibdir=no
750  glibcxx_prefixdir=$prefix
751
752  AC_MSG_CHECKING([for gxx-include-dir])
753  AC_ARG_WITH([gxx-include-dir],
754    AC_HELP_STRING([--with-gxx-include-dir=DIR],
755                   [installation directory for include files]),
756    [case "$withval" in
757      yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
758      no)  gxx_include_dir=no ;;
759      *)   gxx_include_dir=$withval ;;
760     esac],
761    [gxx_include_dir=no])
762  AC_MSG_RESULT($gxx_include_dir)
763
764  AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
765  AC_ARG_ENABLE([version-specific-runtime-libs],
766    AC_HELP_STRING([--enable-version-specific-runtime-libs],
767                   [Specify that runtime libraries should be installed in a compiler-specific directory]),
768    [case "$enableval" in
769      yes) version_specific_libs=yes ;;
770      no)  version_specific_libs=no ;;
771      *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
772     esac],
773    [version_specific_libs=no])
774  AC_MSG_RESULT($version_specific_libs)
775
776  # Default case for install directory for include files.
777  if test $version_specific_libs = no && test $gxx_include_dir = no; then
778    gxx_include_dir='${prefix}'/include/c++/${gcc_version}
779  fi
780
781  # Version-specific runtime libs processing.
782  if test $version_specific_libs = yes; then
783    # Need the gcc compiler version to know where to install libraries
784    # and header files if --enable-version-specific-runtime-libs option
785    # is selected.  FIXME: these variables are misnamed, there are
786    # no executables installed in _toolexecdir or _toolexeclibdir.
787    if test x"$gxx_include_dir" = x"no"; then
788      gxx_include_dir='${libdir}/gcc/${host_alias}/'$gcc_version/include/c++
789    fi
790    glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
791    glibcxx_toolexeclibdir='${toolexecdir}/'$gcc_version'$(MULTISUBDIR)'
792  fi
793
794  # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir
795  # Install a library built with a cross compiler in tooldir, not libdir.
796  if test x"$glibcxx_toolexecdir" = x"no"; then
797    if test -n "$with_cross_host" &&
798       test x"$with_cross_host" != x"no"; then
799      glibcxx_toolexecdir='${exec_prefix}/${host_alias}'
800      glibcxx_toolexeclibdir='${toolexecdir}/lib'
801    else
802      glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
803      glibcxx_toolexeclibdir='${libdir}'
804    fi
805    multi_os_directory=`$CXX -print-multi-os-directory`
806    case $multi_os_directory in
807      .) ;; # Avoid trailing /.
808      *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
809    esac
810  fi
811
812  AC_MSG_CHECKING([for install location])
813  AC_MSG_RESULT($gxx_include_dir)
814
815  AC_SUBST(glibcxx_prefixdir)
816  AC_SUBST(gxx_include_dir)
817  AC_SUBST(glibcxx_toolexecdir)
818  AC_SUBST(glibcxx_toolexeclibdir)
819])
820
821
822dnl
823dnl GLIBCXX_ENABLE
824dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
825dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
826dnl    (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
827dnl
828dnl See docs/html/17_intro/configury.html#enable for documentation.
829dnl
830m4_define([GLIBCXX_ENABLE],[dnl
831m4_define([_g_switch],[--enable-$1])dnl
832m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
833 AC_ARG_ENABLE($1,_g_help,
834  m4_bmatch([$5],
835   [^permit ],
836     [[
837      case "$enableval" in
838       m4_bpatsubst([$5],[permit ])) ;;
839       *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
840          dnl Idea for future:  generate a URL pointing to
841          dnl "onlinedocs/configopts.html#whatever"
842      esac
843     ]],
844   [^$],
845     [[
846      case "$enableval" in
847       yes|no) ;;
848       *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
849      esac
850     ]],
851   [[$5]]),
852  [enable_]m4_bpatsubst([$1],-,_)[=][$2])
853m4_undefine([_g_switch])dnl
854m4_undefine([_g_help])dnl
855])
856
857
858dnl
859dnl Check for ISO/IEC 9899:1999 "C99" support.
860dnl
861dnl --enable-c99 defines _GLIBCXX_USE_C99
862dnl --disable-c99 leaves _GLIBCXX_USE_C99 undefined
863dnl  +  Usage:  GLIBCXX_ENABLE_C99[(DEFAULT)]
864dnl       Where DEFAULT is either `yes' or `no'.
865dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
866dnl
867AC_DEFUN([GLIBCXX_ENABLE_C99], [
868  GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
869
870  AC_LANG_SAVE
871  AC_LANG_CPLUSPLUS
872
873  # Check for the existence of <math.h> functions used if C99 is enabled.
874  ac_c99_math=yes;
875  AC_MSG_CHECKING([for ISO C99 support in <math.h>])
876  AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
877  AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
878  AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
879  AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
880  AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
881  AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
882  AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
883  AC_TRY_COMPILE([#include <math.h>],
884                 [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
885  AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
886  AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
887  AC_TRY_COMPILE([#include <math.h>],
888                 [islessgreater(0.0,0.0);],, [ac_c99_math=no])
889  AC_TRY_COMPILE([#include <math.h>],
890                 [isunordered(0.0,0.0);],, [ac_c99_math=no])
891  AC_MSG_RESULT($ac_c99_math)
892
893  if test x"$ac_c99_math" = x"yes"; then
894    AC_DEFINE(_GLIBCXX_USE_C99_MATH)
895  fi
896
897  # Check for the existence in <stdio.h> of vscanf, et. al.
898  ac_c99_stdio=yes;
899  AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
900  AC_TRY_COMPILE([#include <stdio.h>],
901                 [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
902  AC_TRY_COMPILE([#include <stdio.h>
903                  #include <stdarg.h>
904                  void foo(char* fmt, ...)
905                  {va_list args; va_start(args, fmt);
906                  vfscanf(stderr, "%i", args);}],
907                  [],, [ac_c99_stdio=no])
908  AC_TRY_COMPILE([#include <stdio.h>
909                  #include <stdarg.h>
910                  void foo(char* fmt, ...)
911                  {va_list args; va_start(args, fmt);
912                  vscanf("%i", args);}],
913                  [],, [ac_c99_stdio=no])
914  AC_TRY_COMPILE([#include <stdio.h>
915                  #include <stdarg.h>
916                  void foo(char* fmt, ...)
917                  {va_list args; va_start(args, fmt);
918                  vsnprintf(fmt, 0, "%i", args);}],
919                  [],, [ac_c99_stdio=no])
920  AC_TRY_COMPILE([#include <stdio.h>
921                  #include <stdarg.h>
922                  void foo(char* fmt, ...)
923                  {va_list args; va_start(args, fmt);
924                  vsscanf(fmt, "%i", args);}],
925                  [],, [ac_c99_stdio=no])
926  AC_MSG_RESULT($ac_c99_stdio)
927
928  # Check for the existence in <stdlib.h> of lldiv_t, et. al.
929  ac_c99_stdlib=yes;
930  AC_MSG_CHECKING([for lldiv_t declaration])
931  AC_CACHE_VAL(ac_c99_lldiv_t, [
932  AC_TRY_COMPILE([#include <stdlib.h>],
933                   [ lldiv_t mydivt;],
934                   [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
935  ])
936  AC_MSG_RESULT($ac_c99_lldiv_t)
937
938  AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
939  AC_TRY_COMPILE([#include <stdlib.h>],
940                 [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
941  AC_TRY_COMPILE([#include <stdlib.h>],
942                 [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
943  AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
944  AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
945  AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
946  AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
947  if test x"$ac_c99_lldiv_t" = x"no"; then
948    ac_c99_stdlib=no;
949  fi;
950  AC_MSG_RESULT($ac_c99_stdlib)
951
952  # Check for the existence of <wchar.h> functions used if C99 is enabled.
953  # XXX the wchar.h checks should be rolled into the general C99 bits.
954  ac_c99_wchar=yes;
955  AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
956  AC_TRY_COMPILE([#include <wchar.h>],
957                 [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
958  AC_TRY_COMPILE([#include <wchar.h>],
959                 [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
960  AC_TRY_COMPILE([#include <wchar.h>],
961                 [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
962  AC_MSG_RESULT($ac_c99_wchar)
963
964  AC_MSG_CHECKING([for enabled ISO C99 support])
965  if test x"$ac_c99_math" = x"no" ||
966     test x"$ac_c99_stdio" = x"no" ||
967     test x"$ac_c99_stdlib" = x"no" ||
968     test x"$ac_c99_wchar" = x"no"; then
969    enable_c99=no;
970  fi;
971  AC_MSG_RESULT($enable_c99)
972
973  if test x"$ac_99_math" = x"yes"; then
974    AC_DEFINE(_GLIBCXX_USE_C99_MATH)
975  fi
976
977  # Option parsed, now set things appropriately
978  if test x"$enable_c99" = x"yes"; then
979    AC_DEFINE(_GLIBCXX_USE_C99)
980  fi
981
982  AC_LANG_RESTORE
983])
984
985
986dnl
987dnl Check for what type of C headers to use.
988dnl
989dnl --enable-cheaders= [does stuff].
990dnl --disable-cheaders [does not do anything, really].
991dnl  +  Usage:  GLIBCXX_ENABLE_CHEADERS[(DEFAULT)]
992dnl       Where DEFAULT is either `c' or `c_std'.
993dnl
994AC_DEFUN([GLIBCXX_ENABLE_CHEADERS], [
995  GLIBCXX_ENABLE(cheaders,$1,[=KIND],
996    [construct "C" headers for g++], [permit c|c_std])
997  AC_MSG_NOTICE("C" header strategy set to $enable_cheaders)
998
999  C_INCLUDE_DIR='${glibcxx_srcdir}/include/'$enable_cheaders
1000
1001  AC_SUBST(C_INCLUDE_DIR)
1002  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C, test $enable_cheaders = c)
1003  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_C_STD, test $enable_cheaders = c_std)
1004  GLIBCXX_CONDITIONAL(GLIBCXX_C_HEADERS_COMPATIBILITY, test $c_compatibility = yes)
1005])
1006
1007
1008dnl
1009dnl Check for which locale library to use.  The choice is mapped to
1010dnl a subdirectory of config/locale.
1011dnl
1012dnl Default is generic.
1013dnl
1014AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
1015  AC_MSG_CHECKING([for C locale to use])
1016  GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
1017    [use MODEL for target locale package],
1018    [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
1019  
1020  # If they didn't use this option switch, or if they specified --enable
1021  # with no specific model, we'll have to look for one.  If they
1022  # specified --disable (???), do likewise.
1023  if test $enable_clocale = no || test $enable_clocale = yes; then
1024     enable_clocale=auto
1025  fi
1026
1027  # Either a known package, or "auto"
1028  enable_clocale_flag=$enable_clocale
1029
1030  # Probe for locale support if no specific model is specified.
1031  # Default to "generic".
1032  if test $enable_clocale_flag = auto; then
1033    case x${target_os} in
1034      xlinux* | xgnu* | xkfreebsd*-gnu | xknetbsd*-gnu)
1035        AC_EGREP_CPP([_GLIBCXX_ok], [
1036        #include <features.h>
1037        #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
1038          _GLIBCXX_ok
1039        #endif
1040        ], enable_clocale_flag=gnu, enable_clocale_flag=generic)
1041
1042        # Test for bugs early in glibc-2.2.x series
1043          if test x$enable_clocale_flag = xgnu; then
1044          AC_TRY_RUN([
1045          #define _GNU_SOURCE 1
1046          #include <locale.h>
1047          #include <string.h>
1048          #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
1049          extern __typeof(newlocale) __newlocale;
1050          extern __typeof(duplocale) __duplocale;
1051          extern __typeof(strcoll_l) __strcoll_l;
1052          #endif
1053          int main()
1054          {
1055              const char __one[] = "�uglein Augmen";
1056              const char __two[] = "�uglein";
1057              int i;
1058              int j;
1059              __locale_t        loc;
1060               __locale_t        loc_dup;
1061              loc = __newlocale(1 << LC_ALL, "de_DE", 0);
1062              loc_dup = __duplocale(loc);
1063              i = __strcoll_l(__one, __two, loc);
1064              j = __strcoll_l(__one, __two, loc_dup);
1065              return 0;
1066          }
1067          ],
1068          [enable_clocale_flag=gnu],[enable_clocale_flag=generic],
1069          [enable_clocale_flag=generic])
1070          fi
1071
1072        # ... at some point put __strxfrm_l tests in as well.
1073        ;;
1074      *)
1075        enable_clocale_flag=generic
1076        ;;
1077    esac
1078  fi
1079
1080  # Deal with gettext issues.  Default to not using it (=no) until we detect
1081  # support for it later.  Let the user turn it off via --e/d, but let that
1082  # default to on for easier handling.
1083  USE_NLS=no
1084  AC_ARG_ENABLE(nls,
1085    AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
1086    [],
1087    [enable_nls=yes])
1088
1089  # Set configure bits for specified locale package
1090  case ${enable_clocale_flag} in
1091    generic)
1092      AC_MSG_RESULT(generic)
1093
1094      CLOCALE_H=config/locale/generic/c_locale.h
1095      CLOCALE_CC=config/locale/generic/c_locale.cc
1096      CCODECVT_H=config/locale/generic/codecvt_specializations.h
1097      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1098      CCOLLATE_CC=config/locale/generic/collate_members.cc
1099      CCTYPE_CC=config/locale/generic/ctype_members.cc
1100      CMESSAGES_H=config/locale/generic/messages_members.h
1101      CMESSAGES_CC=config/locale/generic/messages_members.cc
1102      CMONEY_CC=config/locale/generic/monetary_members.cc
1103      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1104      CTIME_H=config/locale/generic/time_members.h
1105      CTIME_CC=config/locale/generic/time_members.cc
1106      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1107      ;;
1108    gnu)
1109      AC_MSG_RESULT(gnu)
1110
1111      # Declare intention to use gettext, and add support for specific
1112      # languages.
1113      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
1114      ALL_LINGUAS="de fr"
1115
1116      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
1117      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
1118      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
1119        USE_NLS=yes
1120      fi
1121      # Export the build objects.
1122      for ling in $ALL_LINGUAS; do \
1123        glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
1124        glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
1125      done
1126      AC_SUBST(glibcxx_MOFILES)
1127      AC_SUBST(glibcxx_POFILES)
1128
1129      CLOCALE_H=config/locale/gnu/c_locale.h
1130      CLOCALE_CC=config/locale/gnu/c_locale.cc
1131      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1132      CCODECVT_CC=config/locale/gnu/codecvt_members.cc
1133      CCOLLATE_CC=config/locale/gnu/collate_members.cc
1134      CCTYPE_CC=config/locale/gnu/ctype_members.cc
1135      CMESSAGES_H=config/locale/gnu/messages_members.h
1136      CMESSAGES_CC=config/locale/gnu/messages_members.cc
1137      CMONEY_CC=config/locale/gnu/monetary_members.cc
1138      CNUMERIC_CC=config/locale/gnu/numeric_members.cc
1139      CTIME_H=config/locale/gnu/time_members.h
1140      CTIME_CC=config/locale/gnu/time_members.cc
1141      CLOCALE_INTERNAL_H=config/locale/gnu/c++locale_internal.h
1142      ;;
1143    ieee_1003.1-2001)
1144      AC_MSG_RESULT(IEEE 1003.1)
1145
1146      CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
1147      CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
1148      CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
1149      CCODECVT_CC=config/locale/generic/codecvt_members.cc
1150      CCOLLATE_CC=config/locale/generic/collate_members.cc
1151      CCTYPE_CC=config/locale/generic/ctype_members.cc
1152      CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
1153      CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
1154      CMONEY_CC=config/locale/generic/monetary_members.cc
1155      CNUMERIC_CC=config/locale/generic/numeric_members.cc
1156      CTIME_H=config/locale/generic/time_members.h
1157      CTIME_CC=config/locale/generic/time_members.cc
1158      CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
1159      ;;
1160  esac
1161
1162  # This is where the testsuite looks for locale catalogs, using the
1163  # -DLOCALEDIR define during testsuite compilation.
1164  glibcxx_localedir=${glibcxx_builddir}/po/share/locale
1165  AC_SUBST(glibcxx_localedir)
1166
1167  # A standalone libintl (e.g., GNU libintl) may be in use.
1168  if test $USE_NLS = yes; then
1169    AC_CHECK_HEADERS([libintl.h], [], USE_NLS=no)
1170    AC_SEARCH_LIBS(gettext, intl, [], USE_NLS=no)
1171  fi
1172  if test $USE_NLS = yes; then
1173    AC_DEFINE(_GLIBCXX_USE_NLS)
1174  fi
1175
1176  AC_SUBST(USE_NLS)
1177  AC_SUBST(CLOCALE_H)
1178  AC_SUBST(CCODECVT_H)
1179  AC_SUBST(CMESSAGES_H)
1180  AC_SUBST(CCODECVT_CC)
1181  AC_SUBST(CCOLLATE_CC)
1182  AC_SUBST(CCTYPE_CC)
1183  AC_SUBST(CMESSAGES_CC)
1184  AC_SUBST(CMONEY_CC)
1185  AC_SUBST(CNUMERIC_CC)
1186  AC_SUBST(CTIME_H)
1187  AC_SUBST(CTIME_CC)
1188  AC_SUBST(CLOCALE_CC)
1189  AC_SUBST(CLOCALE_INTERNAL_H)
1190])
1191
1192
1193dnl
1194dnl Check for which std::allocator base class to use.  The choice is
1195dnl mapped from a subdirectory of include/ext.
1196dnl
1197dnl Default is new.
1198dnl
1199AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
1200  AC_MSG_CHECKING([for std::allocator base class to use])
1201  GLIBCXX_ENABLE(libstdcxx-allocator,auto,[=KIND],
1202    [use KIND for target std::allocator base],
1203    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
1204  # If they didn't use this option switch, or if they specified --enable
1205  # with no specific model, we'll have to look for one.  If they
1206  # specified --disable (???), do likewise.
1207  if test $enable_libstdcxx_allocator = no || test $enable_libstdcxx_allocator = yes; then
1208     enable_libstdcxx_allocator=auto
1209  fi
1210
1211  # Either a known package, or "auto"
1212  enable_libstdcxx_allocator_flag=$enable_libstdcxx_allocator
1213
1214  # Probe for host-specific support if no specific model is specified.
1215  # Default to "new".
1216  if test $enable_libstdcxx_allocator_flag = auto; then
1217    case ${target_os} in
1218      *)
1219        enable_libstdcxx_allocator_flag=new
1220        ;;
1221    esac
1222  fi
1223  AC_MSG_RESULT($enable_libstdcxx_allocator_flag)
1224  
1225
1226  # Set configure bits for specified locale package
1227  case ${enable_libstdcxx_allocator_flag} in
1228    bitmap)
1229      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
1230      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
1231      ;;
1232    malloc)
1233      ALLOCATOR_H=config/allocator/malloc_allocator_base.h
1234      ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
1235      ;;
1236    mt)
1237      ALLOCATOR_H=config/allocator/mt_allocator_base.h
1238      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
1239      ;;
1240    new)
1241      ALLOCATOR_H=config/allocator/new_allocator_base.h
1242      ALLOCATOR_NAME=__gnu_cxx::new_allocator
1243      ;;
1244    pool)
1245      ALLOCATOR_H=config/allocator/pool_allocator_base.h
1246      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
1247      ;;	
1248  esac
1249
1250  AC_SUBST(ALLOCATOR_H)
1251  AC_SUBST(ALLOCATOR_NAME)
1252])
1253
1254
1255dnl
1256dnl Check for whether the Boost-derived checks should be turned on.
1257dnl
1258dnl --enable-concept-checks turns them on.
1259dnl --disable-concept-checks leaves them off.
1260dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
1261dnl       Where DEFAULT is either `yes' or `no'.
1262dnl
1263AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
1264  GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
1265  if test $enable_concept_checks = yes; then
1266    AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS)
1267  fi
1268])
1269
1270
1271dnl
1272dnl Check for which I/O library to use:  stdio, or something specific.
1273dnl
1274dnl Default is stdio.
1275dnl
1276AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
1277  AC_MSG_CHECKING([for underlying I/O to use])
1278  GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
1279    [use target-specific I/O package], [permit stdio])
1280
1281  # Now that libio has been removed, you can have any color you want as long
1282  # as it's black.  This is one big no-op until other packages are added, but
1283  # showing the framework never hurts.
1284  case ${enable_cstdio} in
1285    stdio)
1286      CSTDIO_H=config/io/c_io_stdio.h
1287      BASIC_FILE_H=config/io/basic_file_stdio.h
1288      BASIC_FILE_CC=config/io/basic_file_stdio.cc
1289      AC_MSG_RESULT(stdio)
1290      ;;
1291  esac
1292
1293  AC_SUBST(CSTDIO_H)
1294  AC_SUBST(BASIC_FILE_H)
1295  AC_SUBST(BASIC_FILE_CC)
1296])
1297
1298
1299dnl
1300dnl Check for "unusual" flags to pass to the compiler while building.
1301dnl
1302dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1303dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
1304dnl --disable-cxx-flags passes nothing.
1305dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1306dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1307dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1308dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
1309dnl       If "default flags" is an empty string, the effect is the same
1310dnl       as --disable or --enable=no.
1311dnl
1312AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
1313  AC_MSG_CHECKING([for extra compiler flags for building])
1314  GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
1315    [pass compiler FLAGS when building library],
1316    [case "x$enable_cxx_flags" in
1317      xno | x)   enable_cxx_flags= ;;
1318      x-*)       ;;
1319      *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1320     esac])
1321
1322  # Run through flags (either default or command-line) and set anything
1323  # extra (e.g., #defines) that must accompany particular g++ options.
1324  if test -n "$enable_cxx_flags"; then
1325    for f in $enable_cxx_flags; do
1326      case "$f" in
1327        -fhonor-std)  ;;
1328        -*)  ;;
1329        *)   # and we're trying to pass /what/ exactly?
1330             AC_MSG_ERROR([compiler flags start with a -]) ;;
1331      esac
1332    done
1333  fi
1334
1335  EXTRA_CXX_FLAGS="$enable_cxx_flags"
1336  AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1337  AC_SUBST(EXTRA_CXX_FLAGS)
1338])
1339
1340
1341dnl
1342dnl Check for wide character support.  Has the same effect as the option
1343dnl in gcc's configure, but in a form that autoconf can mess with.
1344dnl
1345dnl --enable-c-mbchar requests all the wchar_t stuff.
1346dnl --disable-c-mbchar doesn't.
1347dnl  +  Usage:  GLIBCXX_ENABLE_C_MBCHAR[(DEFAULT)]
1348dnl       Where DEFAULT is either `yes' or `no'.
1349dnl
1350AC_DEFUN([GLIBCXX_ENABLE_C_MBCHAR], [
1351  GLIBCXX_ENABLE(c-mbchar,$1,,[enable multibyte (wide) characters])
1352  # Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1353])
1354
1355
1356dnl
1357dnl Check to see if debugging libraries are to be built.
1358dnl
1359dnl --enable-libstdcxx-debug
1360dnl builds a separate set of debugging libraries in addition to the
1361dnl normal (shared, static) libstdc++ binaries.
1362dnl
1363dnl --disable-libstdcxx-debug
1364dnl builds only one (non-debug) version of libstdc++.
1365dnl
1366dnl --enable-libstdcxx-debug-flags=FLAGS
1367dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1368dnl
1369dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
1370dnl       Where DEFAULT is either `yes' or `no'.
1371dnl
1372AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
1373  AC_MSG_CHECKING([for additional debug build])
1374  GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
1375  AC_MSG_RESULT($enable_libstdcxx_debug)
1376  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
1377])
1378
1379
1380dnl
1381dnl Check for explicit debug flags.
1382dnl
1383dnl --enable-libstdcxx-debug-flags='-O1'
1384dnl is a general method for passing flags to be used when
1385dnl building debug libraries with --enable-debug.
1386dnl
1387dnl --disable-libstdcxx-debug-flags does nothing.
1388dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
1389dnl       If "default flags" is an empty string, the effect is the same
1390dnl       as --disable or --enable=no.
1391dnl
1392AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
1393  GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
1394    [pass compiler FLAGS when building debug library],
1395    [case "x$enable_libstdcxx_debug_flags" in
1396      xno | x)    enable_libstdcxx_debug_flags= ;;
1397      x-*)        ;;
1398      *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1399     esac])
1400
1401  # Option parsed, now set things appropriately
1402  DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
1403  AC_SUBST(DEBUG_FLAGS)
1404
1405  AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
1406])
1407
1408
1409dnl
1410dnl Check if the user only wants a freestanding library implementation.
1411dnl
1412dnl --disable-hosted-libstdcxx will turn off most of the library build,
1413dnl installing only the headers required by [17.4.1.3] and the language
1414dnl support library.  More than that will be built (to keep the Makefiles
1415dnl conveniently clean), but not installed.
1416dnl
1417dnl Sets:
1418dnl  is_hosted  (yes/no)
1419dnl
1420dnl Defines:
1421dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
1422dnl
1423AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
1424  AC_ARG_ENABLE([hosted-libstdcxx],
1425    AC_HELP_STRING([--disable-hosted-libstdcxx],
1426                   [only build freestanding C++ runtime support]),,
1427    [enable_hosted_libstdcxx=yes])
1428  if test "$enable_hosted_libstdcxx" = no; then
1429    AC_MSG_NOTICE([Only freestanding libraries will be built])
1430    is_hosted=no
1431    hosted_define=0
1432    enable_abi_check=no
1433    enable_libstdcxx_pch=no
1434  else
1435    is_hosted=yes
1436    hosted_define=1
1437  fi
1438  GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
1439  AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
1440    [Define to 1 if a full hosted library is built, or 0 if freestanding.])
1441])
1442
1443
1444dnl
1445dnl Check for template specializations for the 'long long' type extension.
1446dnl The result determines only whether 'long long' I/O is enabled; things
1447dnl like numeric_limits<> specializations are always available.
1448dnl
1449dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
1450dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
1451dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
1452dnl       Where DEFAULT is either `yes' or `no'.
1453dnl
1454AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
1455  GLIBCXX_ENABLE(long-long,$1,,[enables I/O support for 'long long'])
1456  if test $enable_long_long = yes; then
1457    AC_DEFINE(_GLIBCXX_USE_LONG_LONG)
1458  fi
1459])
1460
1461
1462dnl
1463dnl Check to see if building and using a C++ precompiled header can be done.
1464dnl
1465dnl --enable-libstdcxx-pch=yes
1466dnl default, this shows intent to use stdc++.h.gch If it looks like it
1467dnl may work, after some light-hearted attempts to puzzle out compiler
1468dnl support, flip bits on in include/Makefile.am
1469dnl
1470dnl --disable-libstdcxx-pch
1471dnl turns off attempts to use or build stdc++.h.gch.
1472dnl
1473dnl Substs:
1474dnl  glibcxx_PCHFLAGS
1475dnl
1476AC_DEFUN([GLIBCXX_ENABLE_PCH], [
1477  AC_MSG_CHECKING([for enabled PCH])
1478  GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
1479  AC_MSG_RESULT([$enable_libstdcxx_pch])
1480
1481  if test $enable_libstdcxx_pch = yes; then
1482    AC_CACHE_CHECK([for compiler with PCH support],
1483      [glibcxx_cv_prog_CXX_pch],
1484      [ac_save_CXXFLAGS="$CXXFLAGS"
1485       CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
1486       AC_LANG_SAVE
1487       AC_LANG_CPLUSPLUS
1488       echo '#include <math.h>' > conftest.h
1489       if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
1490		          -o conftest.h.gch 1>&5 2>&1 &&
1491	        echo '#error "pch failed"' > conftest.h &&
1492          echo '#include "conftest.h"' > conftest.cc &&
1493	       $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
1494       then
1495         glibcxx_cv_prog_CXX_pch=yes
1496       else
1497         glibcxx_cv_prog_CXX_pch=no
1498       fi
1499       rm -f conftest*
1500       CXXFLAGS=$ac_save_CXXFLAGS
1501       AC_LANG_RESTORE
1502      ])
1503    enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
1504  fi
1505
1506  GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
1507  if test $enable_libstdcxx_pch = yes; then
1508    glibcxx_PCHFLAGS="-include bits/stdc++.h"
1509  else
1510    glibcxx_PCHFLAGS=""
1511  fi
1512  AC_SUBST(glibcxx_PCHFLAGS)
1513])
1514
1515
1516dnl
1517dnl Check for exception handling support.  If an explicit enable/disable
1518dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1519dnl target may or may not support call frame exceptions.
1520dnl
1521dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1522dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1523dnl Neither one forces an attempt at detection.
1524dnl
1525dnl Defines:
1526dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
1527dnl
1528AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
1529  AC_MSG_CHECKING([for exception model to use])
1530  AC_LANG_SAVE
1531  AC_LANG_CPLUSPLUS
1532  GLIBCXX_ENABLE(sjlj-exceptions,auto,,
1533    [force use of builtin_setjmp for exceptions],
1534    [permit yes|no|auto])
1535
1536  if test $enable_sjlj_exceptions = auto; then
1537    # Botheration.  Now we've got to detect the exception model.  Link tests
1538    # against libgcc.a are problematic since we've not been given proper -L
1539    # bits for single-tree newlib and libgloss.
1540    #
1541    # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
1542    cat > conftest.$ac_ext << EOF
1543[#]line __oline__ "configure"
1544struct S { ~S(); };
1545void bar();
1546void foo()
1547{
1548  S s;
1549  bar();
1550}
1551EOF
1552    old_CXXFLAGS="$CXXFLAGS"
1553    CXXFLAGS=-S
1554    if AC_TRY_EVAL(ac_compile); then
1555      if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1556        enable_sjlj_exceptions=yes
1557      elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1558        enable_sjlj_exceptions=no
1559      fi
1560    fi
1561    CXXFLAGS="$old_CXXFLAGS"
1562    rm -f conftest*
1563  fi
1564
1565  # This is a tad weird, for hysterical raisins.  We have to map enable/disable 
1566  # to two different models.
1567  case $enable_sjlj_exceptions in
1568    yes)
1569      AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
1570        [Define if the compiler is configured for setjmp/longjmp exceptions.])
1571      ac_exception_model_name=sjlj
1572      ;;
1573    no)
1574      ac_exception_model_name="call frame"
1575      ;;
1576    *)
1577      AC_MSG_ERROR([unable to detect exception model])
1578      ;;
1579  esac
1580 AC_LANG_RESTORE
1581 AC_MSG_RESULT($ac_exception_model_name)
1582])
1583
1584
1585dnl
1586dnl Add version tags to symbols in shared library (or not), additionally
1587dnl marking other symbols as private/local (or not).
1588dnl
1589dnl --enable-symvers=style adds a version script to the linker call when
1590dnl       creating the shared library.  The choice of version script is
1591dnl       controlled by 'style'.
1592dnl --disable-symvers does not.
1593dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
1594dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
1595dnl       choose a default style based on linker characteristics.  Passing
1596dnl       'no' disables versioning.
1597dnl
1598AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
1599
1600GLIBCXX_ENABLE(symvers,$1,[=STYLE],
1601  [enables symbol versioning of the shared library],
1602  [permit yes|no|gnu])
1603
1604# If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
1605# don't know enough about $LD to do tricks...
1606AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
1607# FIXME  The following test is too strict, in theory.
1608if test $enable_shared = no ||
1609        test "x$LD" = x ||
1610        test x$glibcxx_gnu_ld_version = x; then
1611  enable_symvers=no
1612fi
1613
1614# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
1615if test $enable_symvers != no; then
1616  AC_MSG_CHECKING([for shared libgcc])
1617  ac_save_CFLAGS="$CFLAGS"
1618  CFLAGS=' -lgcc_s'
1619  AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
1620  CFLAGS="$ac_save_CFLAGS"
1621  if test $glibcxx_shared_libgcc = no; then
1622    cat > conftest.c <<EOF
1623int main (void) { return 0; }
1624EOF
1625changequote(,)dnl
1626    glibcxx_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1627			     -shared -shared-libgcc -o conftest.so \
1628			     conftest.c -v 2>&1 >/dev/null \
1629			     | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
1630changequote([,])dnl
1631    rm -f conftest.c conftest.so
1632    if test x${glibcxx_libgcc_s_suffix+set} = xset; then
1633      CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
1634      AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
1635      CFLAGS="$ac_save_CFLAGS"
1636    fi
1637  fi
1638  AC_MSG_RESULT($glibcxx_shared_libgcc)
1639fi
1640
1641# For GNU ld, we need at least this version.  The format is described in
1642# GLIBCXX_CHECK_LINKER_FEATURES above.
1643glibcxx_min_gnu_ld_version=21400
1644# XXXXXXXXXXX glibcxx_gnu_ld_version=21390
1645
1646# Check to see if unspecified "yes" value can win, given results above.
1647# Change "yes" into either "no" or a style name.
1648if test $enable_symvers = yes; then
1649  if test $with_gnu_ld = yes &&
1650     test $glibcxx_shared_libgcc = yes;
1651  then
1652    if test $glibcxx_gnu_ld_version -ge $glibcxx_min_gnu_ld_version ; then
1653      enable_symvers=gnu
1654    else
1655      # The right tools, the right setup, but too old.  Fallbacks?
1656      AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
1657      AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
1658      AC_MSG_WARN(=== You would need to upgrade your binutils to version)
1659      AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
1660      if test $glibcxx_gnu_ld_version -ge 21200 ; then
1661        # Globbing fix is present, proper block support is not.
1662        dnl AC_MSG_WARN([=== Dude, you are soooo close.  Maybe we can fake it.])
1663        dnl enable_symvers=???
1664        AC_MSG_WARN([=== Symbol versioning will be disabled.])
1665        enable_symvers=no
1666      else
1667        # 2.11 or older.
1668        AC_MSG_WARN([=== Symbol versioning will be disabled.])
1669        enable_symvers=no
1670      fi
1671    fi
1672  else
1673    # just fail for now
1674    AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
1675    AC_MSG_WARN([=== either you are not using a supported linker, or you are])
1676    AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
1677    AC_MSG_WARN([=== Symbol versioning will be disabled.])
1678    enable_symvers=no
1679  fi
1680fi
1681
1682# Everything parsed; figure out what file to use.
1683case $enable_symvers in
1684  no)
1685    SYMVER_MAP=config/linker-map.dummy
1686    ;;
1687  gnu)
1688    SYMVER_MAP=config/linker-map.gnu
1689    AC_DEFINE(_GLIBCXX_SYMVER)
1690    ;;
1691esac
1692
1693AC_SUBST(SYMVER_MAP)
1694AC_SUBST(port_specific_symbol_files)
1695GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
1696AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
1697])
1698
1699
1700dnl
1701dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1702dnl We must stage the required headers so that they will be installed
1703dnl with the library (unlike libgcc, the STL implementation is provided
1704dnl solely within headers).  Since we must not inject random user-space
1705dnl macro names into user-provided C++ code, we first stage into <file>-in
1706dnl and process to <file> with an output command.  The reason for a two-
1707dnl stage process here is to correctly handle $srcdir!=$objdir without
1708dnl having to write complex code (the sed commands to clean the macro
1709dnl namespace are complex and fragile enough as it is).  We must also
1710dnl add a relative path so that -I- is supported properly.
1711dnl
1712dnl Substs:
1713dnl  glibcxx_thread_h
1714dnl
1715dnl Defines:
1716dnl  HAVE_GTHR_DEFAULT
1717dnl
1718AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
1719  AC_MSG_CHECKING([for thread model used by GCC])
1720  target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
1721  AC_MSG_RESULT([$target_thread_file])
1722
1723  if test $target_thread_file != single; then
1724    AC_DEFINE(HAVE_GTHR_DEFAULT)
1725  fi
1726
1727  glibcxx_thread_h=gthr-$target_thread_file.h
1728  AC_SUBST(glibcxx_thread_h)
1729])
1730
1731
1732# Check whether LC_MESSAGES is available in <locale.h>.
1733# Ulrich Drepper <drepper@cygnus.com>, 1995.
1734#
1735# This file file be copied and used freely without restrictions.  It can
1736# be used in projects which are not available under the GNU Public License
1737# but which still want to provide support for the GNU gettext functionality.
1738# Please note that the actual code is *not* freely available.
1739
1740# serial 1
1741AC_DEFUN([AC_LC_MESSAGES], [
1742  AC_CHECK_HEADER(locale.h, [
1743    AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1744      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1745       ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1746    if test $ac_cv_val_LC_MESSAGES = yes; then
1747      AC_DEFINE(HAVE_LC_MESSAGES)
1748    fi
1749  ])
1750])
1751
1752
1753sinclude([../libtool.m4])
1754dnl The lines below arrange for aclocal not to bring an installed
1755dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1756dnl add a definition of LIBTOOL to Makefile.in.
1757ifelse(,,,[AC_SUBST(LIBTOOL)
1758AC_DEFUN([AM_PROG_LIBTOOL])
1759AC_DEFUN([AC_LIBTOOL_DLOPEN])
1760AC_DEFUN([AC_PROG_LD])
1761])
1762
1763dnl vim:et:ts=2:sw=2
1764