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!
