]>
Commit | Line | Data |
---|---|---|
4c82c0dd | 1 | m4_include(../config/acx.m4) |
2 | m4_include(../config/no-executables.m4) | |
3 | ||
2e4ef4e4 | 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 | ||
4ee9c684 | 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 | ||
7b6cb5bd | 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], | |
6992582a | 33 | libgfor_cv_have_attribute_visibility, [ |
7b6cb5bd | 34 | save_CFLAGS="$CFLAGS" |
35 | CFLAGS="$CFLAGS -Werror" | |
36 | AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }], | |
6992582a | 37 | [], libgfor_cv_have_attribute_visibility=yes, |
38 | libgfor_cv_have_attribute_visibility=no) | |
7b6cb5bd | 39 | CFLAGS="$save_CFLAGS"]) |
6992582a | 40 | if test $libgfor_cv_have_attribute_visibility = yes; then |
7b6cb5bd | 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], | |
6992582a | 48 | libgfor_cv_have_attribute_dllexport, [ |
7b6cb5bd | 49 | save_CFLAGS="$CFLAGS" |
50 | CFLAGS="$CFLAGS -Werror" | |
51 | AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }], | |
6992582a | 52 | [], libgfor_cv_have_attribute_dllexport=yes, |
53 | libgfor_cv_have_attribute_dllexport=no) | |
7b6cb5bd | 54 | CFLAGS="$save_CFLAGS"]) |
6992582a | 55 | if test $libgfor_cv_have_attribute_dllexport = yes; then |
7b6cb5bd | 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], | |
6992582a | 63 | libgfor_cv_have_attribute_alias, [ |
7b6cb5bd | 64 | AC_TRY_LINK([ |
7b6cb5bd | 65 | void foo(void) { } |
5a2b0c34 | 66 | extern void bar(void) __attribute__((alias("foo")));], |
6992582a | 67 | [bar();], libgfor_cv_have_attribute_alias=yes, libgfor_cv_have_attribute_alias=no)]) |
68 | if test $libgfor_cv_have_attribute_alias = yes; then | |
7b6cb5bd | 69 | AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1, |
70 | [Define to 1 if the target supports __attribute__((alias(...))).]) | |
71 | fi]) | |
1dc95e51 | 72 | |
60c514ba | 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], | |
6992582a | 76 | libgfor_cv_have_sync_fetch_and_add, [ |
60c514ba | 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);], | |
6992582a | 80 | libgfor_cv_have_sync_fetch_and_add=yes, libgfor_cv_have_sync_fetch_and_add=no)]) |
81 | if test $libgfor_cv_have_sync_fetch_and_add = yes; then | |
60c514ba | 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. | |
0a207fde | 98 | AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [ |
60c514ba | 99 | AC_CACHE_CHECK([whether pragma weak works], |
6992582a | 100 | libgfor_cv_have_pragma_weak, [ |
60c514ba | 101 | gfor_save_CFLAGS="$CFLAGS" |
102 | CFLAGS="$CFLAGS -Wunknown-pragmas" | |
103 | AC_TRY_COMPILE([void foo (void); | |
104 | #pragma weak foo], [if (foo) foo ();], | |
6992582a | 105 | libgfor_cv_have_pragma_weak=yes, libgfor_cv_have_pragma_weak=no)]) |
106 | if test $libgfor_cv_have_pragma_weak = yes; then | |
0a207fde | 107 | AC_DEFINE(SUPPORTS_WEAK, 1, |
60c514ba | 108 | [Define to 1 if the target supports #pragma weak]) |
0a207fde | 109 | fi |
110 | case "$host" in | |
7044ab00 | 111 | *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) |
0a207fde | 112 | AC_DEFINE(GTHREAD_USE_WEAK, 0, |
113 | [Define to 0 if the target shouldn't use #pragma weak]) | |
114 | ;; | |
115 | esac]) | |
60c514ba | 116 | |
1dc95e51 | 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], | |
6992582a | 120 | libgfor_cv_have_unlink_open_file, [ |
1dc95e51 | 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; | |
6992582a | 143 | }], libgfor_cv_have_unlink_open_file=yes, libgfor_cv_have_unlink_open_file=no, [ |
1dc95e51 | 144 | case "${target}" in |
6992582a | 145 | *mingw*) libgfor_cv_have_unlink_open_file=no ;; |
146 | *) libgfor_cv_have_unlink_open_file=yes;; | |
1dc95e51 | 147 | esac])]) |
6992582a | 148 | if test x"$libgfor_cv_have_unlink_open_file" = xyes; then |
1dc95e51 | 149 | AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.]) |
150 | fi]) | |
cf55c3cf | 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], | |
6992582a | 155 | libgfor_cv_have_crlf, [ |
cf55c3cf | 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 | |
6992582a | 190 | }], libgfor_cv_have_crlf=yes, libgfor_cv_have_crlf=no, [ |
cf55c3cf | 191 | case "${target}" in |
6992582a | 192 | *mingw*) libgfor_cv_have_crlf=yes ;; |
193 | *) libgfor_cv_have_crlf=no;; | |
cf55c3cf | 194 | esac])]) |
6992582a | 195 | if test x"$libgfor_cv_have_crlf" = xyes; then |
cf55c3cf | 196 | AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.]) |
197 | fi]) | |
839904a0 | 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], | |
6992582a | 203 | libgfor_cv_have_broken_isfinite, [ |
839904a0 | 204 | libgfor_check_for_broken_isfinite_save_LIBS=$LIBS |
205 | LIBS="$LIBS -lm" | |
206 | AC_TRY_RUN([ | |
839904a0 | 207 | #include <math.h> |
839904a0 | 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; | |
6992582a | 220 | }], libgfor_cv_have_broken_isfinite=no, libgfor_cv_have_broken_isfinite=yes, [ |
839904a0 | 221 | case "${target}" in |
6992582a | 222 | hppa*-*-hpux*) libgfor_cv_have_broken_isfinite=yes ;; |
223 | *) libgfor_cv_have_broken_isfinite=no ;; | |
839904a0 | 224 | esac])] |
225 | LIBS=$libgfor_check_for_broken_isfinite_save_LIBS) | |
6992582a | 226 | if test x"$libgfor_cv_have_broken_isfinite" = xyes; then |
839904a0 | 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], | |
6992582a | 234 | libgfor_cv_have_broken_isnan, [ |
839904a0 | 235 | libgfor_check_for_broken_isnan_save_LIBS=$LIBS |
236 | LIBS="$LIBS -lm" | |
237 | AC_TRY_RUN([ | |
839904a0 | 238 | #include <math.h> |
839904a0 | 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; | |
6992582a | 269 | }], libgfor_cv_have_broken_isnan=no, libgfor_cv_have_broken_isnan=yes, [ |
839904a0 | 270 | case "${target}" in |
6992582a | 271 | hppa*-*-hpux*) libgfor_cv_have_broken_isnan=yes ;; |
272 | *) libgfor_cv_have_broken_isnan=no ;; | |
839904a0 | 273 | esac])] |
274 | LIBS=$libgfor_check_for_broken_isnan_save_LIBS) | |
6992582a | 275 | if test x"$libgfor_cv_have_broken_isnan" = xyes; then |
839904a0 | 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], | |
6992582a | 283 | libgfor_cv_have_broken_fpclassify, [ |
839904a0 | 284 | libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS |
285 | LIBS="$LIBS -lm" | |
286 | AC_TRY_RUN([ | |
839904a0 | 287 | #include <math.h> |
839904a0 | 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; | |
6992582a | 302 | }], libgfor_cv_have_broken_fpclassify=no, libgfor_cv_have_broken_fpclassify=yes, [ |
839904a0 | 303 | case "${target}" in |
6992582a | 304 | hppa*-*-hpux*) libgfor_cv_have_broken_fpclassify=yes ;; |
305 | *) libgfor_cv_have_broken_fpclassify=no ;; | |
839904a0 | 306 | esac])] |
307 | LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS) | |
6992582a | 308 | if test x"$libgfor_cv_have_broken_fpclassify" = xyes; then |
839904a0 | 309 | AC_DEFINE(HAVE_BROKEN_FPCLASSIFY, 1, [Define if fpclassify is broken.]) |
310 | fi]) | |
daad4fd5 | 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], | |
6992582a | 317 | libgfor_cv_have_working_stat, [ |
daad4fd5 | 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; | |
6992582a | 338 | }], libgfor_cv_have_working_stat=yes, libgfor_cv_have_working_stat=no, [ |
daad4fd5 | 339 | case "${target}" in |
6992582a | 340 | *mingw*) libgfor_cv_have_working_stat=no ;; |
341 | *) libgfor_cv_have_working_stat=yes;; | |
daad4fd5 | 342 | esac])]) |
6992582a | 343 | if test x"$libgfor_cv_have_working_stat" = xyes; then |
daad4fd5 | 344 | AC_DEFINE(HAVE_WORKING_STAT, 1, [Define if target has a reliable stat.]) |
345 | fi]) | |
aaa798ba | 346 | |
347 | dnl Checks for fpsetmask function. | |
348 | AC_DEFUN([LIBGFOR_CHECK_FPSETMASK], [ | |
6992582a | 349 | AC_CACHE_CHECK([whether fpsetmask is present], libgfor_cv_have_fpsetmask, [ |
aaa798ba | 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);], | |
6992582a | 357 | eval "libgfor_cv_have_fpsetmask=yes", eval "libgfor_cv_have_fpsetmask=no") |
aaa798ba | 358 | ]) |
6992582a | 359 | if test x"$libgfor_cv_have_fpsetmask" = xyes; then |
aaa798ba | 360 | AC_DEFINE(HAVE_FPSETMASK, 1, [Define if you have fpsetmask.]) |
361 | fi | |
362 | ]) | |
3b99ec70 | 363 | |
364 | dnl Check whether we have a mingw that provides a __mingw_snprintf function | |
365 | AC_DEFUN([LIBGFOR_CHECK_MINGW_SNPRINTF], [ | |
6992582a | 366 | AC_CACHE_CHECK([whether __mingw_snprintf is present], libgfor_cv_have_mingw_snprintf, [ |
3b99ec70 | 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 | ], | |
6992582a | 373 | eval "libgfor_cv_have_mingw_snprintf=yes", eval "libgfor_cv_have_mingw_snprintf=no") |
3b99ec70 | 374 | ]) |
6992582a | 375 | if test x"$libgfor_cv_have_mingw_snprintf" = xyes; then |
3b99ec70 | 376 | AC_DEFINE(HAVE_MINGW_SNPRINTF, 1, [Define if you have __mingw_snprintf.]) |
377 | fi | |
378 | ]) |