aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/runtime/configure.in
blob: d2bcebae865734596f44f616311b4b7d4b007adb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
# Process this file with autoconf to produce a configure script.
#   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
#   Contributed by Dave Love (d.love@dl.ac.uk).
#
#This file is part of GNU Fortran.
#
#GNU Fortran is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.
#
#GNU Fortran is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with GNU Fortran; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#02111-1307, USA.

AC_INIT(libF77/Version.c)

AC_REVISION(1.10)

dnl Checks for programs.
# For g77 we'll set CC to point at the built gcc, but this will get it into
# the makefiles
AC_PROG_CC
dnl AC_C_CROSS
dnl Gives misleading `(cached)' message from the check.
if test "$CROSS";then
  ac_cv_c_cross=yes
else
  ac_cv_c_cross=no
fi

dnl These should be inherited in the recursive make, but ensure they are
dnl defined:
test "$AR" || AR=ar
AC_SUBST(AR)
if test "$RANLIB"; then :
  AC_SUBST(RANLIB)
else
  RANLIB_TEST=true
  AC_PROG_RANLIB
fi
AC_SUBST(RANLIB_TEST)

dnl not needed for g77?
dnl AC_PROG_MAKE_SET

dnl Checks for libraries.

dnl Checks for header files.
# Sanity check for the cross-compilation case:
AC_CHECK_HEADER(stdio.h,:,
  [AC_MSG_ERROR([Can't find stdio.h.
You must have a usable C system for the target already installed, at least
including headers and, preferably, the library, before you can configure
the G77 runtime system.  If necessary, install gcc now with \`LANGUAGES=c',
then the target library, then build with \`LANGUAGES=f77'.])])

AC_HEADER_STDC
dnl We could do this if we didn't know we were using gcc
dnl AC_MSG_CHECKING(for prototype-savvy compiler)
dnl AC_CACHE_VAL(g77_cv_sys_proto,                
dnl   [AC_TRY_LINK(,                             
dnl dnl looks screwy because TRY_LINK expects a function body
dnl    [return 0;} int foo (int * bar) {],       
dnl    g77_cv_sys_proto=yes,                      
dnl    [g77_cv_sys_proto=no                       
dnl     AC_DEFINE(KR_headers)])])                
dnl AC_MSG_RESULT($g77_cv_sys_proto)              

dnl for U77
dnl AC_CHECK_HEADERS(unistd.h)

AC_MSG_CHECKING(for posix)
AC_CACHE_VAL(g77_cv_header_posix,
  AC_EGREP_CPP(yes,
  [#include <sys/types.h>
#include <unistd.h>
#ifdef _POSIX_VERSION
  yes
#endif
], 
  g77_cv_header_posix=yes,
  g77_cv_header_posix=no))
AC_MSG_RESULT($g77_cv_header_posix)

# We can rely on the GNU library being posix-ish.  I guess checking the 
# header isn't actually like checking the functions, though...
AC_MSG_CHECKING(for GNU library)
AC_CACHE_VAL(g77_cv_lib_gnu,
  AC_EGREP_CPP(yes,
    [#include <stdio.h>
#ifdef __GNU_LIBRARY__
  yes
#endif
], 
  g77_cv_lib_gnu=yes, g77_cv_lib_gnu=no))
AC_MSG_RESULT($g77_cv_lib_gnu)

# Apparently cygwin needs to be special-cased.
AC_MSG_CHECKING([for cyg\`win'32])
AC_CACHE_VAL(g77_cv_sys_cygwin32,
  AC_EGREP_CPP(yes,
  [#ifdef __CYGWIN32__
  yes
#endif
],
  g77_cv_sys_cygwin32=yes,
  g77_cv_sys_cygwin32=no))
AC_MSG_RESULT($g77_cv_sys_cygwin32)

AC_CHECK_HEADER(fcntl.h,
   test $g77_cv_header_posix = yes && AC_DEFINE(_POSIX_SOURCE),
   AC_DEFINE(NO_FCNTL) AC_DEFINE(OPEN_DECL))

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T

dnl Checks for library functions.
AC_TYPE_SIGNAL
# we'll get atexit by default
if test $ac_cv_header_stdc != yes; then
AC_CHECK_FUNC(atexit,
  AC_DEFINE(onexit,atexit),dnl just in case
  [AC_DEFINE(NO_ONEXIT)
  AC_CHECK_FUNC(onexit,,
    [AC_CHECK_FUNC(on_exit,
     AC_DEFINE(onexit,on_exit),)])])
else true
fi

# This should always succeed on unix.
# Apparently positive result on cygwin loses re. NON_UNIX_STDIO
# (as of cygwin b18).
AC_CHECK_FUNC(fstat)
AC_MSG_CHECKING([need for NON_UNIX_STDIO])
if test $g77_cv_sys_cygwin32 = yes || test $ac_cv_func_fstat = no; then
  AC_MSG_RESULT(yes)
  AC_DEFINE(NON_UNIX_STDIO)
else
  AC_MSG_RESULT(no)
fi

# This is necessary for e.g. Linux:
AC_MSG_CHECKING([for necessary members of struct FILE])
AC_CACHE_VAL(g77_cv_struct_FILE,
[AC_TRY_COMPILE([#include <stdio.h>],
  [FILE s; s._ptr; s._base; s._flag;],g77_cv_struct_FILE=yes,
  g77_cv_struct_FILE=no)])dnl
AC_MSG_RESULT($g77_cv_struct_FILE)
if test $g77_cv_struct_FILE = no; then
  AC_DEFINE(MISSING_FILE_ELEMS)
fi

dnl perhaps should check also for remainder
dnl Unfortunately, the message implies we're just checking for -lm...
AC_CHECK_LIB(m,drem,AC_DEFINE(IEEE_drem))

dnl for U77:
dnl AC_CHECK_FUNCS(symlink getcwd lstat)
dnl test $ac_cv_func_symlink = yes && SYMLNK=symlnk_.o
dnl test $ac_cv_func_lstat = yes && SYMLNK="$SYMLNK lstat_.o"
dnl AC_SUBST(SYMLNK)

# posix will guarantee the right behaviour for sprintf, else we can't be
# sure; HEADER_STDC wouldn't be the right check in sunos4, for instance.
# However, on my sunos4/gcc setup unistd.h leads us wrongly to believe
# we're posix-conformant, so always do the test.
AC_MSG_CHECKING(for ansi/posix sprintf result)
dnl This loses if included as an argument to AC_CACHE_VAL because the
dnl changequote doesn't take effect and the [] vanish.
dnl fixme: use cached value
AC_TRY_RUN(changequote(<<, >>)dnl
  <<#include <stdio.h>
    /* does sprintf return the number of chars transferred? */
    main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);}
>>changequote([, ]),
    g77_cv_sys_sprintf_ansi=yes,
    g77_cv_sys_sprintf_ansi=no,
    g77_cv_sys_sprintf_ansi=no)
AC_CACHE_VAL(g77_cv_sys_sprintf_ansi,
     g77_cv_sys_sprintf_ansi=$g77_cv_sys_sprintf_ansi)
dnl We get a misleading `(cached)' message...
if test $ac_cv_c_cross = no; then
  AC_MSG_RESULT($g77_cv_sys_sprintf_ansi)
