OSDN Git Service

2004-03-22 Paolo Carlini <pcarlini@suse.de>
[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|pool|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     pool)
1228       ALLOCATOR_H=config/allocator/pool_allocator_base.h
1229       ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
1230       ;;        
1231   esac
1232
1233   AC_SUBST(ALLOCATOR_H)
1234   AC_SUBST(ALLOCATOR_NAME)
1235 ])
1236
1237
1238 dnl
1239 dnl Check for whether the Boost-derived checks should be turned on.
1240 dnl
1241 dnl --enable-concept-checks turns them on.
1242 dnl --disable-concept-checks leaves them off.
1243 dnl  +  Usage:  GLIBCXX_ENABLE_CONCEPT_CHECKS[(DEFAULT)]
1244 dnl       Where DEFAULT is either `yes' or `no'.
1245 dnl
1246 AC_DEFUN([GLIBCXX_ENABLE_CONCEPT_CHECKS], [
1247   GLIBCXX_ENABLE(concept-checks,$1,,[use Boost-derived template checks])
1248   if test $enable_concept_checks = yes; then
1249     AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS)
1250   fi
1251 ])
1252
1253
1254 dnl
1255 dnl Check for which I/O library to use:  stdio, or something specific.
1256 dnl
1257 dnl Default is stdio.
1258 dnl
1259 AC_DEFUN([GLIBCXX_ENABLE_CSTDIO], [
1260   AC_MSG_CHECKING([for underlying I/O to use])
1261   GLIBCXX_ENABLE(cstdio,stdio,[=PACKAGE],
1262     [use target-specific I/O package], [permit stdio])
1263
1264   # Now that libio has been removed, you can have any color you want as long
1265   # as it's black.  This is one big no-op until other packages are added, but
1266   # showing the framework never hurts.
1267   case ${enable_cstdio} in
1268     stdio)
1269       CSTDIO_H=config/io/c_io_stdio.h
1270       BASIC_FILE_H=config/io/basic_file_stdio.h
1271       BASIC_FILE_CC=config/io/basic_file_stdio.cc
1272       AC_MSG_RESULT(stdio)
1273       ;;
1274   esac
1275
1276   AC_SUBST(CSTDIO_H)
1277   AC_SUBST(BASIC_FILE_H)
1278   AC_SUBST(BASIC_FILE_CC)
1279 ])
1280
1281
1282 dnl
1283 dnl Check for "unusual" flags to pass to the compiler while building.
1284 dnl
1285 dnl --enable-cxx-flags='-foo -bar -baz' is a general method for passing
1286 dnl     experimental flags such as -fpch, -fIMI, -Dfloat=char, etc.
1287 dnl --disable-cxx-flags passes nothing.
1288 dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
1289 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
1290 dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
1291 dnl  +  Usage:  GLIBCXX_ENABLE_CXX_FLAGS(default flags)
1292 dnl       If "default flags" is an empty string, the effect is the same
1293 dnl       as --disable or --enable=no.
1294 dnl
1295 AC_DEFUN([GLIBCXX_ENABLE_CXX_FLAGS], [dnl
1296   AC_MSG_CHECKING([for extra compiler flags for building])
1297   GLIBCXX_ENABLE(cxx-flags,$1,[=FLAGS],
1298     [pass compiler FLAGS when building library],
1299     [case "x$enable_cxx_flags" in
1300       xno | x)   enable_cxx_flags= ;;
1301       x-*)       ;;
1302       *)         AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1303      esac])
1304
1305   # Run through flags (either default or command-line) and set anything
1306   # extra (e.g., #defines) that must accompany particular g++ options.
1307   if test -n "$enable_cxx_flags"; then
1308     for f in $enable_cxx_flags; do
1309       case "$f" in
1310         -fhonor-std)  ;;
1311         -*)  ;;
1312         *)   # and we're trying to pass /what/ exactly?
1313              AC_MSG_ERROR([compiler flags start with a -]) ;;
1314       esac
1315     done
1316   fi
1317
1318   EXTRA_CXX_FLAGS="$enable_cxx_flags"
1319   AC_MSG_RESULT($EXTRA_CXX_FLAGS)
1320   AC_SUBST(EXTRA_CXX_FLAGS)
1321 ])
1322
1323
1324 dnl
1325 dnl Check for wide character support.  Has the same effect as the option
1326 dnl in gcc's configure, but in a form that autoconf can mess with.
1327 dnl
1328 dnl --enable-c-mbchar requests all the wchar_t stuff.
1329 dnl --disable-c-mbchar doesn't.
1330 dnl  +  Usage:  GLIBCXX_ENABLE_C_MBCHAR[(DEFAULT)]
1331 dnl       Where DEFAULT is either `yes' or `no'.
1332 dnl
1333 AC_DEFUN([GLIBCXX_ENABLE_C_MBCHAR], [
1334   GLIBCXX_ENABLE(c-mbchar,$1,,[enable multibyte (wide) characters])
1335   # Option parsed, now other scripts can test enable_c_mbchar for yes/no.
1336 ])
1337
1338
1339 dnl
1340 dnl Check to see if debugging libraries are to be built.
1341 dnl
1342 dnl --enable-libstdcxx-debug
1343 dnl builds a separate set of debugging libraries in addition to the
1344 dnl normal (shared, static) libstdc++ binaries.
1345 dnl
1346 dnl --disable-libstdcxx-debug
1347 dnl builds only one (non-debug) version of libstdc++.
1348 dnl
1349 dnl --enable-libstdcxx-debug-flags=FLAGS
1350 dnl iff --enable-debug == yes, then use FLAGS to build the debug library.
1351 dnl
1352 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG[(DEFAULT)]
1353 dnl       Where DEFAULT is either `yes' or `no'.
1354 dnl
1355 AC_DEFUN([GLIBCXX_ENABLE_DEBUG], [
1356   AC_MSG_CHECKING([for additional debug build])
1357   GLIBCXX_ENABLE(libstdcxx-debug,$1,,[build extra debug library])
1358   AC_MSG_RESULT($enable_libstdcxx_debug)
1359   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_DEBUG, test $enable_libstdcxx_debug = yes)
1360 ])
1361
1362
1363 dnl
1364 dnl Check for explicit debug flags.
1365 dnl
1366 dnl --enable-libstdcxx-debug-flags='-O1'
1367 dnl is a general method for passing flags to be used when
1368 dnl building debug libraries with --enable-debug.
1369 dnl
1370 dnl --disable-libstdcxx-debug-flags does nothing.
1371 dnl  +  Usage:  GLIBCXX_ENABLE_DEBUG_FLAGS(default flags)
1372 dnl       If "default flags" is an empty string, the effect is the same
1373 dnl       as --disable or --enable=no.
1374 dnl
1375 AC_DEFUN([GLIBCXX_ENABLE_DEBUG_FLAGS], [
1376   GLIBCXX_ENABLE(libstdcxx-debug-flags,[$1],[=FLAGS],
1377     [pass compiler FLAGS when building debug library],
1378     [case "x$enable_libstdcxx_debug_flags" in
1379       xno | x)    enable_libstdcxx_debug_flags= ;;
1380       x-*)        ;;
1381       *)          AC_MSG_ERROR(_g_switch needs compiler flags as arguments) ;;
1382      esac])
1383
1384   # Option parsed, now set things appropriately
1385   DEBUG_FLAGS="$enable_libstdcxx_debug_flags"
1386   AC_SUBST(DEBUG_FLAGS)
1387
1388   AC_MSG_NOTICE([Debug build flags set to $DEBUG_FLAGS])
1389 ])
1390
1391
1392 dnl
1393 dnl Check if the user only wants a freestanding library implementation.
1394 dnl
1395 dnl --disable-hosted-libstdcxx will turn off most of the library build,
1396 dnl installing only the headers required by [17.4.1.3] and the language
1397 dnl support library.  More than that will be built (to keep the Makefiles
1398 dnl conveniently clean), but not installed.
1399 dnl
1400 dnl Sets:
1401 dnl  is_hosted  (yes/no)
1402 dnl
1403 dnl Defines:
1404 dnl  _GLIBCXX_HOSTED   (always defined, either to 1 or 0)
1405 dnl
1406 AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
1407   AC_ARG_ENABLE([hosted-libstdcxx],
1408     AC_HELP_STRING([--disable-hosted-libstdcxx],
1409                    [only build freestanding C++ runtime support]),,
1410     [enable_hosted_libstdcxx=yes])
1411   if test "$enable_hosted_libstdcxx" = no; then
1412     AC_MSG_NOTICE([Only freestanding libraries will be built])
1413     is_hosted=no
1414     hosted_define=0
1415     enable_abi_check=no
1416     enable_libstdcxx_pch=no
1417   else
1418     is_hosted=yes
1419     hosted_define=1
1420   fi
1421   GLIBCXX_CONDITIONAL(GLIBCXX_HOSTED, test $is_hosted = yes)
1422   AC_DEFINE_UNQUOTED(_GLIBCXX_HOSTED, $hosted_define,
1423     [Define to 1 if a full hosted library is built, or 0 if freestanding.])
1424 ])
1425
1426
1427 dnl
1428 dnl Check for template specializations for the 'long long' type extension.
1429 dnl The result determines only whether 'long long' I/O is enabled; things
1430 dnl like numeric_limits<> specializations are always available.
1431 dnl
1432 dnl --enable-long-long defines _GLIBCXX_USE_LONG_LONG
1433 dnl --disable-long-long leaves _GLIBCXX_USE_LONG_LONG undefined
1434 dnl  +  Usage:  GLIBCXX_ENABLE_LONG_LONG[(DEFAULT)]
1435 dnl       Where DEFAULT is either `yes' or `no'.
1436 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
1437 dnl
1438 AC_DEFUN([GLIBCXX_ENABLE_LONG_LONG], [
1439   GLIBCXX_ENABLE(long-long,$1,,[enables I/O support for 'long long'])
1440
1441   AC_LANG_SAVE
1442   AC_LANG_CPLUSPLUS
1443
1444   AC_MSG_CHECKING([for enabled long long I/O support])
1445   # iostreams require strtoll, strtoull to compile
1446   AC_TRY_COMPILE([#include <stdlib.h>],
1447                  [char* tmp; strtoll("gnu", &tmp, 10);],,[enable_long_long=no])
1448   AC_TRY_COMPILE([#include <stdlib.h>],
1449                  [char* tmp; strtoull("gnu", &tmp, 10);],,[enable_long_long=no])
1450
1451   # Option parsed, now set things appropriately
1452   if test $enable_long_long = yes; then
1453     AC_DEFINE(_GLIBCXX_USE_LONG_LONG)
1454   fi
1455   AC_MSG_RESULT($enable_long_long)
1456
1457   AC_LANG_RESTORE
1458 ])
1459
1460
1461 dnl
1462 dnl Check to see if building and using a C++ precompiled header can be done.
1463 dnl
1464 dnl --enable-libstdcxx-pch=yes
1465 dnl default, this shows intent to use stdc++.h.gch If it looks like it
1466 dnl may work, after some light-hearted attempts to puzzle out compiler
1467 dnl support, flip bits on in include/Makefile.am
1468 dnl
1469 dnl --disable-libstdcxx-pch
1470 dnl turns off attempts to use or build stdc++.h.gch.
1471 dnl
1472 dnl Substs:
1473 dnl  glibcxx_PCHFLAGS
1474 dnl
1475 AC_DEFUN([GLIBCXX_ENABLE_PCH], [
1476   AC_MSG_CHECKING([for enabled PCH])
1477   GLIBCXX_ENABLE(libstdcxx-pch,$1,,[build pre-compiled libstdc++ headers])
1478   AC_MSG_RESULT([$enable_libstdcxx_pch])
1479
1480   if test $enable_libstdcxx_pch = yes; then
1481     AC_CACHE_CHECK([for compiler with PCH support],
1482       [glibcxx_cv_prog_CXX_pch],
1483       [ac_save_CXXFLAGS="$CXXFLAGS"
1484        CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
1485        AC_LANG_SAVE
1486        AC_LANG_CPLUSPLUS
1487        echo '#include <math.h>' > conftest.h
1488        if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
1489                           -o conftest.h.gch 1>&5 2>&1 &&
1490                 echo '#error "pch failed"' > conftest.h &&
1491           echo '#include "conftest.h"' > conftest.cc &&
1492                $CXX -c $CXXFLAGS $CPPFLAGS conftest.cc 1>&5 2>&1 ;
1493        then
1494          glibcxx_cv_prog_CXX_pch=yes
1495        else
1496          glibcxx_cv_prog_CXX_pch=no
1497        fi
1498        rm -f conftest*
1499        CXXFLAGS=$ac_save_CXXFLAGS
1500        AC_LANG_RESTORE
1501       ])
1502     enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
1503   fi
1504
1505   GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_PCH, test $enable_libstdcxx_pch = yes)
1506   if test $enable_libstdcxx_pch = yes; then
1507     glibcxx_PCHFLAGS="-include bits/stdc++.h"
1508   else
1509     glibcxx_PCHFLAGS=""
1510   fi
1511   AC_SUBST(glibcxx_PCHFLAGS)
1512 ])
1513
1514
1515 dnl
1516 dnl Check for exception handling support.  If an explicit enable/disable
1517 dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
1518 dnl target may or may not support call frame exceptions.
1519 dnl
1520 dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
1521 dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
1522 dnl Neither one forces an attempt at detection.
1523 dnl
1524 dnl Defines:
1525 dnl  _GLIBCXX_SJLJ_EXCEPTIONS if the compiler is configured for it
1526 dnl
1527 AC_DEFUN([GLIBCXX_ENABLE_SJLJ_EXCEPTIONS], [
1528   AC_MSG_CHECKING([for exception model to use])
1529   AC_LANG_SAVE
1530   AC_LANG_CPLUSPLUS
1531   GLIBCXX_ENABLE(sjlj-exceptions,auto,,
1532     [force use of builtin_setjmp for exceptions],
1533     [permit yes|no|auto])
1534
1535   if test $enable_sjlj_exceptions = auto; then
1536     # Botheration.  Now we've got to detect the exception model.  Link tests
1537     # against libgcc.a are problematic since we've not been given proper -L
1538     # bits for single-tree newlib and libgloss.
1539     #
1540     # Fake what AC_TRY_COMPILE does.  XXX Look at redoing this new-style.
1541     cat > conftest.$ac_ext << EOF
1542 [#]line __oline__ "configure"
1543 struct S { ~S(); };
1544 void bar();
1545 void foo()
1546 {
1547   S s;
1548   bar();
1549 }
1550 EOF
1551     old_CXXFLAGS="$CXXFLAGS"
1552     CXXFLAGS=-S
1553     if AC_TRY_EVAL(ac_compile); then
1554       if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
1555         enable_sjlj_exceptions=yes
1556       elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
1557         enable_sjlj_exceptions=no
1558       fi
1559     fi
1560     CXXFLAGS="$old_CXXFLAGS"
1561     rm -f conftest*
1562   fi
1563
1564   # This is a tad weird, for hysterical raisins.  We have to map enable/disable 
1565   # to two different models.
1566   case $enable_sjlj_exceptions in
1567     yes)
1568       AC_DEFINE(_GLIBCXX_SJLJ_EXCEPTIONS, 1,
1569         [Define if the compiler is configured for setjmp/longjmp exceptions.])
1570       ac_exception_model_name=sjlj
1571       ;;
1572     no)
1573       ac_exception_model_name="call frame"
1574       ;;
1575     *)
1576       AC_MSG_ERROR([unable to detect exception model])
1577       ;;
1578   esac
1579  AC_LANG_RESTORE
1580  AC_MSG_RESULT($ac_exception_model_name)
1581 ])
1582
1583
1584 dnl
1585 dnl Add version tags to symbols in shared library (or not), additionally
1586 dnl marking other symbols as private/local (or not).
1587 dnl
1588 dnl --enable-symvers=style adds a version script to the linker call when
1589 dnl       creating the shared library.  The choice of version script is
1590 dnl       controlled by 'style'.
1591 dnl --disable-symvers does not.
1592 dnl  +  Usage:  GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
1593 dnl       Where DEFAULT is either 'yes' or 'no'.  Passing `yes' tries to
1594 dnl       choose a default style based on linker characteristics.  Passing
1595 dnl       'no' disables versioning.
1596 dnl
1597 AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [
1598
1599 GLIBCXX_ENABLE(symvers,$1,[=STYLE],
1600   [enables symbol versioning of the shared library],
1601   [permit yes|no|gnu])
1602
1603 # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we
1604 # don't know enough about $LD to do tricks...
1605 AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES])
1606 # FIXME  The following test is too strict, in theory.
1607 if test $enable_shared = no ||
1608         test "x$LD" = x ||
1609         test x$glibcxx_gnu_ld_version = x; then
1610   enable_symvers=no
1611 fi
1612
1613 # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
1614 if test $enable_symvers != no; then
1615   AC_MSG_CHECKING([for shared libgcc])
1616   ac_save_CFLAGS="$CFLAGS"
1617   CFLAGS=' -lgcc_s'
1618   AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
1619   CFLAGS="$ac_save_CFLAGS"
1620   AC_MSG_RESULT($glibcxx_shared_libgcc)
1621 fi
1622
1623 # For GNU ld, we need at least this version.  The format is described in
1624 # GLIBCXX_CHECK_LINKER_FEATURES above.
1625 glibcxx_min_gnu_ld_version=21400
1626 # XXXXXXXXXXX glibcxx_gnu_ld_version=21390
1627
1628 # Check to see if unspecified "yes" value can win, given results above.
1629 # Change "yes" into either "no" or a style name.
1630 if test $enable_symvers = yes; then
1631   if test $with_gnu_ld = yes &&
1632      test $glibcxx_shared_libgcc = yes;
1633   then
1634     if test $glibcxx_gnu_ld_version -ge $glibcxx_min_gnu_ld_version ; then
1635       enable_symvers=gnu
1636     else
1637       # The right tools, the right setup, but too old.  Fallbacks?
1638       AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for)
1639       AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
1640       AC_MSG_WARN(=== You would need to upgrade your binutils to version)
1641       AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.)
1642       if test $glibcxx_gnu_ld_version -ge 21200 ; then
1643         # Globbing fix is present, proper block support is not.
1644         dnl AC_MSG_WARN([=== Dude, you are soooo close.  Maybe we can fake it.])
1645         dnl enable_symvers=???
1646         AC_MSG_WARN([=== Symbol versioning will be disabled.])
1647         enable_symvers=no
1648       else
1649         # 2.11 or older.
1650         AC_MSG_WARN([=== Symbol versioning will be disabled.])
1651         enable_symvers=no
1652       fi
1653     fi
1654   else
1655     # just fail for now
1656     AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
1657     AC_MSG_WARN([=== either you are not using a supported linker, or you are])
1658     AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
1659     AC_MSG_WARN([=== Symbol versioning will be disabled.])
1660     enable_symvers=no
1661   fi
1662 fi
1663
1664 # Everything parsed; figure out what file to use.
1665 case $enable_symvers in
1666   no)
1667     SYMVER_MAP=config/linker-map.dummy
1668     ;;
1669   gnu)
1670     SYMVER_MAP=config/linker-map.gnu
1671     AC_DEFINE(_GLIBCXX_SYMVER)
1672     ;;
1673 esac
1674
1675 AC_SUBST(SYMVER_MAP)
1676 AC_SUBST(port_specific_symbol_files)
1677 GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
1678 AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
1679 ])
1680
1681
1682 dnl
1683 dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
1684 dnl We must stage the required headers so that they will be installed
1685 dnl with the library (unlike libgcc, the STL implementation is provided
1686 dnl solely within headers).  Since we must not inject random user-space
1687 dnl macro names into user-provided C++ code, we first stage into <file>-in
1688 dnl and process to <file> with an output command.  The reason for a two-
1689 dnl stage process here is to correctly handle $srcdir!=$objdir without
1690 dnl having to write complex code (the sed commands to clean the macro
1691 dnl namespace are complex and fragile enough as it is).  We must also
1692 dnl add a relative path so that -I- is supported properly.
1693 dnl
1694 dnl Substs:
1695 dnl  glibcxx_thread_h
1696 dnl
1697 dnl Defines:
1698 dnl  HAVE_GTHR_DEFAULT
1699 dnl
1700 AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
1701   AC_MSG_CHECKING([for thread model used by GCC])
1702   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
1703   AC_MSG_RESULT([$target_thread_file])
1704
1705   if test $target_thread_file != single; then
1706     AC_DEFINE(HAVE_GTHR_DEFAULT)
1707   fi
1708
1709   glibcxx_thread_h=gthr-$target_thread_file.h
1710   AC_SUBST(glibcxx_thread_h)
1711 ])
1712
1713
1714 # Check whether LC_MESSAGES is available in <locale.h>.
1715 # Ulrich Drepper <drepper@cygnus.com>, 1995.
1716 #
1717 # This file file be copied and used freely without restrictions.  It can
1718 # be used in projects which are not available under the GNU Public License
1719 # but which still want to provide support for the GNU gettext functionality.
1720 # Please note that the actual code is *not* freely available.
1721
1722 # serial 1
1723 AC_DEFUN([AC_LC_MESSAGES], [
1724   AC_CHECK_HEADER(locale.h, [
1725     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
1726       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
1727        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
1728     if test $ac_cv_val_LC_MESSAGES = yes; then
1729       AC_DEFINE(HAVE_LC_MESSAGES)
1730     fi
1731   ])
1732 ])
1733
1734
1735 sinclude([../libtool.m4])
1736 dnl The lines below arrange for aclocal not to bring an installed
1737 dnl libtool.m4 into aclocal.m4, while still arranging for automake to
1738 dnl add a definition of LIBTOOL to Makefile.in.
1739 ifelse(,,,[AC_SUBST(LIBTOOL)
1740 AC_DEFUN([AM_PROG_LIBTOOL])
1741 AC_DEFUN([AC_LIBTOOL_DLOPEN])
1742 AC_DEFUN([AC_PROG_LD])
1743 ])
1744
1745 dnl vim:et:ts=2:sw=2