1998-08-11

This directory contains the libf2c library packaged for use with g77
to configure and build automatically (in principle!) as part of the
top-level configure and make steps.  g77 names this library `libg2c'
to avoid conflicts with existing copies of `libf2c' on a system.

Some small changes have been made vis-a-vis the netlib distribution of
libf2c, which comes from <ftp:bell-labs.com/netlib/f2c/> and is maintained
(excellently) by David M. Gay <dmg@bell-labs.com>.  See the Notice files
for copyright information.  We usually try to get g77-specific changes
rolled back into the libf2c distribution.

Files that come directly from netlib are either maintained in the
libf2c directory under their original names or, if they are not pertinent
for g77's version of libf2c, under their original names with `.netlib'
appended.  For example, permissions.netlib is a copy of f2c's top-level
`permissions' file in the netlib distribution.  In this case, it applies
only to the relevant portions of the libF77/ and libI77/ directories; it
does not apply to the libU77/ directory, which is distributed under
different licensing arrangements.  Similarly, the `makefile.netlib' files
in the libF77/ and libI77/ subdirectories are copies of the respective
`makefile' files in the netlib distribution, but are not used when
building g77's version of libf2c.

The README.netlib files in libF77/ and libI77/ thus might be
interesting, but should not be taken as guidelines for how to
configure and build libf2c in g77's distribution.

* Read permissions.netlib for licensing conditions that apply to
  distributing programs containing portions of code in the libF77/ and
  libI77/ subdirectories.  Also read disclaimer.netlib.

* Read libU77/COPYING.LIB for licensing conditions that apply to
  distributing programs containing portions of code in the libU77/
  subdirectory.

Among the user-visible changes (choices) g77 makes in its version of libf2c:

-  f2c.h configured to default to padding unformatted direct reads
   (#define Pad_UDread), because that's the behavior most users
   expect.

-  f2c.h configured to default to outputting leading zeros before
   decimal points in formatted and list-directed output, to be compatible
   with many other compilers (#define WANT_LEAD_0).  Either way is
   standard-conforming, however, and you should try to avoid writing
   code that assumes one format or another.

-  dtime_() and etime_() are from Dave Love's libU77, not from
   netlib's libF77.

-  Routines that are intended to be called directly via user code
   (as in `CALL EXIT', but not the support routines for `OPEN')
   have been renamed from `<name>' to `G77_<name>_0'.  This, in
   combination with g77 recognizing these names as intrinsics and
   calling them directly by those names, reduces the likelihood of
   interface mismatches occurring due to use of compiler options
   that change code generation, and permits use of these names as
   both intrinsics and user-supplied routines in applications (as
   required by the Fortran standards).  f2cext.c contains "jacket"
   routines named `<name>' that call `G77_<name>_0', to support
   code that relies on calling the relevant routines as `EXTERNAL'
   routines.

   Note that the `_0' in the name denotes version 0 of the *interface*,
   not the *implementation*, of a routine.  The interface of a
   given routine *must not change* -- instead, introduce a new copy
   of the code, with an increment (e.g. `_1') suffix, having the
   new interface.  Whether the previous interface is maintained is
   not as important as ensuring the routine implementing the new
   interface is never successfully linked to a call in existing,
   e.g. previously compiled, code that expects the old interface.

-  Version.c in the subdirectories contains g77-specific version
   information and a routine (per subdirectory) to print both the
   netlib and g77 version information when called.  The `g77 -v'
   command is designed to trigger this, by compiling, linking, and
   running a small program that calls the routines in sequence.

-  libF77/main.c no longer contains the actual code to copy the
   argc and argv values into globals or to set up the signal-handling
   environment.  These have been removed to libF77/setarg.c and
   libF77/setsig.c, respectively.  libF77/main.c contains procedure
   calls to the new code in place of the code itself.  This should
   simplify linking executables with a main() function other than
   that in libF77/main.c (such as one written by the user in C or
   C++).  See the g77 documentation for more information.

-  Complex-arithmetic support routines in libF77/ take a different approach
   to avoiding problems resulting from aliased input and output arguments,
   which should avoid particularly unusual alias problems that netlib
   libf2c might suffer from.

-  libF77/signal_.c supports systems with 64-bit pointers and 32-bit
   integers.

-  I/O routines in libI77/ have code to detect attempts to do recursive
   I/O more "directly", mainly to lead to a clearer diagnostic than
   typically occurs under such conditions.

-  Formatted-I/O routines in libI77/ have code to pretty-print a FORMAT
   string when printing a fatal diagnostic involving formatted I/O.

-  libI77/open.c supports a more robust, perhaps more secure, method
   of naming temporary files on some systems.

-  Some g77-specific handling of building under Microsoft operating
   systems exists, mainly in libI77/.
