XDG init -- Git rid of hack in site-start.el
[sxemacs] / m4 / sxe-maths.m4
1 dnl sxe-maths.m4 -- Arithmetics and maths functions
2 dnl
3 dnl Copyright (C) 2005 - 2008 Sebastian Freundt
4 dnl Copyright (c) 2005 - 2008 Nelson Ferreira
5 dnl
6 dnl Redistribution and use in source and binary forms, with or without
7 dnl modification, are permitted provided that the following conditions
8 dnl are met:
9 dnl
10 dnl 1. Redistributions of source code must retain the above copyright
11 dnl    notice, this list of conditions and the following disclaimer.
12 dnl
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.
16 dnl
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.
20 dnl
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.
32 dnl
33 dnl This file is part of SXEmacs.
34
35 AC_DEFUN([_SXE_MATH_ASSIGN_IFELSE], [
36         dnl call it like so:
37         dnl _SXE_MATH_ASSIGN_IFELSE(<type>, <value>, <do-if>, <do-if-not>)
38         pushdef([type], [$1])
39         pushdef([value], [$2])
40
41         ## for math.h and limits.h
42         AC_REQUIRE([SXE_CHECK_MATHS_HEADERS])
43         AC_REQUIRE([SXE_CHECK_MATHS_TYPES])
44
45         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
46 #if defined HAVE_MATH_H
47 # include <math.h>
48 #endif
49 #if defined HAVE_VALUES_H
50 # include <values.h>
51 #endif
52 #if defined HAVE_LIMITS_H
53 # include <limits.h>
54 #endif
55                 ]], [[]type[ __attribute__((unused)) __test_assign = ]value[];
56                 ])], [$3], [$4])
57
58         popdef([value])
59         popdef([type])
60 ])dnl _SXE_MATH_ASSIGN_IFELSE
61
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
68
69
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
76
77 AC_DEFUN([SXE_CHECK_MATHS_SYM], [dnl
78         dnl call it like
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])
86         pushdef([sym], [$2])
87         pushdef([do_if], [$3])
88         pushdef([do_if_not], [$4])
89
90         AC_REQUIRE([SXE_CHECK_MATHS_HEADERS])
91         AC_REQUIRE([SXE_CHECK_MATHS_TYPES])
92
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
102                 do_if
103                 ], [dnl no case
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
109                 do_if_not
110                 ])
111         SXE_MSG_RESULT([$sxe_cv_maths_]sym[])
112         have_maths_[]sym[]="$sxe_cv_maths_[]sym[]"
113
114         AC_SUBST([have_maths_]sym[])
115         AC_SUBST([sxe_cv_maths_typeof_]sym[])
116
117         popdef([do_if])
118         popdef([do_if_not])
119         popdef([sym])
120         popdef([typesym])
121 ])dnl SXE_CHECK_MATHS_SYM
122
123
124 AC_DEFUN([SXE_MATHS_SHRT_MAX], [
125         SXE_CHECK_MATHS_SYM([short int], [SHRT_MAX], [$1], [$2])
126 ])dnl SXE_MATHS_SHRT_MAX
127
128 AC_DEFUN([SXE_MATHS_SHRT_MIN], [
129         SXE_CHECK_MATHS_SYM([short int], [SHRT_MIN], [$1], [$2])
130 ])dnl SXE_MATHS_SHRT_MIN
131
132 AC_DEFUN([SXE_MATHS_MAXSHORT], [
133         SXE_CHECK_MATHS_SYM([short int], [MAXSHORT], [$1], [$2])
134 ])dnl SXE_MATHS_MAXSHORT
135
136 AC_DEFUN([SXE_MATHS_MINSHORT], [
137         SXE_CHECK_MATHS_SYM([short int], [MINSHORT], [$1], [$2])
138 ])dnl SXE_MATHS_MINSHORT
139
140
141 AC_DEFUN([SXE_MATHS_INT_MAX], [
142         SXE_CHECK_MATHS_SYM([int], [INT_MAX], [$1], [$2])
143 ])dnl SXE_MATHS_INT_MAX
144
145 AC_DEFUN([SXE_MATHS_INT_MIN], [
146         SXE_CHECK_MATHS_SYM([int], [INT_MIN], [$1], [$2])
147 ])dnl SXE_MATHS_INT_MIN
148
149 AC_DEFUN([SXE_MATHS_MAXINT], [
150         SXE_CHECK_MATHS_SYM([int], [MAXINT], [$1], [$2])
151 ])dnl SXE_MATHS_MAXINT
152
153 AC_DEFUN([SXE_MATHS_MININT], [
154         SXE_CHECK_MATHS_SYM([int], [MININT], [$1], [$2])
155 ])dnl SXE_MATHS_MININT
156
157
158 AC_DEFUN([SXE_MATHS_LONG_MAX], [
159         SXE_CHECK_MATHS_SYM([long int], [LONG_MAX], [$1], [$2])
160 ])dnl SXE_MATHS_LONG_MAX
161
162 AC_DEFUN([SXE_MATHS_LONG_MIN], [
163         SXE_CHECK_MATHS_SYM([long int], [LONG_MIN], [$1], [$2])
164 ])dnl SXE_MATHS_LONG_MIN
165
166 AC_DEFUN([SXE_MATHS_MAXLONG], [
167         SXE_CHECK_MATHS_SYM([long int], [MAXLONG], [$1], [$2])
168 ])dnl SXE_MATHS_MAXLONG
169
170 AC_DEFUN([SXE_MATHS_MINLONG], [
171         SXE_CHECK_MATHS_SYM([long int], [MINLONG], [$1], [$2])
172 ])dnl SXE_MATHS_MINLONG
173
174
175 AC_DEFUN([SXE_MATHS_FLT_MAX], [
176         SXE_CHECK_MATHS_SYM([float], [FLT_MAX], [$1], [$2])
177 ])dnl SXE_MATHS_FLT_MAX
178
179 AC_DEFUN([SXE_MATHS_FLT_MIN], [
180         SXE_CHECK_MATHS_SYM([float], [FLT_MIN], [$1], [$2])
181 ])dnl SXE_MATHS_FLT_MIN
182
183 AC_DEFUN([SXE_MATHS_MAXFLOAT], [
184         SXE_CHECK_MATHS_SYM([float], [MAXFLOAT], [$1], [$2])
185 ])dnl SXE_MATHS_MAXFLOAT
186
187 AC_DEFUN([SXE_MATHS_MINFLOAT], [
188         SXE_CHECK_MATHS_SYM([float], [MINFLOAT], [$1], [$2])
189 ])dnl SXE_MATHS_MINFLOAT
190
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
194
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
198
199 AC_DEFUN([SXE_MATHS_FMAXEXP], [
200         SXE_CHECK_MATHS_SYM([float], [FMAXEXP], [$1], [$2])
201 ])dnl SXE_MATHS_FMAXEXP
202
203 AC_DEFUN([SXE_MATHS_FMINEXP], [
204         SXE_CHECK_MATHS_SYM([float], [FMINEXP], [$1], [$2])
205 ])dnl SXE_MATHS_FMINEXP
206
207
208 AC_DEFUN([SXE_MATHS_DBL_MAX], [
209         SXE_CHECK_MATHS_SYM([double], [DBL_MAX], [$1], [$2])
210 ])dnl SXE_MATHS_DBL_MAX
211
212 AC_DEFUN([SXE_MATHS_DBL_MIN], [
213         SXE_CHECK_MATHS_SYM([double], [DBL_MIN], [$1], [$2])
214 ])dnl SXE_MATHS_DBL_MIN
215
216 AC_DEFUN([SXE_MATHS_MAXDOUBLE], [
217         SXE_CHECK_MATHS_SYM([double], [MAXDOUBLE], [$1], [$2])
218 ])dnl SXE_MATHS_MAXDOUBLE
219
220 AC_DEFUN([SXE_MATHS_MINDOUBLE], [
221         SXE_CHECK_MATHS_SYM([double], [MINDOUBLE], [$1], [$2])
222 ])dnl SXE_MATHS_MINDOUBLE
223
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
227
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
231
232 AC_DEFUN([SXE_MATHS_DMAXEXP], [
233         SXE_CHECK_MATHS_SYM([double], [DMAXEXP], [$1], [$2])
234 ])dnl SXE_MATHS_DMAXEXP
235
236 AC_DEFUN([SXE_MATHS_DMINEXP], [
237         SXE_CHECK_MATHS_SYM([double], [DMINEXP], [$1], [$2])
238 ])dnl SXE_MATHS_DMINEXP
239
240
241 AC_DEFUN([SXE_MATHS_LDBL_MAX], [
242         SXE_CHECK_MATHS_SYM([long double], [LDBL_MAX], [$1], [$2])
243 ])dnl SXE_MATHS_LDBL_MAX
244
245 AC_DEFUN([SXE_MATHS_LDBL_MIN], [
246         SXE_CHECK_MATHS_SYM([long double], [LDBL_MIN], [$1], [$2])
247 ])dnl SXE_MATHS_LDBL_MIN
248