]>
Commit | Line | Data |
---|---|---|
891c05b1 JJ |
1 | m4_include(../config/acx.m4) |
2 | m4_include(../config/no-executables.m4) | |
3 | ||
15e92535 FXC |
4 | dnl Check that we have a working GNU Fortran compiler |
5 | AC_DEFUN([LIBGFOR_WORKING_GFORTRAN], [ | |
6 | AC_MSG_CHECKING([whether the GNU Fortran compiler is working]) | |
7 | AC_LANG_PUSH([Fortran]) | |
8 | AC_COMPILE_IFELSE([[ | |
9 | program foo | |
10 | real, parameter :: bar = sin (12.34 / 2.5) | |
11 | end program foo]], | |
12 | [AC_MSG_RESULT([yes])], | |
13 | [AC_MSG_RESULT([no]) | |
14 | AC_MSG_ERROR([GNU Fortran is not working; please report a bug in http://gcc.gnu.org/bugzilla, attaching $PWD/config.log]) | |
15 | ]) | |
16 | AC_LANG_POP([Fortran]) | |
17 | ]) | |
18 | ||
19 | ||
6de9cd9a DN |
20 | sinclude(../libtool.m4) |
21 | dnl The lines below arrange for aclocal not to bring an installed | |
22 | dnl libtool.m4 into aclocal.m4, while still arranging for automake to | |
23 | dnl add a definition of LIBTOOL to Makefile.in. | |
24 | ifelse(,,,[AC_SUBST(LIBTOOL) | |
25 | AC_DEFUN([AM_PROG_LIBTOOL]) | |
26 | AC_DEFUN([AC_LIBTOOL_DLOPEN]) | |
27 | AC_DEFUN([AC_PROG_LD]) | |
28 | ]) | |
29 | ||
7d7b8bfe RH |
30 | dnl Check whether the target supports hidden visibility. |
31 | AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY], [ | |
32 | AC_CACHE_CHECK([whether the target supports hidden visibility], | |
33 | have_attribute_visibility, [ | |
34 | save_CFLAGS="$CFLAGS" | |
35 | CFLAGS="$CFLAGS -Werror" | |
36 | AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }], | |
37 | [], have_attribute_visibility=yes, | |
38 | have_attribute_visibility=no) | |
39 | CFLAGS="$save_CFLAGS"]) | |
40 | if test $have_attribute_visibility = yes; then | |
41 | AC_DEFINE(HAVE_ATTRIBUTE_VISIBILITY, 1, | |
42 | [Define to 1 if the target supports __attribute__((visibility(...))).]) | |
43 | fi]) | |
44 | ||
45 | dnl Check whether the target supports dllexport | |
46 | AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_DLLEXPORT], [ | |
47 | AC_CACHE_CHECK([whether the target supports dllexport], | |
48 | have_attribute_dllexport, [ | |
49 | save_CFLAGS="$CFLAGS" | |
50 | CFLAGS="$CFLAGS -Werror" | |
51 | AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }], | |
52 | [], have_attribute_dllexport=yes, | |
53 | have_attribute_dllexport=no) | |
54 | CFLAGS="$save_CFLAGS"]) | |
55 | if test $have_attribute_dllexport = yes; then | |
56 | AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1, | |
57 | [Define to 1 if the target supports __attribute__((dllexport)).]) | |
58 | fi]) | |
59 | ||
60 | dnl Check whether the target supports symbol aliases. | |
61 | AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_ALIAS], [ | |
62 | AC_CACHE_CHECK([whether the target supports symbol aliases], | |
63 | have_attribute_alias, [ | |
64 | AC_TRY_LINK([ | |
7d7b8bfe | 65 | void foo(void) { } |
16a314a9 | 66 | extern void bar(void) __attribute__((alias("foo")));], |
7d7b8bfe RH |
67 | [bar();], have_attribute_alias=yes, have_attribute_alias=no)]) |
68 | if test $have_attribute_alias = yes; then | |
69 | AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1, | |
70 | [Define to 1 if the target supports __attribute__((alias(...))).]) | |
71 | fi]) | |
10c682a0 | 72 | |
5e805e44 JJ |
73 | dnl Check whether the target supports __sync_fetch_and_add. |
74 | AC_DEFUN([LIBGFOR_CHECK_SYNC_FETCH_AND_ADD], [ | |
75 | AC_CACHE_CHECK([whether the target supports __sync_fetch_and_add], | |
76 | have_sync_fetch_and_add, [ | |
77 | AC_TRY_LINK([int foovar = 0;], [ | |
78 | if (foovar <= 0) return __sync_fetch_and_add (&foovar, 1); | |
79 | if (foovar > 10) return __sync_add_and_fetch (&foovar, -1);], | |
80 | have_sync_fetch_and_add=yes, have_sync_fetch_and_add=no)]) | |
81 | if test $have_sync_fetch_and_add = yes; then | |
82 | AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD, 1, | |
83 | [Define to 1 if the target supports __sync_fetch_and_add]) | |
84 | fi]) | |
85 | ||
86 | dnl Check if threads are supported. | |
87 | AC_DEFUN([LIBGFOR_CHECK_GTHR_DEFAULT], [ | |
88 | AC_CACHE_CHECK([configured target thread model], | |
89 | target_thread_file, [ | |
90 | target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`]) | |
91 | ||
92 | if test $target_thread_file != single; then | |
93 | AC_DEFINE(HAVE_GTHR_DEFAULT, 1, | |
94 | [Define if the compiler has a thread header that is non single.]) | |
95 | fi]) | |
96 | ||
97 | dnl Check for pragma weak. | |
e669bd2b | 98 | AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [ |
5e805e44 JJ |
99 | AC_CACHE_CHECK([whether pragma weak works], |
100 | have_pragma_weak, [ | |
101 | gfor_save_CFLAGS="$CFLAGS" | |
102 | CFLAGS="$CFLAGS -Wunknown-pragmas" | |
103 | AC_TRY_COMPILE([void foo (void); | |
104 | #pragma weak foo], [if (foo) foo ();], | |
105 | have_pragma_weak=yes, have_pragma_weak=no)]) | |
106 | if test $have_pragma_weak = yes; then | |
e669bd2b | 107 | AC_DEFINE(SUPPORTS_WEAK, 1, |
5e805e44 | 108 | [Define to 1 if the target supports #pragma weak]) |
e669bd2b JJ |
109 | fi |
110 | case "$host" in | |
6e20eae9 | 111 | *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) |
e669bd2b JJ |
112 | AC_DEFINE(GTHREAD_USE_WEAK, 0, |
113 | [Define to 0 if the target shouldn't use #pragma weak]) | |
114 | ;; | |
115 | esac]) | |
5e805e44 | 116 | |
10c682a0 FXC |
117 | dnl Check whether target can unlink a file still open. |
118 | AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [ | |
119 | AC_CACHE_CHECK([whether the target can unlink an open file], | |
120 | have_unlink_open_file, [ | |
121 | AC_TRY_RUN([ | |
122 | #include <errno.h> | |
123 | #include <fcntl.h> | |
124 | #include <unistd.h> | |
125 | #include <sys/stat.h> | |
126 | ||
127 | int main () | |
128 | { | |
129 | int fd; | |
130 | ||
131 | fd = open ("testfile", O_RDWR | O_CREAT, S_IWRITE | S_IREAD); | |
132 | if (fd <= 0) | |
133 | return 0; | |
134 | if (unlink ("testfile") == -1) | |
135 | return 1; | |
136 | write (fd, "This is a test\n", 15); | |
137 | close (fd); | |
138 | ||
139 | if (open ("testfile", O_RDONLY, S_IWRITE | S_IREAD) == -1 && errno == ENOENT) | |
140 | return 0; | |
141 | else | |
142 | return 1; | |
143 | }], have_unlink_open_file=yes, have_unlink_open_file=no, [ | |
144 | case "${target}" in | |
145 | *mingw*) have_unlink_open_file=no ;; | |
146 | *) have_unlink_open_file=yes;; | |
147 | esac])]) | |
148 | if test x"$have_unlink_open_file" = xyes; then | |
149 | AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.]) | |
150 | fi]) | |
3c127520 FXC |
151 | |
152 | dnl Check whether CRLF is the line terminator | |
153 | AC_DEFUN([LIBGFOR_CHECK_CRLF], [ | |
154 | AC_CACHE_CHECK([whether the target has CRLF as line terminator], | |
155 | have_crlf, [ | |
156 | AC_TRY_RUN([ | |
157 | /* This test program should exit with status 0 if system uses a CRLF as | |
158 | line terminator, and status 1 otherwise. | |
159 | Since it is used to check for mingw systems, and should return 0 in any | |
160 | other case, in case of a failure we will not use CRLF. */ | |
161 | #include <sys/stat.h> | |
162 | #include <stdlib.h> | |
163 | #include <fcntl.h> | |
164 | #include <stdio.h> | |
165 | ||
166 | int main () | |
167 | { | |
168 | #ifndef O_BINARY | |
169 | exit(1); | |
170 | #else | |
171 | int fd, bytes; | |
172 | char buff[5]; | |
173 | ||
174 | fd = open ("foo", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU); | |
175 | if (fd < 0) | |
176 | exit(1); | |
177 | if (write (fd, "\n", 1) < 0) | |
178 | perror ("write"); | |
179 | ||
180 | close (fd); | |
181 | ||
182 | if ((fd = open ("foo", O_RDONLY | O_BINARY, S_IRWXU)) < 0) | |
183 | exit(1); | |
184 | bytes = read (fd, buff, 5); | |
185 | if (bytes == 2 && buff[0] == '\r' && buff[1] == '\n') | |
186 | exit(0); | |
187 | else | |
188 | exit(1); | |
189 | #endif | |
190 | }], have_crlf=yes, have_crlf=no, [ | |
191 | case "${target}" in | |
192 | *mingw*) have_crlf=yes ;; | |
193 | *) have_crlf=no;; | |
194 | esac])]) | |
195 | if test x"$have_crlf" = xyes; then | |
196 | AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.]) | |
197 | fi]) | |
118ea208 SE |
198 | |
199 | dnl Check whether isfinite is broken. | |
200 | dnl The most common problem is that it does not work on long doubles. | |
201 | AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISFINITE], [ | |
202 | AC_CACHE_CHECK([whether isfinite is broken], | |
203 | have_broken_isfinite, [ | |
204 | libgfor_check_for_broken_isfinite_save_LIBS=$LIBS | |
205 | LIBS="$LIBS -lm" | |
206 | AC_TRY_RUN([ | |
118ea208 | 207 | #include <math.h> |
118ea208 SE |
208 | #include <float.h> |
209 | int main () | |
210 | { | |
211 | #ifdef isfinite | |
212 | #ifdef LDBL_MAX | |
213 | if (!isfinite(LDBL_MAX)) return 1; | |
214 | #endif | |
215 | #ifdef DBL_MAX | |
216 | if (!isfinite(DBL_MAX)) return 1; | |
217 | #endif | |
218 | #endif | |
219 | return 0; | |
220 | }], have_broken_isfinite=no, have_broken_isfinite=yes, [ | |
221 | case "${target}" in | |
222 | hppa*-*-hpux*) have_broken_isfinite=yes ;; | |
223 | *) have_broken_isfinite=no ;; | |
224 | esac])] | |
225 | LIBS=$libgfor_check_for_broken_isfinite_save_LIBS) | |
226 | if test x"$have_broken_isfinite" = xyes; then | |
227 | AC_DEFINE(HAVE_BROKEN_ISFINITE, 1, [Define if isfinite is broken.]) | |
228 | fi]) | |
229 | ||
230 | dnl Check whether isnan is broken. | |
231 | dnl The most common problem is that it does not work on long doubles. | |
232 | AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISNAN], [ | |
233 | AC_CACHE_CHECK([whether isnan is broken], | |
234 | have_broken_isnan, [ | |
235 | libgfor_check_for_broken_isnan_save_LIBS=$LIBS | |
236 | LIBS="$LIBS -lm" | |
237 | AC_TRY_RUN([ | |
118ea208 | 238 | #include <math.h> |
118ea208 SE |
239 | #include <float.h> |
240 | int main () | |
241 | { | |
242 | #ifdef isnan | |
243 | #ifdef LDBL_MAX | |
244 | { | |
245 | long double x; | |
246 | x = __builtin_nanl (""); | |
247 | if (!isnan(x)) return 1; | |
248 | if (isnan(LDBL_MAX)) return 1; | |
249 | #ifdef NAN | |
250 | x = (long double) NAN; | |
251 | if (!isnan(x)) return 1; | |
252 | #endif | |
253 | } | |
254 | #endif | |
255 | #ifdef DBL_MAX | |
256 | { | |
257 | double y; | |
258 | y = __builtin_nan (""); | |
259 | if (!isnan(y)) return 1; | |
260 | if (isnan(DBL_MAX)) return 1; | |
261 | #ifdef NAN | |
262 | y = (double) NAN; | |
263 | if (!isnan(y)) return 1; | |
264 | #endif | |
265 | } | |
266 | #endif | |
267 | #endif | |
268 | return 0; | |
269 | }], have_broken_isnan=no, have_broken_isnan=yes, [ | |
270 | case "${target}" in | |
271 | hppa*-*-hpux*) have_broken_isnan=yes ;; | |
272 | *) have_broken_isnan=no ;; | |
273 | esac])] | |
274 | LIBS=$libgfor_check_for_broken_isnan_save_LIBS) | |
275 | if test x"$have_broken_isnan" = xyes; then | |
276 | AC_DEFINE(HAVE_BROKEN_ISNAN, 1, [Define if isnan is broken.]) | |
277 | fi]) | |
278 | ||
279 | dnl Check whether fpclassify is broken. | |
280 | dnl The most common problem is that it does not work on long doubles. | |
281 | AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY], [ | |
282 | AC_CACHE_CHECK([whether fpclassify is broken], | |
283 | have_broken_fpclassify, [ | |
284 | libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS | |
285 | LIBS="$LIBS -lm" | |
286 | AC_TRY_RUN([ | |
118ea208 | 287 | #include <math.h> |
118ea208 SE |
288 | #include <float.h> |
289 | int main () | |
290 | { | |
291 | #ifdef fpclassify | |
292 | #ifdef LDBL_MAX | |
293 | if (fpclassify(LDBL_MAX) == FP_NAN | |
294 | || fpclassify(LDBL_MAX) == FP_INFINITE) return 1; | |
295 | #endif | |
296 | #ifdef DBL_MAX | |
297 | if (fpclassify(DBL_MAX) == FP_NAN | |
298 | || fpclassify(DBL_MAX) == FP_INFINITE) return 1; | |
299 | #endif | |
300 | #endif | |
301 | return 0; | |
302 | }], have_broken_fpclassify=no, have_broken_fpclassify=yes, [ | |
303 | case "${target}" in | |
304 | hppa*-*-hpux*) have_broken_fpclassify=yes ;; | |
305 | *) have_broken_fpclassify=no ;; | |
306 | esac])] | |
307 | LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS) | |
308 | if test x"$have_broken_fpclassify" = xyes; then | |
309 | AC_DEFINE(HAVE_BROKEN_FPCLASSIFY, 1, [Define if fpclassify is broken.]) | |
310 | fi]) | |
ad238e4f FXC |
311 | |
312 | dnl Check whether the st_ino and st_dev stat fields taken together uniquely | |
313 | dnl identify the file within the system. This is should be true for POSIX | |
314 | dnl systems; it is known to be false on mingw32. | |
315 | AC_DEFUN([LIBGFOR_CHECK_WORKING_STAT], [ | |
316 | AC_CACHE_CHECK([whether the target stat is reliable], | |
317 | have_working_stat, [ | |
318 | AC_TRY_RUN([ | |
319 | #include <stdio.h> | |
320 | #include <sys/types.h> | |
321 | #include <sys/stat.h> | |
322 | #include <unistd.h> | |
323 | ||
324 | int main () | |
325 | { | |
326 | FILE *f, *g; | |
327 | struct stat st1, st2; | |
328 | ||
329 | f = fopen ("foo", "w"); | |
330 | g = fopen ("bar", "w"); | |
331 | if (stat ("foo", &st1) != 0 || stat ("bar", &st2)) | |
332 | return 1; | |
333 | if (st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino) | |
334 | return 1; | |
335 | fclose(f); | |
336 | fclose(g); | |
337 | return 0; | |
338 | }], have_working_stat=yes, have_working_stat=no, [ | |
339 | case "${target}" in | |
340 | *mingw*) have_working_stat=no ;; | |
341 | *) have_working_stat=yes;; | |
342 | esac])]) | |
343 | if test x"$have_working_stat" = xyes; then | |
344 | AC_DEFINE(HAVE_WORKING_STAT, 1, [Define if target has a reliable stat.]) | |
345 | fi]) | |
3b14f664 FXC |
346 | |
347 | dnl Checks for fpsetmask function. | |
348 | AC_DEFUN([LIBGFOR_CHECK_FPSETMASK], [ | |
349 | AC_CACHE_CHECK([whether fpsetmask is present], have_fpsetmask, [ | |
350 | AC_TRY_LINK([ | |
351 | #if HAVE_FLOATINGPOINT_H | |
352 | # include <floatingpoint.h> | |
353 | #endif /* HAVE_FLOATINGPOINT_H */ | |
354 | #if HAVE_IEEEFP_H | |
355 | # include <ieeefp.h> | |
356 | #endif /* HAVE_IEEEFP_H */],[fpsetmask(0);], | |
357 | eval "have_fpsetmask=yes", eval "have_fpsetmask=no") | |
358 | ]) | |
359 | if test x"$have_fpsetmask" = xyes; then | |
360 | AC_DEFINE(HAVE_FPSETMASK, 1, [Define if you have fpsetmask.]) | |
361 | fi | |
362 | ]) | |
db8092dc FXC |
363 | |
364 | dnl Check whether we have a mingw that provides a __mingw_snprintf function | |
365 | AC_DEFUN([LIBGFOR_CHECK_MINGW_SNPRINTF], [ | |
366 | AC_CACHE_CHECK([whether __mingw_snprintf is present], have_mingw_snprintf, [ | |
367 | AC_TRY_LINK([ | |
368 | #include <stdio.h> | |
369 | extern int __mingw_snprintf (char *, size_t, const char *, ...); | |
370 | ],[ | |
371 | __mingw_snprintf (NULL, 0, "%d\n", 1); | |
372 | ], | |
373 | eval "have_mingw_snprintf=yes", eval "have_mingw_snprintf=no") | |
374 | ]) | |
375 | if test x"$have_mingw_snprintf" = xyes; then | |
376 | AC_DEFINE(HAVE_MINGW_SNPRINTF, 1, [Define if you have __mingw_snprintf.]) | |
377 | fi | |
378 | ]) |