]>
Commit | Line | Data |
---|---|---|
beaa74ae | 1 | 1998-08-11 |
81fea2b1 | 2 | |
beaa74ae DL |
3 | This directory contains the libf2c library packaged for use with g77 |
4 | to configure and build automatically (in principle!) as part of the | |
5 | top-level configure and make steps. g77 names this library `libg2c' | |
6 | to avoid conflicts with existing copies of `libf2c' on a system. | |
81fea2b1 | 7 | |
beaa74ae DL |
8 | Some small changes have been made vis-a-vis the netlib distribution of |
9 | libf2c, which comes from <ftp:bell-labs.com/netlib/f2c/> and is maintained | |
10 | (excellently) by David M. Gay <dmg@bell-labs.com>. See the Notice files | |
11 | for copyright information. We usually try to get g77-specific changes | |
12 | rolled back into the libf2c distribution. | |
81fea2b1 JL |
13 | |
14 | Files that come directly from netlib are either maintained in the | |
beaa74ae DL |
15 | libf2c directory under their original names or, if they are not pertinent |
16 | for g77's version of libf2c, under their original names with `.netlib' | |
17 | appended. For example, permissions.netlib is a copy of f2c's top-level | |
18 | `permissions' file in the netlib distribution. In this case, it applies | |
19 | only to the relevant portions of the libF77/ and libI77/ directories; it | |
20 | does not apply to the libU77/ directory, which is distributed under | |
21 | different licensing arrangements. Similarly, the `makefile.netlib' files | |
22 | in the libF77/ and libI77/ subdirectories are copies of the respective | |
23 | `makefile' files in the netlib distribution, but are not used when | |
24 | building g77's version of libf2c. | |
25 | ||
26 | The README.netlib files in libF77/ and libI77/ thus might be | |
81fea2b1 JL |
27 | interesting, but should not be taken as guidelines for how to |
28 | configure and build libf2c in g77's distribution. | |
29 | ||
beaa74ae DL |
30 | * Read permissions.netlib for licensing conditions that apply to |
31 | distributing programs containing portions of code in the libF77/ and | |
32 | libI77/ subdirectories. Also read disclaimer.netlib. | |
33 | ||
34 | * Read libU77/COPYING.LIB for licensing conditions that apply to | |
35 | distributing programs containing portions of code in the libU77/ | |
36 | subdirectory. | |
81fea2b1 | 37 | |
beaa74ae | 38 | Among the user-visible changes (choices) g77 makes in its version of libf2c: |
81fea2b1 JL |
39 | |
40 | - f2c.h configured to default to padding unformatted direct reads | |
41 | (#define Pad_UDread), because that's the behavior most users | |
42 | expect. | |
43 | ||
44 | - f2c.h configured to default to outputting leading zeros before | |
45 | decimal points in formatted and list-directed output, to be compatible | |
46 | with many other compilers (#define WANT_LEAD_0). Either way is | |
47 | standard-conforming, however, and you should try to avoid writing | |
48 | code that assumes one format or another. | |
49 | ||
50 | - dtime_() and etime_() are from Dave Love's libU77, not from | |
51 | netlib's libF77. | |
beaa74ae DL |
52 | |
53 | - Routines that are intended to be called directly via user code | |
54 | (as in `CALL EXIT', but not the support routines for `OPEN') | |
55 | have been renamed from `<name>' to `G77_<name>_0'. This, in | |
56 | combination with g77 recognizing these names as intrinsics and | |
57 | calling them directly by those names, reduces the likelihood of | |
58 | interface mismatches occurring due to use of compiler options | |
59 | that change code generation, and permits use of these names as | |
60 | both intrinsics and user-supplied routines in applications (as | |
61 | required by the Fortran standards). f2cext.c contains "jacket" | |
62 | routines named `<name>' that call `G77_<name>_0', to support | |
63 | code that relies on calling the relevant routines as `EXTERNAL' | |
64 | routines. | |
65 | ||
66 | Note that the `_0' in the name denotes version 0 of the *interface*, | |
67 | not the *implementation*, of a routine. The interface of a | |
68 | given routine *must not change* -- instead, introduce a new copy | |
69 | of the code, with an increment (e.g. `_1') suffix, having the | |
70 | new interface. Whether the previous interface is maintained is | |
71 | not as important as ensuring the routine implementing the new | |
72 | interface is never successfully linked to a call in existing, | |
73 | e.g. previously compiled, code that expects the old interface. | |
74 | ||
75 | - Version.c in the subdirectories contains g77-specific version | |
76 | information and a routine (per subdirectory) to print both the | |
77 | netlib and g77 version information when called. The `g77 -v' | |
78 | command is designed to trigger this, by compiling, linking, and | |
79 | running a small program that calls the routines in sequence. | |
80 | ||
81 | - libF77/main.c no longer contains the actual code to copy the | |
82 | argc and argv values into globals or to set up the signal-handling | |
83 | environment. These have been removed to libF77/setarg.c and | |
84 | libF77/setsig.c, respectively. libF77/main.c contains procedure | |
85 | calls to the new code in place of the code itself. This should | |
86 | simplify linking executables with a main() function other than | |
87 | that in libF77/main.c (such as one written by the user in C or | |
88 | C++). See the g77 documentation for more information. | |
89 | ||
90 | - Complex-arithmetic support routines in libF77/ take a different approach | |
91 | to avoiding problems resulting from aliased input and output arguments, | |
92 | which should avoid particularly unusual alias problems that netlib | |
93 | libf2c might suffer from. | |
94 | ||
95 | - libF77/signal_.c supports systems with 64-bit pointers and 32-bit | |
96 | integers. | |
97 | ||
98 | - I/O routines in libI77/ have code to detect attempts to do recursive | |
99 | I/O more "directly", mainly to lead to a clearer diagnostic than | |
100 | typically occurs under such conditions. | |
101 | ||
102 | - Formatted-I/O routines in libI77/ have code to pretty-print a FORMAT | |
103 | string when printing a fatal diagnostic involving formatted I/O. | |
104 | ||
105 | - libI77/open.c supports a more robust, perhaps more secure, method | |
106 | of naming temporary files on some systems. | |
107 | ||
108 | - Some g77-specific handling of building under Microsoft operating | |
109 | systems exists, mainly in libI77/. |