OSDN Git Service

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