1 dnl sxe-maths.m4 -- Arithmetics and maths functions
3 dnl Copyright (C) 2005 - 2008 Sebastian Freundt
4 dnl Copyright (c) 2005 - 2008 Nelson Ferreira
6 dnl Redistribution and use in source and binary forms, with or without
7 dnl modification, are permitted provided that the following conditions
10 dnl 1. Redistributions of source code must retain the above copyright
11 dnl notice, this list of conditions and the following disclaimer.
13 dnl 2. Redistributions in binary form must reproduce the above copyright
14 dnl notice, this list of conditions and the following disclaimer in the
15 dnl documentation and/or other materials provided with the distribution.
17 dnl 3. Neither the name of the author nor the names of any contributors
18 dnl may be used to endorse or promote products derived from this
19 dnl software without specific prior written permission.
21 dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
22 dnl IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 dnl DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 dnl BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
30 dnl OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
31 dnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 dnl This file is part of SXEmacs.
35 AC_DEFUN([_SXE_MATH_ASSIGN_IFELSE], [
37 dnl _SXE_MATH_ASSIGN_IFELSE(<type>, <value>, <do-if>, <do-if-not>)
39 pushdef([value], [$2])
41 ## for math.h and limits.h
42 AC_REQUIRE([SXE_CHECK_MATHS_HEADERS])
43 AC_REQUIRE([SXE_CHECK_MATHS_TYPES])
45 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
46 #if defined HAVE_MATH_H
49 #if defined HAVE_VALUES_H
52 #if defined HAVE_LIMITS_H
55 ]], [[]type[ __attribute__((unused)) __test_assign = ]value[];
60 ])dnl _SXE_MATH_ASSIGN_IFELSE
62 AC_DEFUN([SXE_CHECK_MATHS_HEADERS], [dnl
63 ## just check for the bugger, no need to introduce new dependencies
64 SXE_CHECK_HEADERS([cfloat.h float.h inttypes.h limits.h math.h ieeefp.h])
65 SXE_CHECK_HEADERS([values.h])
66 SXE_CHECK_HEADERS([monetary.h])
67 ])dnl SXE_CHECK_MATHS_HEADERS
70 AC_DEFUN([SXE_CHECK_MATHS_TYPES], [dnl
71 AC_CHECK_TYPES([float])
72 AC_CHECK_TYPES([float_t])
73 AC_CHECK_TYPES([double])
74 AC_CHECK_TYPES([double_t])
75 ])dnl SXE_CHECK_MATHS_TYPES
77 AC_DEFUN([SXE_CHECK_MATHS_SYM], [dnl
79 dnl SXE_CHECK_MATHS_SYM(<typeof_symbol>, <symbol>, [<if>, <if-not>])
80 ## defines HAVE_MATHS_<symbol> and
81 ## TYPEOF_MATHS_<symbol> (always defined) and
82 ## sxe_cv_maths_<symbol> as well as
83 ## have_maths_<symbol> (AC_SUBSTituted), and finally
84 ## sxe_cv_maths_typeof_<symbol> (also AC_SUBSTituted)
85 pushdef([typesym], [$1])
87 pushdef([do_if], [$3])
88 pushdef([do_if_not], [$4])
90 AC_REQUIRE([SXE_CHECK_MATHS_HEADERS])
91 AC_REQUIRE([SXE_CHECK_MATHS_TYPES])
93 SXE_MSG_CHECKING([for ]sym[])
94 _SXE_MATH_ASSIGN_IFELSE([]typesym[], []sym[], [dnl yes case
95 sxe_cv_maths_[]sym[]="yes"
96 AC_DEFINE([HAVE_MATHS_]sym[], [1],
97 [Whether ]sym[ is defined in math.h])
98 AC_DEFINE([TYPEOF_MATHS_]sym[], []typesym[],
99 [The type that seems to suit ]sym[])
100 sxe_cv_maths_typeof_[]sym[]="[]typesym[]"
101 ## do as the user pleases
104 sxe_cv_maths_[]sym[]="no"
105 AC_DEFINE([TYPEOF_MATHS_]sym[], [void],
106 [The type that seems to suit ]sym[])
107 sxe_cv_maths_typeof_[]sym[]="void"
108 ## do as the user pleases
111 SXE_MSG_RESULT([$sxe_cv_maths_]sym[])
112 have_maths_[]sym[]="$sxe_cv_maths_[]sym[]"
114 AC_SUBST([have_maths_]sym[])
115 AC_SUBST([sxe_cv_maths_typeof_]sym[])
121 ])dnl SXE_CHECK_MATHS_SYM
124 AC_DEFUN([SXE_MATHS_SHRT_MAX], [
125 SXE_CHECK_MATHS_SYM([short int], [SHRT_MAX], [$1], [$2])
126 ])dnl SXE_MATHS_SHRT_MAX
128 AC_DEFUN([SXE_MATHS_SHRT_MIN], [
129 SXE_CHECK_MATHS_SYM([short int], [SHRT_MIN], [$1], [$2])
130 ])dnl SXE_MATHS_SHRT_MIN
132 AC_DEFUN([SXE_MATHS_MAXSHORT], [
133 SXE_CHECK_MATHS_SYM([short int], [MAXSHORT], [$1], [$2])
134 ])dnl SXE_MATHS_MAXSHORT
136 AC_DEFUN([SXE_MATHS_MINSHORT], [
137 SXE_CHECK_MATHS_SYM([short int], [MINSHORT], [$1], [$2])
138 ])dnl SXE_MATHS_MINSHORT
141 AC_DEFUN([SXE_MATHS_INT_MAX], [
142 SXE_CHECK_MATHS_SYM([int], [INT_MAX], [$1], [$2])
143 ])dnl SXE_MATHS_INT_MAX
145 AC_DEFUN([SXE_MATHS_INT_MIN], [
146 SXE_CHECK_MATHS_SYM([int], [INT_MIN], [$1], [$2])
147 ])dnl SXE_MATHS_INT_MIN
149 AC_DEFUN([SXE_MATHS_MAXINT], [
150 SXE_CHECK_MATHS_SYM([int], [MAXINT], [$1], [$2])
151 ])dnl SXE_MATHS_MAXINT
153 AC_DEFUN([SXE_MATHS_MININT], [
154 SXE_CHECK_MATHS_SYM([int], [MININT], [$1], [$2])
155 ])dnl SXE_MATHS_MININT
158 AC_DEFUN([SXE_MATHS_LONG_MAX], [
159 SXE_CHECK_MATHS_SYM([long int], [LONG_MAX], [$1], [$2])
160 ])dnl SXE_MATHS_LONG_MAX
162 AC_DEFUN([SXE_MATHS_LONG_MIN], [
163 SXE_CHECK_MATHS_SYM([long int], [LONG_MIN], [$1], [$2])
164 ])dnl SXE_MATHS_LONG_MIN
166 AC_DEFUN([SXE_MATHS_MAXLONG], [
167 SXE_CHECK_MATHS_SYM([long int], [MAXLONG], [$1], [$2])
168 ])dnl SXE_MATHS_MAXLONG
170 AC_DEFUN([SXE_MATHS_MINLONG], [
171 SXE_CHECK_MATHS_SYM([long int], [MINLONG], [$1], [$2])
172 ])dnl SXE_MATHS_MINLONG
175 AC_DEFUN([SXE_MATHS_FLT_MAX], [
176 SXE_CHECK_MATHS_SYM([float], [FLT_MAX], [$1], [$2])
177 ])dnl SXE_MATHS_FLT_MAX
179 AC_DEFUN([SXE_MATHS_FLT_MIN], [
180 SXE_CHECK_MATHS_SYM([float], [FLT_MIN], [$1], [$2])
181 ])dnl SXE_MATHS_FLT_MIN
183 AC_DEFUN([SXE_MATHS_MAXFLOAT], [
184 SXE_CHECK_MATHS_SYM([float], [MAXFLOAT], [$1], [$2])
185 ])dnl SXE_MATHS_MAXFLOAT
187 AC_DEFUN([SXE_MATHS_MINFLOAT], [
188 SXE_CHECK_MATHS_SYM([float], [MINFLOAT], [$1], [$2])
189 ])dnl SXE_MATHS_MINFLOAT
191 AC_DEFUN([SXE_MATHS_FLT_MAX_EXP], [
192 SXE_CHECK_MATHS_SYM([float], [FLT_MAX_EXP], [$1], [$2])
193 ])dnl SXE_MATHS_FLT_MAX_EXP
195 AC_DEFUN([SXE_MATHS_FLT_MIN_EXP], [
196 SXE_CHECK_MATHS_SYM([float], [FLT_MIN_EXP], [$1], [$2])
197 ])dnl SXE_MATHS_FLT_MIN_EXP
199 AC_DEFUN([SXE_MATHS_FMAXEXP], [
200 SXE_CHECK_MATHS_SYM([float], [FMAXEXP], [$1], [$2])
201 ])dnl SXE_MATHS_FMAXEXP
203 AC_DEFUN([SXE_MATHS_FMINEXP], [
204 SXE_CHECK_MATHS_SYM([float], [FMINEXP], [$1], [$2])
205 ])dnl SXE_MATHS_FMINEXP
208 AC_DEFUN([SXE_MATHS_DBL_MAX], [
209 SXE_CHECK_MATHS_SYM([double], [DBL_MAX], [$1], [$2])
210 ])dnl SXE_MATHS_DBL_MAX
212 AC_DEFUN([SXE_MATHS_DBL_MIN], [
213 SXE_CHECK_MATHS_SYM([double], [DBL_MIN], [$1], [$2])
214 ])dnl SXE_MATHS_DBL_MIN
216 AC_DEFUN([SXE_MATHS_MAXDOUBLE], [
217 SXE_CHECK_MATHS_SYM([double], [MAXDOUBLE], [$1], [$2])
218 ])dnl SXE_MATHS_MAXDOUBLE
220 AC_DEFUN([SXE_MATHS_MINDOUBLE], [
221 SXE_CHECK_MATHS_SYM([double], [MINDOUBLE], [$1], [$2])
222 ])dnl SXE_MATHS_MINDOUBLE
224 AC_DEFUN([SXE_MATHS_DBL_MAX_EXP], [
225 SXE_CHECK_MATHS_SYM([double], [DBL_MAX_EXP], [$1], [$2])
226 ])dnl SXE_MATHS_DBL_MAX_EXP
228 AC_DEFUN([SXE_MATHS_DBL_MIN_EXP], [
229 SXE_CHECK_MATHS_SYM([double], [DBL_MIN_EXP], [$1], [$2])
230 ])dnl SXE_MATHS_DBL_MIN_EXP
232 AC_DEFUN([SXE_MATHS_DMAXEXP], [
233 SXE_CHECK_MATHS_SYM([double], [DMAXEXP], [$1], [$2])
234 ])dnl SXE_MATHS_DMAXEXP
236 AC_DEFUN([SXE_MATHS_DMINEXP], [
237 SXE_CHECK_MATHS_SYM([double], [DMINEXP], [$1], [$2])
238 ])dnl SXE_MATHS_DMINEXP
241 AC_DEFUN([SXE_MATHS_LDBL_MAX], [
242 SXE_CHECK_MATHS_SYM([long double], [LDBL_MAX], [$1], [$2])
243 ])dnl SXE_MATHS_LDBL_MAX
245 AC_DEFUN([SXE_MATHS_LDBL_MIN], [
246 SXE_CHECK_MATHS_SYM([long double], [LDBL_MIN], [$1], [$2])
247 ])dnl SXE_MATHS_LDBL_MIN