]> www.ginac.de Git - cln.git/blob - m4/general.m4
Finalize CLN 1.3.5 release.
[cln.git] / m4 / general.m4
1 dnl Copyright (C) 1993-2019 Free Software Foundation, Inc.
2 dnl This file is free software, distributed under the terms of the GNU
3 dnl General Public License.  As a special exception to the GNU General
4 dnl Public License, this file may be distributed as part of a program
5 dnl that contains a configuration script generated by Autoconf, under
6 dnl the same distribution terms as the rest of that program.
7
8 dnl From Bruno Haible, Marcus Daniels, Sam Steingold.
9
10 AC_PREREQ(2.13)
11
12 dnl without AC_MSG_...:   with AC_MSG_... and caching:
13 dnl   AC_TRY_CPP          CL_CPP_CHECK
14 dnl   AC_TRY_COMPILE      CL_COMPILE_CHECK
15 dnl   AC_TRY_LINK         CL_LINK_CHECK
16 dnl   AC_TRY_RUN          CL_RUN_CHECK - would require cross-compiling support
17 dnl Usage:
18 dnl AC_TRY_CPP(INCLUDES,
19 dnl            ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
20 dnl CL_CPP_CHECK(ECHO-TEXT, CACHE-ID,
21 dnl              INCLUDES,
22 dnl              ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
23 dnl AC_TRY_xxx(INCLUDES, FUNCTION-BODY,
24 dnl            ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
25 dnl CL_xxx_CHECK(ECHO-TEXT, CACHE-ID,
26 dnl              INCLUDES, FUNCTION-BODY,
27 dnl              ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
28
29 AC_DEFUN([CL_CPP_CHECK],
30 [AC_MSG_CHECKING(for $1)
31 AC_CACHE_VAL($2,[
32 AC_TRY_CPP([$3], $2=yes, $2=no)
33 ])
34 AC_MSG_RESULT([$]$2)
35 if test [$]$2 = yes; then
36   ifelse([$4], , :, [$4])
37 ifelse([$5], , , [else
38   $5
39 ])dnl
40 fi
41 ])
42
43 AC_DEFUN([CL_COMPILE_CHECK],
44 [AC_MSG_CHECKING(for $1)
45 AC_CACHE_VAL($2,[
46 AC_TRY_COMPILE([$3],[$4], $2=yes, $2=no)
47 ])
48 AC_MSG_RESULT([$]$2)
49 if test [$]$2 = yes; then
50   ifelse([$5], , :, [$5])
51 ifelse([$6], , , [else
52   $6
53 ])dnl
54 fi
55 ])
56
57 AC_DEFUN([CL_LINK_CHECK],
58 [AC_MSG_CHECKING(for $1)
59 AC_CACHE_VAL($2,[
60 AC_TRY_LINK([$3],[$4], $2=yes, $2=no)
61 ])
62 AC_MSG_RESULT([$]$2)
63 if test [$]$2 = yes; then
64   ifelse([$5], , :, [$5])
65 ifelse([$6], , , [else
66   $6
67 ])dnl
68 fi
69 ])
70
71 dnl CL_SILENT(ACTION)
72 dnl performs ACTION, with AC_MSG_CHECKING and AC_MSG_RESULT being defined away.
73 AC_DEFUN([CL_SILENT],
74 [pushdef([AC_MSG_CHECKING],[:])dnl
75 pushdef([AC_CHECKING],[:])dnl
76 pushdef([AC_MSG_RESULT],[:])dnl
77 $1[]dnl
78 popdef([AC_MSG_RESULT])dnl
79 popdef([AC_CHECKING])dnl
80 popdef([AC_MSG_CHECKING])dnl
81 ])
82
83 dnl Expands to the "extern ..." prefix used for system declarations.
84 dnl AC_LANG_EXTERN()
85 AC_DEFUN([AC_LANG_EXTERN],
86 [extern
87 #ifdef __cplusplus
88 "C"
89 #endif
90 ])
91
92 AC_DEFUN([CL_CC_WORKS],
93 [AC_CACHE_CHECK(whether CC works at all, cl_cv_prog_cc_works, [
94 AC_LANG_SAVE()
95 AC_LANG_C()
96 AC_TRY_RUN([
97 #include <stdlib.h>
98 int main() { exit(0); }
99 ],
100 cl_cv_prog_cc_works=yes, cl_cv_prog_cc_works=no,
101 AC_TRY_LINK([], [], cl_cv_prog_cc_works=yes, cl_cv_prog_cc_works=no))
102 AC_LANG_RESTORE()
103 ])
104 case "$cl_cv_prog_cc_works" in
105   *no) echo "Installation or configuration problem: C compiler cannot create executables."; exit 1;;
106   *yes) ;;
107 esac
108 ])
109
110 AC_DEFUN([CL_CONFIG_SUBDIRS],
111 [dnl No AC_CONFIG_AUX_DIR_DEFAULT, so we don't need install.sh.
112 AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])
113 AC_CONFIG_SUBDIRS([$1])dnl
114 ])
115
116 AC_DEFUN([CL_CANONICAL_HOST],
117 [AC_REQUIRE([AC_PROG_CC]) dnl Actually: AC_REQUIRE([CL_CC_WORKS])
118 AC_CANONICAL_HOST
119 ])
120
121 AC_DEFUN([CL_CANONICAL_HOST_CPU],
122 [AC_REQUIRE([CL_CANONICAL_HOST])AC_REQUIRE([AC_PROG_CC])
123 case "$host_cpu" in
124 changequote(,)dnl
125   i[4567]86 )
126     host_cpu=i386
127     ;;
128   alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
129     host_cpu=alpha
130     ;;
131   hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
132     host_cpu=hppa
133     ;;
134   powerpc )
135     host_cpu=rs6000
136     ;;
137   c1 | c2 | c32 | c34 | c38 | c4 )
138     host_cpu=convex
139     ;;
140   arm* )
141     host_cpu=arm
142     ;;
143 changequote([,])dnl
144   mips* )
145     AC_CACHE_CHECK([for 64-bit MIPS], cl_cv_host_mips64, [
146 AC_EGREP_CPP(yes,
147 [#if defined(_MIPS_SZLONG)
148 #if (_MIPS_SZLONG == 64)
149 /* We should also check for (_MIPS_SZPTR == 64), but gcc keeps this at 32. */
150   yes
151 #endif
152 #endif
153 ], cl_cv_host_mips64=yes, cl_cv_host_mips64=no)
154 ])
155 if test $cl_cv_host_mips64 = yes; then
156   host_cpu=mips64
157 fi
158     ;;
159 dnl UltraSPARCs running Linux have `uname -m` = "sparc64", but the C compiler
160 dnl still generates 32-bit code.
161   sparc | sparc64 )
162     AC_CACHE_CHECK([for 64-bit SPARC], cl_cv_host_sparc64, [
163 AC_EGREP_CPP(yes,
164 [#if defined(__sparcv9) || defined(__arch64__)
165   yes
166 #endif
167 ], cl_cv_host_sparc64=yes, cl_cv_host_sparc64=no)
168 ])
169 if test $cl_cv_host_sparc64 = yes; then
170   host_cpu=sparc64
171 else
172   host_cpu=sparc
173 fi
174     ;;
175 dnl MacOS X 10.5 machines on x86_64 platforms have 'uname -m' = "i386" even
176 dnl if 64-bit programs are fully supported.
177 dnl AMD64 running Linux have 'uname -m' = "x86_64" even if userland is purely
178 dnl 32-bit.
179   i386 | x86_64 )
180     AC_CACHE_CHECK([for 64-bit userland on x86-64], cl_cv_host_x86_64, [
181 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
182 [[#if !defined __x86_64__
183 # error __x86_64__ not defined
184 #endif
185 ]])
186 ], [cl_cv_host_x86_64=yes], [cl_cv_host_x86_64=no])
187 ])
188 if test $cl_cv_host_x86_64 = yes; then
189   host_cpu=x86_64
190 else
191   host_cpu=i386
192 fi
193   ;;
194 dnl PowerPC64 is another case where 'uname -m' and userland may disagree.
195   powerpc64 )
196     AC_CACHE_CHECK([for 64-bit userland on PowerPC64], cl_cv_host_powerpc64, [
197 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
198 [[#if !defined __powerpc64__
199 # error __powerpc64__ not defined
200 #endif
201 ]])
202 ], [cl_cv_host_powerpc64=yes], [cl_cv_host_powerpc64=no])
203 ])
204 if test $cl_cv_host_powerpc64 = yes; then
205   host_cpu=powerpc64
206 else
207   host_cpu=rs6000
208 fi
209   ;;
210 esac
211 dnl was AC_DEFINE_UNQUOTED(__${host_cpu}__) but KAI C++ 3.2d doesn't like this
212 cat >> confdefs.h <<EOF
213 #ifndef __${host_cpu}__
214 #define __${host_cpu}__ 1
215 #endif
216 EOF
217 ])
218
219 AC_DEFUN([CL_CANONICAL_HOST_CPU_FOR_FFCALL],
220 [AC_REQUIRE([CL_CANONICAL_HOST])AC_REQUIRE([AC_PROG_CC])
221 case "$host_cpu" in
222 changequote(,)dnl
223   i[4567]86 )
224     host_cpu=i386
225     ;;
226   alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
227     host_cpu=alpha
228     ;;
229   hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
230     host_cpu=hppa
231     ;;
232   powerpc )
233     host_cpu=rs6000
234     ;;
235   c1 | c2 | c32 | c34 | c38 | c4 )
236     host_cpu=convex
237     ;;
238   arm* )
239     host_cpu=arm
240     ;;
241 changequote([,])dnl
242   mips )
243     AC_CACHE_CHECK([for 64-bit MIPS], cl_cv_host_mips64, [
244 AC_EGREP_CPP(yes,
245 [#if defined(_MIPS_SZLONG)
246 #if (_MIPS_SZLONG == 64)
247 /* We should also check for (_MIPS_SZPTR == 64), but gcc keeps this at 32. */
248   yes
249 #endif
250 #endif
251 ], cl_cv_host_mips64=yes, cl_cv_host_mips64=no)
252 ])
253 if test $cl_cv_host_mips64 = yes; then
254   host_cpu=mips64
255 else
256   AC_CACHE_CHECK([for MIPS with n32 ABI], cl_cv_host_mipsn32, [
257 dnl Strictly speaking, the MIPS ABI (-32 or -n32) is independent from the CPU
258 dnl identification (-mips[12] or -mips[34]). But -n32 is commonly used together
259 dnl with -mips3, and it's easier to test the CPU identification.
260 AC_EGREP_CPP(yes,
261 [#if __mips >= 3
262   yes
263 #endif
264 ], cl_cv_host_mipsn32=yes, cl_cv_host_mipsn32=no)
265 ])
266 if test $cl_cv_host_mipsn32 = yes; then
267   host_cpu=mipsn32
268 fi
269 fi
270     ;;
271 dnl UltraSPARCs running Linux have `uname -m` = "sparc64", but the C compiler
272 dnl still generates 32-bit code.
273   sparc | sparc64 )
274     AC_CACHE_CHECK([for 64-bit SPARC], cl_cv_host_sparc64, [
275 AC_EGREP_CPP(yes,
276 [#if defined(__sparcv9) || defined(__arch64__)
277   yes
278 #endif
279 ], cl_cv_host_sparc64=yes, cl_cv_host_sparc64=no)
280 ])
281 if test $cl_cv_host_sparc64 = yes; then
282   host_cpu=sparc64
283 else
284   host_cpu=sparc
285 fi
286     ;;
287 esac
288 dnl was AC_DEFINE_UNQUOTED(__${host_cpu}__) but KAI C++ 3.2d doesn't like this
289 cat >> confdefs.h <<EOF
290 #ifndef __${host_cpu}__
291 #define __${host_cpu}__ 1
292 #endif
293 EOF
294 ])