# 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) dnl Make sure that RANLIB_TEST is set also. if test -z "$RANLIB_TEST"; then RANLIB_TEST=true fi 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 #include #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 #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) # ditto for mingw32. AC_MSG_CHECKING([for mingw32]) AC_CACHE_VAL(g77_cv_sys_mingw32, AC_EGREP_CPP(yes, [#ifdef __MINGW32__ yes #endif ], g77_cv_sys_mingw32=yes, g77_cv_sys_mingw32=no)) AC_MSG_RESULT($g77_cv_sys_mingw32) 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). Likewise on mingw. AC_CHECK_FUNC(fstat) AC_MSG_CHECKING([need for NON_UNIX_STDIO]) if test $g77_cv_sys_cygwin32 = yes \ || test $g77_cv_sys_mingw32 = 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 ], [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 /* 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 || test $g77_cv_sys_mingw32 = 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/../gcc/f -I../../gcc -I$srcdir/../gcc -I$srcdir/../gcc/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/../gcc/f -I../../gcc -I$srcdir/../gcc -I$srcdir/../gcc/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_CONFIG_SUBDIRS(libU77) AC_OUTPUT(Makefile f2c.h libI77/Makefile libF77/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: