xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/linkage.m4 (revision 1debfc3d3fad8af6f31804271c18e67f77b4d718)
1*1debfc3dSmrgdnl
2*1debfc3dSmrgdnl This file contains macros for testing linkage.
3*1debfc3dSmrgdnl
4*1debfc3dSmrg
5*1debfc3dSmrgdnl
6*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
7*1debfc3dSmrgdnl declared when using the c++ compiler
8*1debfc3dSmrgdnl ASSUMES argument is a math function with ONE parameter
9*1debfc3dSmrgdnl
10*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_1
11*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [
12*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
13*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
14*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
15*1debfc3dSmrg      AC_LANG_SAVE
16*1debfc3dSmrg      AC_LANG_CPLUSPLUS
17*1debfc3dSmrg      AC_TRY_COMPILE([#include <math.h>
18*1debfc3dSmrg		      #ifdef HAVE_IEEEFP_H
19*1debfc3dSmrg		      #include <ieeefp.h>
20*1debfc3dSmrg		      #endif
21*1debfc3dSmrg		     ],
22*1debfc3dSmrg                     [ $1(0);],
23*1debfc3dSmrg                      [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
24*1debfc3dSmrg      AC_LANG_RESTORE
25*1debfc3dSmrg    ])
26*1debfc3dSmrg  fi
27*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
28*1debfc3dSmrg])
29*1debfc3dSmrg
30*1debfc3dSmrg
31*1debfc3dSmrgdnl
32*1debfc3dSmrgdnl Define autoheader template for using the underscore functions
33*1debfc3dSmrgdnl For each parameter, create a macro where if func doesn't exist,
34*1debfc3dSmrgdnl but _func does, then it will "#define func _func".
35*1debfc3dSmrgdnl
36*1debfc3dSmrgdnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS
37*1debfc3dSmrgAC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS],
38*1debfc3dSmrg[AC_FOREACH([glibcxx_ufunc], [$1],
39*1debfc3dSmrg  [AH_VERBATIM(_[]glibcxx_ufunc,
40*1debfc3dSmrg[#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[)
41*1debfc3dSmrg# define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1
42*1debfc3dSmrg# define ]glibcxx_ufunc[ _]glibcxx_ufunc[
43*1debfc3dSmrg#endif])])
44*1debfc3dSmrg])
45*1debfc3dSmrg
46*1debfc3dSmrg
47*1debfc3dSmrgdnl
48*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
49*1debfc3dSmrgdnl 1) declared when using the c++ compiler
50*1debfc3dSmrgdnl 2) has "C" linkage
51*1debfc3dSmrgdnl 3) if not, see if 1) and 2) for argument prepended with '_'
52*1debfc3dSmrgdnl
53*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links
54*1debfc3dSmrgdnl
55*1debfc3dSmrgdnl argument 1 is name of function to check
56*1debfc3dSmrgdnl
57*1debfc3dSmrgdnl ASSUMES argument is a math function with ONE parameter
58*1debfc3dSmrgdnl
59*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1
60*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [
61*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_1($1)
62*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
63*1debfc3dSmrg    AC_CHECK_FUNCS($1)
64*1debfc3dSmrg  else
65*1debfc3dSmrg    GLIBCXX_CHECK_MATH_DECL_1(_$1)
66*1debfc3dSmrg    if test x$glibcxx_cv_func__$1_use = x"yes"; then
67*1debfc3dSmrg      AC_CHECK_FUNCS(_$1)
68*1debfc3dSmrg    fi
69*1debfc3dSmrg  fi
70*1debfc3dSmrg  GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
71*1debfc3dSmrg])
72*1debfc3dSmrg
73*1debfc3dSmrg
74*1debfc3dSmrgdnl
75*1debfc3dSmrgdnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
76*1debfc3dSmrgdnl of functions at once.  It's an all-or-nothing check -- either
77*1debfc3dSmrgdnl HAVE_XYZ is defined for each of the functions, or for none of them.
78*1debfc3dSmrgdnl Doing it this way saves significant configure time.
79*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [
80*1debfc3dSmrg  define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
81*1debfc3dSmrg  AC_MSG_CHECKING([for $1 functions])
82*1debfc3dSmrg  AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
83*1debfc3dSmrg    AC_LANG_SAVE
84*1debfc3dSmrg    AC_LANG_CPLUSPLUS
85*1debfc3dSmrg    AC_TRY_COMPILE([#include <math.h>],
86*1debfc3dSmrg                   patsubst(funclist,[\w+],[\& (0);]),
87*1debfc3dSmrg                   [glibcxx_cv_func_$2_use=yes],
88*1debfc3dSmrg                   [glibcxx_cv_func_$2_use=no])
89*1debfc3dSmrg    AC_LANG_RESTORE])
90*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$2_use)
91*1debfc3dSmrg  if test x$glibcxx_cv_func_$2_use = x"yes"; then
92*1debfc3dSmrg    AC_CHECK_FUNCS(funclist)
93*1debfc3dSmrg  else
94*1debfc3dSmrg    AC_MSG_CHECKING([for _$1 functions])
95*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func__$2_use, [
96*1debfc3dSmrg      AC_LANG_SAVE
97*1debfc3dSmrg      AC_LANG_CPLUSPLUS
98*1debfc3dSmrg      AC_TRY_COMPILE([#include <math.h>],
99*1debfc3dSmrg                     patsubst(funclist,[\w+],[_\& (0);]),
100*1debfc3dSmrg                     [glibcxx_cv_func__$2_use=yes],
101*1debfc3dSmrg                     [glibcxx_cv_func__$2_use=no])
102*1debfc3dSmrg      AC_LANG_RESTORE])
103*1debfc3dSmrg    AC_MSG_RESULT($glibcxx_cv_func__$2_use)
104*1debfc3dSmrg    if test x$glibcxx_cv_func__$2_use = x"yes"; then
105*1debfc3dSmrg      AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&]))
106*1debfc3dSmrg    fi
107*1debfc3dSmrg  fi
108*1debfc3dSmrg  GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist)
109*1debfc3dSmrg  undefine([funclist])
110*1debfc3dSmrg])
111*1debfc3dSmrg
112*1debfc3dSmrgdnl
113*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
114*1debfc3dSmrgdnl declared when using the c++ compiler
115*1debfc3dSmrgdnl ASSUMES argument is a math function with TWO parameters
116*1debfc3dSmrgdnl
117*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_2
118*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [
119*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
120*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
121*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
122*1debfc3dSmrg      AC_LANG_SAVE
123*1debfc3dSmrg      AC_LANG_CPLUSPLUS
124*1debfc3dSmrg      AC_TRY_COMPILE([#include <math.h>],
125*1debfc3dSmrg                     [ $1(0, 0);],
126*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
127*1debfc3dSmrg      AC_LANG_RESTORE
128*1debfc3dSmrg    ])
129*1debfc3dSmrg  fi
130*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
131*1debfc3dSmrg])
132*1debfc3dSmrg
133*1debfc3dSmrgdnl
134*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
135*1debfc3dSmrgdnl 1) declared when using the c++ compiler
136*1debfc3dSmrgdnl 2) has "C" linkage
137*1debfc3dSmrgdnl
138*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links
139*1debfc3dSmrgdnl
140*1debfc3dSmrgdnl argument 1 is name of function to check
141*1debfc3dSmrgdnl
142*1debfc3dSmrgdnl ASSUMES argument is a math function with TWO parameters
143*1debfc3dSmrgdnl
144*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2
145*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [
146*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_2($1)
147*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
148*1debfc3dSmrg    AC_CHECK_FUNCS($1)
149*1debfc3dSmrg  else
150*1debfc3dSmrg    GLIBCXX_CHECK_MATH_DECL_2(_$1)
151*1debfc3dSmrg    if test x$glibcxx_cv_func__$1_use = x"yes"; then
152*1debfc3dSmrg      AC_CHECK_FUNCS(_$1)
153*1debfc3dSmrg    fi
154*1debfc3dSmrg  fi
155*1debfc3dSmrg  GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
156*1debfc3dSmrg])
157*1debfc3dSmrg
158*1debfc3dSmrg
159*1debfc3dSmrgdnl
160*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
161*1debfc3dSmrgdnl declared when using the c++ compiler
162*1debfc3dSmrgdnl ASSUMES argument is a math function with THREE parameters
163*1debfc3dSmrgdnl
164*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_3
165*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [
166*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
167*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
168*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
169*1debfc3dSmrg      AC_LANG_SAVE
170*1debfc3dSmrg      AC_LANG_CPLUSPLUS
171*1debfc3dSmrg      AC_TRY_COMPILE([#include <math.h>],
172*1debfc3dSmrg                     [ $1(0, 0, 0);],
173*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
174*1debfc3dSmrg      AC_LANG_RESTORE
175*1debfc3dSmrg    ])
176*1debfc3dSmrg  fi
177*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
178*1debfc3dSmrg])
179*1debfc3dSmrg
180*1debfc3dSmrgdnl
181*1debfc3dSmrgdnl Check to see if the (math function) argument passed is
182*1debfc3dSmrgdnl 1) declared when using the c++ compiler
183*1debfc3dSmrgdnl 2) has "C" linkage
184*1debfc3dSmrgdnl
185*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is declared and links
186*1debfc3dSmrgdnl
187*1debfc3dSmrgdnl argument 1 is name of function to check
188*1debfc3dSmrgdnl
189*1debfc3dSmrgdnl ASSUMES argument is a math function with THREE parameters
190*1debfc3dSmrgdnl
191*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3
192*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [
193*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_3($1)
194*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
195*1debfc3dSmrg    AC_CHECK_FUNCS($1)
196*1debfc3dSmrg  else
197*1debfc3dSmrg    GLIBCXX_CHECK_MATH_DECL_3(_$1)
198*1debfc3dSmrg    if test x$glibcxx_cv_func__$1_use = x"yes"; then
199*1debfc3dSmrg      AC_CHECK_FUNCS(_$1)
200*1debfc3dSmrg    fi
201*1debfc3dSmrg  fi
202*1debfc3dSmrg  GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
203*1debfc3dSmrg])
204*1debfc3dSmrg
205*1debfc3dSmrg
206*1debfc3dSmrgdnl
207*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is
208*1debfc3dSmrgdnl 1) declared when using the c++ compiler
209*1debfc3dSmrgdnl 2) has "C" linkage
210*1debfc3dSmrgdnl
211*1debfc3dSmrgdnl argument 1 is name of function to check
212*1debfc3dSmrgdnl
213*1debfc3dSmrgdnl ASSUMES argument is a stdlib function without parameters
214*1debfc3dSmrgdnl
215*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0
216*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [
217*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
218*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
219*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
220*1debfc3dSmrg      AC_LANG_SAVE
221*1debfc3dSmrg      AC_LANG_CPLUSPLUS
222*1debfc3dSmrg      AC_TRY_COMPILE([#include <stdlib.h>],
223*1debfc3dSmrg                     [ $1();],
224*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
225*1debfc3dSmrg      AC_LANG_RESTORE
226*1debfc3dSmrg    ])
227*1debfc3dSmrg  fi
228*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
229*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
230*1debfc3dSmrg    AC_CHECK_FUNCS($1)
231*1debfc3dSmrg  fi
232*1debfc3dSmrg])
233*1debfc3dSmrg
234*1debfc3dSmrg
235*1debfc3dSmrgdnl
236*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is
237*1debfc3dSmrgdnl 1) declared when using the c++ compiler
238*1debfc3dSmrgdnl 2) has "C" linkage
239*1debfc3dSmrgdnl
240*1debfc3dSmrgdnl argument 1 is name of function to check
241*1debfc3dSmrgdnl
242*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with ONE parameter
243*1debfc3dSmrgdnl
244*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1
245*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1], [
246*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
247*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
248*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
249*1debfc3dSmrg      AC_LANG_SAVE
250*1debfc3dSmrg      AC_LANG_CPLUSPLUS
251*1debfc3dSmrg      AC_TRY_COMPILE([#include <stdlib.h>],
252*1debfc3dSmrg                     [ $1(0);],
253*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
254*1debfc3dSmrg      AC_LANG_RESTORE
255*1debfc3dSmrg    ])
256*1debfc3dSmrg  fi
257*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
258*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
259*1debfc3dSmrg    AC_CHECK_FUNCS($1)
260*1debfc3dSmrg  fi
261*1debfc3dSmrg])
262*1debfc3dSmrg
263*1debfc3dSmrg
264*1debfc3dSmrgdnl
265*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is
266*1debfc3dSmrgdnl 1) declared when using the c++ compiler
267*1debfc3dSmrgdnl 2) has "C" linkage
268*1debfc3dSmrgdnl
269*1debfc3dSmrgdnl argument 1 is name of function to check
270*1debfc3dSmrgdnl
271*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with TWO parameters
272*1debfc3dSmrgdnl
273*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
274*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [
275*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
276*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
277*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
278*1debfc3dSmrg      AC_LANG_SAVE
279*1debfc3dSmrg      AC_LANG_CPLUSPLUS
280*1debfc3dSmrg      AC_TRY_COMPILE([#include <stdlib.h>],
281*1debfc3dSmrg                     [ $1(0, 0);],
282*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
283*1debfc3dSmrg      AC_LANG_RESTORE
284*1debfc3dSmrg    ])
285*1debfc3dSmrg  fi
286*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
287*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
288*1debfc3dSmrg    AC_CHECK_FUNCS($1)
289*1debfc3dSmrg  fi
290*1debfc3dSmrg  GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
291*1debfc3dSmrg])
292*1debfc3dSmrg
293*1debfc3dSmrg
294*1debfc3dSmrgdnl
295*1debfc3dSmrgdnl Check to see if the (stdlib function) argument passed is
296*1debfc3dSmrgdnl 1) declared when using the c++ compiler
297*1debfc3dSmrgdnl 2) has "C" linkage
298*1debfc3dSmrgdnl
299*1debfc3dSmrgdnl argument 1 is name of function to check
300*1debfc3dSmrgdnl
301*1debfc3dSmrgdnl ASSUMES argument is a stdlib function with THREE parameters
302*1debfc3dSmrgdnl
303*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3
304*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [
305*1debfc3dSmrg  AC_MSG_CHECKING([for $1 declaration])
306*1debfc3dSmrg  if test x${glibcxx_cv_func_$1_use+set} != xset; then
307*1debfc3dSmrg    AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
308*1debfc3dSmrg      AC_LANG_SAVE
309*1debfc3dSmrg      AC_LANG_CPLUSPLUS
310*1debfc3dSmrg      AC_TRY_COMPILE([#include <stdlib.h>],
311*1debfc3dSmrg                     [ $1(0, 0, 0);],
312*1debfc3dSmrg                     [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
313*1debfc3dSmrg      AC_LANG_RESTORE
314*1debfc3dSmrg    ])
315*1debfc3dSmrg  fi
316*1debfc3dSmrg  AC_MSG_RESULT($glibcxx_cv_func_$1_use)
317*1debfc3dSmrg  if test x$glibcxx_cv_func_$1_use = x"yes"; then
318*1debfc3dSmrg    AC_CHECK_FUNCS($1)
319*1debfc3dSmrg  fi
320*1debfc3dSmrg])
321*1debfc3dSmrg
322*1debfc3dSmrgdnl
323*1debfc3dSmrgdnl Check to see what the underlying c library is like
324*1debfc3dSmrgdnl These checks need to do two things:
325*1debfc3dSmrgdnl 1) make sure the name is declared when using the c++ compiler
326*1debfc3dSmrgdnl 2) make sure the name has "C" linkage
327*1debfc3dSmrgdnl This might seem like overkill but experience has shown that it's not...
328*1debfc3dSmrgdnl
329*1debfc3dSmrgdnl Define HAVE_STRTOLD if "strtold" is declared and links
330*1debfc3dSmrgdnl Define HAVE_STRTOF if "strtof" is declared and links
331*1debfc3dSmrgdnl
332*1debfc3dSmrgdnl GLIBCXX_CHECK_STDLIB_SUPPORT
333*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [
334*1debfc3dSmrg  ac_test_CXXFLAGS="${CXXFLAGS+set}"
335*1debfc3dSmrg  ac_save_CXXFLAGS="$CXXFLAGS"
336*1debfc3dSmrg  CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
337*1debfc3dSmrg
338*1debfc3dSmrg  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(at_quick_exit)
339*1debfc3dSmrg  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(quick_exit)
340*1debfc3dSmrg  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
341*1debfc3dSmrg  GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
342*1debfc3dSmrg
343*1debfc3dSmrg  CXXFLAGS="$ac_save_CXXFLAGS"
344*1debfc3dSmrg])
345*1debfc3dSmrg
346*1debfc3dSmrgdnl
347*1debfc3dSmrgdnl Check to see what the underlying c library or math library is like.
348*1debfc3dSmrgdnl These checks need to do two things:
349*1debfc3dSmrgdnl 1) make sure the name is declared when using the c++ compiler
350*1debfc3dSmrgdnl 2) make sure the name has "C" linkage
351*1debfc3dSmrgdnl This might seem like overkill but experience has shown that it's not...
352*1debfc3dSmrgdnl
353*1debfc3dSmrgdnl Define HAVE_CARGF etc if "cargf" is found.
354*1debfc3dSmrgdnl
355*1debfc3dSmrgdnl GLIBCXX_CHECK_MATH_SUPPORT
356*1debfc3dSmrgAC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [
357*1debfc3dSmrg  ac_test_CXXFLAGS="${CXXFLAGS+set}"
358*1debfc3dSmrg  ac_save_CXXFLAGS="$CXXFLAGS"
359*1debfc3dSmrg  CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
360*1debfc3dSmrg
361*1debfc3dSmrg  dnl Check libm
362*1debfc3dSmrg  AC_CHECK_LIB(m, sin, libm="-lm")
363*1debfc3dSmrg  ac_save_LIBS="$LIBS"
364*1debfc3dSmrg  LIBS="$LIBS $libm"
365*1debfc3dSmrg
366*1debfc3dSmrg  dnl Check to see if certain C math functions exist.
367*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
368*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
369*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
370*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
371*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
372*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
373*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
374*1debfc3dSmrg
375*1debfc3dSmrg  dnl Check to see if basic C math functions have float versions.
376*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
377*1debfc3dSmrg                                          float_trig,
378*1debfc3dSmrg                                          acosf asinf atanf \
379*1debfc3dSmrg                                          cosf sinf tanf \
380*1debfc3dSmrg                                          coshf sinhf tanhf)
381*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
382*1debfc3dSmrg                                          float_round,
383*1debfc3dSmrg                                          ceilf floorf)
384*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
385*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
386*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
387*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
388*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
389*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
390*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
391*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
392*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
393*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
394*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
395*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
396*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf)
397*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
398*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
399*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
400*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
401*1debfc3dSmrg
402*1debfc3dSmrg  dnl Check to see if basic C math functions have long double versions.
403*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
404*1debfc3dSmrg                                          long_double_trig,
405*1debfc3dSmrg                                          acosl asinl atanl \
406*1debfc3dSmrg                                          cosl sinl tanl \
407*1debfc3dSmrg                                          coshl sinhl tanhl)
408*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
409*1debfc3dSmrg                                          long_double_round,
410*1debfc3dSmrg                                          ceill floorl)
411*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
412*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
413*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
414*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
415*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
416*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
417*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
418*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
419*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
420*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
421*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
422*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
423*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
424*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
425*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
426*1debfc3dSmrg  GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
427*1debfc3dSmrg
428*1debfc3dSmrg  LIBS="$ac_save_LIBS"
429*1debfc3dSmrg  CXXFLAGS="$ac_save_CXXFLAGS"
430*1debfc3dSmrg])
431