| 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/. |