| 1998-08-11 |
| |
| This directory contains the egcs variant of version 0.5.24 of the |
| GNU Fortran compiler (g77). The GNU Fortran compiler is free software. |
| See the file COPYING.g77 for copying permission. |
| |
| Currently, two variants of g77 exist. One is the Free Software Foundation |
| (FSF) variant. The other is the egcs variant. As of egcs version 1.1, |
| these variants are kept fairly similar in most respects. Pertinent |
| differences, such as the layout of the source code, are specified below. |
| |
| Below, `[FSF]' denotes information applicable to only the FSF variant of |
| g77, while `[egcs]' denotes egcs-only information. |
| |
| |
| * IMPORTANT: Things you *must* do (or avoid) are marked with a * at the |
| beginning of the line in this file!!! |
| |
| |
| The email address to which bugs are to be reported is either |
| [FSF] <fortran@gnu.org> or [egcs] <egcs-bugs@cygnus.com>. |
| |
| * *DO NOT* send any email (reporting bugs, asking questions, etc.) to |
| either of these addresses without *first* reading the g77 documentation. |
| Use `info', Info mode in GNU Emacs, or a text viewer such as `more' to |
| do this. |
| |
| The g77 documentation is in the source files named `g77.info', |
| `g77.info-1', `g77.info-2', and so on in the `f' subdirectory. If these |
| files are not present or you can't find them, contact the person or |
| organization that put together the g77 distribution you are using (probably |
| not the FSF or egcs), or ask your system administrator for help. |
| |
| |
| This README applies to only the g77-specific portions of the source-code |
| tree that contains it. These portions include: |
| |
| - The README.g77 and [FSF] COPYING.g77 files, in this directory, "this |
| directory" being [FSF] the top-level directory containing a g77 |
| distribution or [egcs] the gcc/ subdirectory of an egcs distribution. |
| |
| - The g77 front end, in the f/ subdirectory of this directory. |
| |
| - The libg2c library, in [FSF] the f/runtime/ subdirectory of this |
| directory or [egcs] the libf2c/ directory under the top-level |
| directory of the egcs distribution. |
| |
| |
| * To build g77, you must have a source distribution of [FSF] gcc |
| version 2.8 or [egcs] egcs version 1.1. Do not attempt to use |
| any other version of gcc or egcs, because this version of g77 is |
| designed to work with only those versions. |
| |
| Note that you must have *source* copies of the gcc or egcs distribution! |
| You cannot build g77 just using binaries of gcc or egcs. Also, unless |
| you are an expert, avoid using any distribution of gcc or egcs not |
| identical to the ones distributed by the FSF and Cygnus Support, |
| respectively. The primary FSF distribution site is: |
| |
| <ftp://ftp.gnu.org/pub/gnu/> |
| |
| The primary egcs distribution site is: |
| |
| <ftp://ftp.cygnus.com/pub/egcs/> |
| |
| Both of these sites have approved mirror sites from which valid |
| distributions also may be obtained. |
| |
| * Do not attempt to combine the egcs version of g77 with the FSF |
| gcc distribution, or the FSF version of g77 with the egcs gcc |
| distribution. Although the differences are minor, they might |
| be sufficient to prevent g77 from building properly, or from |
| working properly if the build appears to succeed. |
| |
| [FSF] g77 is distributed as g77-<version>/f/ so that unpacking the g77 |
| distribution is done in the normal GNU way, resulting in a directory having |
| the version number in the name. However, to build g77, the g77 distribution |
| must be merged with an appropriate gcc distribution, normally in a gcc |
| source directory, before configuring, building, and installing g77. |
| |
| [FSF] If you have just unpacked the g77 distribution, before proceeding, |
| you must merge the contents of the g77 distribution with the appropriate |
| gcc distribution on your system. |
| |
| * [FSF] Read and follow the instructions in f/INSTALL that |
| explain how to merge a g77 source directory into a gcc source |
| directory. You can use Info to read the same installation |
| instructions via: |
| |
| info -f f/g77.info -n Unpacking |
| |
| [FSF] The resulting directory layout includes the following, where gcc/ |
| might be a link to, for example, gcc-2.8.1/: |
| |
| gcc/ Non-g77 files in gcc |
| gcc/COPYING.g77 A copy of the GPL, under which g77 is licensed |
| gcc/README.g77 This file |
| gcc/f/ GNU Fortran front end |
| gcc/f/runtime/ libg2c configuration and g2c.h file generation |
| gcc/f/runtime/libF77/ Non-I/O portion of libg2c |
| gcc/f/runtime/libI77/ I/O portion of libg2c |
| gcc/f/runtime/libU77/ Additional interfaces to libc for libg2c |
| |
| [FSF] Applying g77 patches in the form of .diff files is done by typing |
| `patch -p1 -d gcc' (where gcc/ contains the f/ subdirectory). That is, |
| g77 patches are distributed in the same form, and at the same directory |
| level, as patches to the gcc distribution. (Note: make sure you're |
| using GNU patch, version 2.5 or later! Other versions of patch |
| have trouble with g77-related patches.) |
| |
| [egcs] The egcs version of g77 is distributed already merged with |
| the rest of egcs (such as the gcc back end). |
| |
| [egcs] The resulting directory layout includes the following, where egcs/ |
| might be a link to, for example, egcs-1.1/: |
| |
| egcs/gcc/ Non-g77 files in gcc |
| egcs/gcc/README.g77 This file |
| egcs/gcc/f/ GNU Fortran front end |
| egcs/libf2c/ libg2c configuration and g2c.h file generation |
| egcs/libf2c/libF77/ Non-I/O portion of libg2c |
| egcs/libf2c/libI77/ I/O portion of libg2c |
| egcs/libf2c/libU77/ Additional interfaces to libc for libg2c |
| |
| [egcs] Applying g77-specific patches to egcs is done the same way as |
| applying other egcs patches. |
| |
| |
| Below, `libf2c/' shall denote [FSF] gcc/f/runtime/ or [egcs] egcs/libf2c/, |
| while `f/' shall denote [FSF] the rest of gcc/f/ or [egcs] egcs/gcc/f/. |
| |
| |
| Components of note in g77 are described below. |
| |
| f/ as a whole contains the program GNU Fortran (g77), while libf2c/ |
| contains a portion of the separate program f2c. Note: The libf2c |
| code is not part of the program g77, just distributed with it. |
| |
| f/ contains text files that document the Fortran compiler, source |
| files for the GNU Fortran Front End (FFE), and some other stuff. |
| The g77 compiler code is placed in f/ because it, along with its contents, |
| is designed to be a subdirectory of a GNU CC (gcc) source directory, gcc/, |
| which is structured so that language-specific front ends can be "dropped |
| in" as subdirectories. The C++ front end (g++), is an example of this -- |
| it resides in the cp/ subdirectory. Note that the C front end (also |
| referred to as gcc) is an exception to this, as its source files reside |
| in the gcc/ directory itself. |
| |
| libf2c/ contains the run-time libraries for the f2c program, also used |
| by g77. These libraries normally referred to collectively as libf2c. |
| When built as part of g77, libf2c is installed under the name libg2c to avoid |
| conflict with any existing version of libf2c, and thus is often referred |
| to as libg2c when the g77 version is specifically being referred to. |
| |
| The netlib version of libf2c/ contains two distinct libraries, libF77 and |
| libI77, each in their own subdirectories. In g77, this distinction is not |
| made, beyond maintaining the subdirectory structure in the source-code tree. |
| |
| libf2c/ is not part of the program g77, just distributed with it. It |
| contains files not present in the official (netlib) version of libf2c, |
| and also contains some minor changes made from libf2c, to fix some bugs, |
| and to facilitate automatic configuration, building, and installation of |
| libf2c (as libg2c) for use by g77 users. |
| |
| * See libf2c/README for more information, including licensing conditions |
| governing distribution of programs containing code from libg2c. |
| |
| libg2c, g77's version of libf2c, adds Dave Love's implementation of |
| libU77, in the libf2c/libU77/ directory. This library is distributed |
| under the GNU Library General Public License (LGPL) -- see the |
| file libf2c/libU77/COPYING.LIB for more information, as this license |
| governs distribution conditions for programs containing code from |
| this portion of the library. |
| |
| |
| Files of note in g77 are described below. |
| |
| f/BUGS lists some important bugs known to be in g77. Or: |
| |
| info -f f/g77.info -n "Actual Bugs" |
| |
| f/ChangeLog lists recent changes to g77 internals. |
| |
| libf2c/ChangeLog lists recent changes to libg2c internals. |
| |
| [FSF] f/INSTALL describes how to build and install GNU Fortran. Or: |
| |
| info -f f/g77.info -n Installation |
| |
| f/NEWS contains the per-release changes. These include the user-visible |
| changes described under "Changes" in the g77 documentation, plus internal |
| changes of import. Or: |
| |
| info -f f/g77.info -n News |
| |
| * All users of g77 (not just installers) should read f/g77.info* |
| as well, using the `more' command if neither the `info' command, |
| nor GNU Emacs (with its Info mode), are available, or if they |
| aren't yet accustomed to using these tools. Read f/BUGS and f/NEWS |
| plus, if you are planning on building or installing the FSF version |
| of g77, f/INSTALL, at the very least! All of these files are |
| readable as "plain text" files. |
| |
| * Also see <ftp://alpha.gnu.org/g77.plan> for up-to-date information |
| regarding g77 bug reports, known bugs, bug-fixes, and new versions. |
| |
| |
| The rest of this file is of note to only those who wish to |
| debug, modify, or test the FFE (in conjunction with the gcc back end). |
| |
| If you want to explore the FFE code, which lives entirely in f/, here |
| are a few clues. The file g77spec.c contains the g77-specific source code |
| for the `g77' command only -- this just forms a variant of the `gcc' |
| command, so, just as the `gcc' command itself does not contain |
| the C front end, the `g77' command does not contain the Fortran front |
| end (FFE). The FFE code ends up in an executable named `f771', which |
| does the actual compiling, so it contains the FFE plus the gcc back end |
| (the latter to do most of the optimization, and the code generation). |
| |
| The file parse.c is the source file for main() for a stand-alone FFE and |
| yyparse() for f771. (Stand-alone building of the FFE doesn't work these days.) |
| The file top.c contains the top-level FFE function ffe_file and it (along |
| with top.h) define all ffe_[a-z].*, ffe[A-Z].*, and FFE_[A-Za-z].* symbols. |
| The file fini.c is a main() program that is used when building the FFE to |
| generate C header and source files for recognizing keywords. The files |
| malloc.c and malloc.h comprise a memory manager that defines all |
| malloc_[a-z].*, malloc[A-Z].*, and MALLOC_[A-Za-z].* symbols. All other |
| modules named <xyz> are comprised of all files named <xyz>*.<ext> and |
| define all ffe<xyz>_[a-z].*, ffe<xyz>[A-Z].*, and FFE<XYZ>_[A-Za-z].* symbols. |
| If you understand all this, congratulations -- it's easier for me to remember |
| how it works than to type in these grep patterns (such as they are). But it |
| does make it easy to find where a symbol is defined -- for example, |
| the symbol "ffexyz_set_something" would be defined in xyz.h and implemented |
| there (if it's a macro) or in xyz.c. |
| |
| The "porting" files of note currently are: proj.h, which defines the |
| "language" used by all the other source files (the language being |
| Standard C plus some useful things like ARRAY_SIZE and such) -- change |
| this file when you find your system doesn't properly define a Standard C |
| macro or function, for example; target.h and target.c, which describe |
| the target machine in terms of what data types are supported, how they are |
| denoted (what C type does an INTEGER*8 map to, for example), how to convert |
| between them, and so on (though as of 0.5.3, more and more of this information |
| is being dynamically configured by ffecom_init_0); com.h and com.c, which |
| interface to the target back end (currently only FFE stand-alone and the GBE); |
| ste.c, which contains code for implementing recognized executable statements |
| in the target back end (again currently either FFE or GBE); src.h and src.c, |
| which describe information on the format(s) of source files (such as whether |
| they are never to be processed as case-insensitive with regard to Fortran |
| keywords); and proj.c, which contains whatever code is needed to support |
| the language defined by proj.h. |
| |
| If you want to debug the f771 executable, for example if it crashes, |
| note that the global variables "lineno" and "input_filename" are set |
| to reflect the current line being read by the lexer during the first-pass |
| analysis of a program unit and to reflect the current line being |
| processed during the second-pass compilation of a program unit. If |
| an invocation of the function ffestd_exec_end() is on the stack, |
| the compiler is in the second pass, otherwise it is in the first. |
| (This information might help you reduce a test case and/or work around |
| a bug in g77 until a fix is available.) |
| |
| Any questions or comments on these topics? Read the g77 documentation! |