else
  AC_MSG_RESULT([can't tell -- assuming no])
fi
# The cygwin patch takes steps to avoid defining USE_STRLEN here -- I don't
# understand why.
if test $g77_cv_sys_sprintf_ansi != yes; then 
  AC_DEFINE(USE_STRLEN)
fi

# define NON_ANSI_RW_MODES on unix (can't hurt)
AC_MSG_CHECKING(NON_ANSI_RW_MODES)
AC_EGREP_CPP(yes,
[#ifdef unix
  yes
#endif
#ifdef __unix
  yes
#endif
#ifdef __unix__
  yes
#endif
], is_unix=yes, is_unix=no)
if test $g77_cv_sys_cygwin32 = yes; then
  AC_MSG_RESULT(no)
else
  if test $is_unix = yes; then
    AC_DEFINE(NON_ANSI_RW_MODES)
    AC_MSG_RESULT(yes)
  else
    AC_MSG_RESULT(no)
  fi
fi

# We have to firkle with the info in hconfig.h to figure out suitable types
# (via com.h).  proj.h and com.h are in $srcdir/.., config.h which they need
# is in ../.. and the config files are in $srcdir/../../config.
AC_MSG_CHECKING(f2c integer type)
late_ac_cpp=$ac_cpp
ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
AC_CACHE_VAL(g77_cv_sys_f2cinteger,
AC_EGREP_CPP(F2C_INTEGER=long int,
[#include "proj.h"
#define FFECOM_DETERMINE_TYPES 1
#include "com.h"
#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
F2C_INTEGER=long int
#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
F2C_INTEGER=int
#else
#  error "Cannot find a suitable type for F2C_INTEGER"
#endif
],
 g77_cv_sys_f2cinteger="long int",)
if test "$g77_cv_sys_f2cinteger" = ""; then
  AC_EGREP_CPP(F2C_INTEGER=int,
[#include "proj.h"
#define FFECOM_DETERMINE_TYPES 1
#include "com.h"
#if FFECOM_f2cINTEGER == FFECOM_f2ccodeLONG
F2C_INTEGER=long int
#elif FFECOM_f2cINTEGER == FFECOM_f2ccodeINT
F2C_INTEGER=int
#else
#  error "Cannot find a suitable type for F2C_INTEGER"
#endif
],
   g77_cv_sys_f2cinteger=int,)
fi
if test "$g77_cv_sys_f2cinteger" = ""; then
  AC_MSG_RESULT("")
  AC_MSG_ERROR([Can't determine type for f2c integer; config.log may help.])
fi
)
AC_MSG_RESULT($g77_cv_sys_f2cinteger)
F2C_INTEGER=$g77_cv_sys_f2cinteger
ac_cpp=$late_ac_cpp
AC_SUBST(F2C_INTEGER)

AC_MSG_CHECKING(f2c long int type)
late_ac_cpp=$ac_cpp
ac_cpp="$late_ac_cpp -I$srcdir/.. -I../.. -I$srcdir/../.. -I$srcdir/../../config"
AC_CACHE_VAL(g77_cv_sys_f2clongint,
AC_EGREP_CPP(F2C_LONGINT=long int,
[#include "proj.h"
#define FFECOM_DETERMINE_TYPES 1
#include "com.h"
#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
F2C_LONGINT=long int
#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
F2C_LONGINT=long long int
#else
#  error "Cannot find a suitable type for F2C_LONGINT"
#endif
],
 g77_cv_sys_f2clongint="long int",)
if test "$g77_cv_sys_f2clongint" = ""; then
  AC_EGREP_CPP(F2C_LONGINT=long long int,
[#include "proj.h"
#define FFECOM_DETERMINE_TYPES 1
#include "com.h"
#if FFECOM_f2cLONGINT == FFECOM_f2ccodeLONG
F2C_LONGINT=long int
#elif FFECOM_f2cLONGINT == FFECOM_f2ccodeLONGLONG
F2C_LONGINT=long long int
#else
#  error "Cannot find a suitable type for F2C_LONGINT"
#endif
],
   g77_cv_sys_f2clongint="long long int",)
fi
if test "$g77_cv_sys_f2clongint" = ""; then
  AC_MSG_RESULT("")
  AC_MSG_ERROR([Can't determine type for f2c long int; config.log may help.])
fi
)
AC_MSG_RESULT($g77_cv_sys_f2clongint)
F2C_LONGINT=$g77_cv_sys_f2clongint
ac_cpp=$late_ac_cpp
AC_SUBST(F2C_LONGINT)

dnl maybe check for drem/remainder

AC_SUBST(CROSS)


# This EOF_CHAR is a misfeature on unix.
AC_DEFINE(NO_EOF_CHAR_CHECK)

AC_DEFINE(Skip_f2c_Undefs)

dnl Craig had these in f2c.h, but they're only relevant for building libf2c
dnl anyway.

dnl   For GNU Fortran (g77), we always enable the following behaviors for
dnl   libf2c, to make things easy on the programmer.  The alternate
dnl   behaviors have their uses, and g77 might provide them as compiler,
dnl   rather than library, options, so only a single copy of a shared libf2c
dnl   need be built for a system.

dnl   This makes unformatted I/O more consistent in relation to other
dnl   systems.  It is not required by the F77 standard.

AC_DEFINE(Pad_UDread)

dnl   This makes ERR= and IOSTAT= returns work properly in disk-full
dnl   situations, making things work more as expected.  It slows things
dnl   down, so g77 will probably someday choose the original implementation
dnl   on a case-by-case basis when it can be shown to not be necessary
dnl   (e.g. no ERR= or IOSTAT=) or when it is given the appropriate
dnl   compile-time option or, perhaps, source-code directive.

dnl AC_DEFINE(ALWAYS_FLUSH)

dnl   Most Fortran implementations do this, so to make it easier
dnl   to compare the output of g77-compiled programs to those compiled
dnl   by most other compilers, tell libf2c to put leading zeros in
dnl   appropriate places on output

AC_DEFINE(WANT_LEAD_0)

# avoid confusion in case the `makefile's from the f2c distribution have
# got put here
test -f libF77/makefile && mv libF77/makefile  libF77/makefile.ori
test -f libI77/makefile && mv libI77/makefile  libI77/makefile.ori
test -f libU77/makefile && mv libU77/makefile  libU77/makefile.ori

AC_OUTPUT(Makefile ../../include/f2c.h:f2c.h.in libI77/Makefile libF77/Makefile libU77/Makefile)

dnl We might have configuration options to:
dnl * allow non-standard string concatenation (use libF77 s_catow.o,
dnl   not s_cat.o)
dnl * change unit preconnexion in libI77/err.c (f_init.c)
dnl * -DALWAYS_FLUSH in libI77
dnl * -DOMIT_BLANK_CC in libI77

dnl Local Variables:
dnl comment-start: "dnl "
dnl comment-end: ""
dnl comment-start-skip: "\\bdnl\\b\\s *"
dnl End: