| @c Copyright (C) 1995-1999 Free Software Foundation, Inc. |
| @c This is part of the G77 manual. |
| @c For copying conditions, see the file g77.texi. |
| |
| @c The text of this file appears in the file INSTALL |
| @c in the G77 distribution, as well as in the G77 manual. |
| |
| @c Keep this the same as the dates above, since it's used |
| @c in the standalone derivations of this file (e.g. INSTALL). |
| @set copyrights 1995-1999 |
| |
| @set last-update-install 1999-03-13 |
| |
| @include root.texi |
| |
| @ifset DOC-INSTALL |
| @c The immediately following lines apply to the INSTALL file |
| @c which is generated using this file. |
| @emph{Note:} This file is automatically generated from the files |
| @file{install0.texi} and @file{g77install.texi}. |
| @file{INSTALL} is @emph{not} a source file, |
| although it is normally included within source distributions. |
| |
| This file contains installation information for the GNU Fortran compiler. |
| Copyright (C) @value{copyrights-install} Free Software Foundation, Inc. |
| You may copy, distribute, and modify it freely as long as you preserve |
| this copyright notice and permission notice. |
| |
| @node Top,,, (dir) |
| @chapter Installing GNU Fortran |
| @end ifset |
| |
| @set version-gcc 2.8.1 |
| @set version-autoconf 2.12 |
| @set version-bison 1.25 |
| @set version-gperf 2.5 |
| @set version-gzip 1.2.4 |
| @set version-make 3.76.1 |
| @set version-makeinfo 1.68 |
| @set version-patch 2.5 |
| @set version-sed 2.05 |
| @set version-tar 1.12 |
| @set version-texinfo 3.12 |
| |
| @ifset DOC-G77 |
| @node Installation |
| @chapter Installing GNU Fortran |
| @cindex installing, GNU Fortran |
| @end ifset |
| |
| The following information describes how to install @code{g77}. |
| |
| @ifset EGCS-G77 |
| @set OMIT-FSF-G77 |
| Note that, for @code{egcs} users, |
| much of the information is obsolete, |
| and is superceded by the |
| @code{egcs} installation procedures. |
| Such information is accordingly omitted and flagged as such. |
| @ifset DEVELOPMENT |
| @ifclear DOC-INSTALL |
| @clear OMIT-FSF-G77 |
| (It is not actually omitted from the development version of this documentation, |
| so the @code{g77} developers can easily find all the documentation |
| for all versions of @code{g77} in one place.) |
| @end ifclear |
| @end ifset |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| The information in this file generally pertains to dealing |
| with @emph{source} distributions of @code{g77} and @code{gcc}. |
| It is possible that some of this information will be applicable |
| to some @emph{binary} distributions of these products---however, |
| since these distributions are not made by the maintainers of |
| @code{g77}, responsibility for binary distributions rests with |
| whoever built and first distributed them. |
| |
| Nevertheless, efforts to make @code{g77} easier to both build |
| and install from source and package up as a binary distribution |
| are ongoing. |
| @end ifclear |
| |
| @ifset DEVELOPMENT |
| @emph{Warning:} The information below is still under development, |
| and might not accurately reflect the @code{g77} code base |
| of which it is a part. |
| Efforts are made to keep it somewhat up-to-date, |
| but they are particularly concentrated |
| on any version of this information |
| that is distributed as part of a @emph{released} @code{g77}. |
| |
| In particular, while this information is intended to apply to |
| the @value{which-g77} version of @code{g77}, |
| only an official @emph{release} of that version |
| is expected to contain documentation that is |
| most consistent with the @code{g77} product in that version. |
| @end ifset |
| |
| The following information was last updated on @value{last-update-install}: |
| |
| @menu |
| * Prerequisites:: Make sure your system is ready for @code{g77}. |
| * Problems Installing:: Known trouble areas. |
| * Settings:: Changing @code{g77} internals before building. |
| * Quick Start:: The easier procedure for non-experts. |
| * Complete Installation:: For experts, or those who want to be: the details. |
| * Distributing Binaries:: If you plan on distributing your @code{g77}. |
| @end menu |
| |
| @node Prerequisites |
| @section Prerequisites |
| @cindex prerequisites |
| |
| @ifset EGCS-G77 |
| For @code{egcs} users, this information is |
| superceded by the @code{egcs} installation instructions. |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| The procedures described to unpack, configure, build, and |
| install @code{g77} assume your system has certain programs |
| already installed. |
| |
| The following prerequisites should be met by your |
| system before you follow the @code{g77} installation instructions: |
| |
| @table @asis |
| @item @code{gzip} and @code{tar} |
| To unpack the @code{gcc} and @code{g77} distributions, |
| you'll need the @code{gunzip} utility in the @code{gzip} |
| distribution. |
| Most UNIX systems already have @code{gzip} installed. |
| If yours doesn't, you can get it from the FSF. |
| |
| Note that you'll need @code{tar} and other utilities |
| as well, but all UNIX systems have these. |
| There are GNU versions of all these available---in fact, |
| a complete GNU UNIX system can be put together on |
| most systems, if desired. |
| |
| The version of GNU @code{gzip} used to package this release |
| is @value{version-gzip}. |
| (The version of GNU @code{tar} used to package this release |
| is @value{version-tar}.) |
| |
| @item @file{gcc-@value{version-gcc}.tar.gz} |
| You need to have this, or some other applicable, version |
| of @code{gcc} on your system. |
| The version should be an exact copy of a distribution |
| from the FSF. |
| Its size is approximately 8.4MB. |
| |
| If you've already unpacked @file{gcc-@value{version-gcc}.tar.gz} into a |
| directory (named @file{gcc-@value{version-gcc}}) called the @dfn{source tree} |
| for @code{gcc}, you can delete the distribution |
| itself, but you'll need to remember to skip any instructions to unpack |
| this distribution. |
| |
| Without an applicable @code{gcc} source tree, you cannot |
| build @code{g77}. |
| You can obtain an FSF distribution of @code{gcc} from the FSF. |
| |
| @item @file{g77-@value{version-g77}.tar.gz} |
| You probably have already unpacked this package, |
| or you are reading an advance copy of these installation instructions, |
| which are contained in this distribution. |
| The size of this package is approximately 1.4MB. |
| |
| You can obtain an FSF distribution of @code{g77} from the FSF, |
| the same way you obtained @code{gcc}. |
| |
| @item Enough disk space |
| The amount of disk space needed to unpack, build, install, |
| and use @code{g77} depends on the type of system you're |
| using, how you build @code{g77}, and how much of it you |
| install (primarily, which languages you install). |
| |
| The sizes shown below assume all languages distributed in |
| @c As of `Version 2.249', texinfo.tex loses on a construction like |
| @c @code{...@value{...-...}...} since the hyphen is expanded as |
| @c -@discretionary{}{}{}, even though @value resets its catcode. |
| @c Fortunately this is currently the only instance. Kluge, kluge. |
| @iftex |
| @begingroup @let@codedash=@realdash |
| @end iftex |
| @code{gcc-@value{version-gcc}}, |
| @iftex |
| @endgroup |
| @end iftex |
| plus @code{g77}, will be built and installed. |
| These sizes are indicative of GNU/Linux systems on |
| Intel x86 running COFF and on Digital Alpha (AXP) systems |
| running ELF. |
| These should be fairly representative of 32-bit and 64-bit |
| systems, respectively. |
| |
| Note that all sizes are approximate and subject to change without |
| notice! |
| They are based on preliminary releases of g77 made shortly |
| before the public beta release. |
| |
| @itemize --- |
| @item |
| @code{gcc} and @code{g77} distributions occupy 10MB |
| packed, 40MB unpacked. |
| These consist of the source code and documentation, |
| plus some derived files (mostly documentation), for |
| @code{gcc} and @code{g77}. |
| Any deviations from these numbers for different |
| kinds of systems are likely to be very minor. |
| |
| @item |
| A ``bootstrap'' build requires an additional 91MB |
| for a total of 132MB on an ix86, and an additional |
| 136MB for a total of 177MB on an Alpha. |
| |
| @item |
| Removing @file{gcc/stage1} after the build recovers |
| 13MB for a total of 119MB on an ix86, and recovers |
| 21MB for a total of 155MB on an Alpha. |
| |
| After doing this, the integrity of the build can |
| still be verified via @samp{make compare}, and the |
| @code{gcc} compiler modified and used to build itself for |
| testing fairly quickly, using the copy of the compiler |
| kept in @code{gcc/stage2}. |
| |
| @item |
| Removing @file{gcc/stage2} after the build further |
| recovers 39MB for a total of 80MB, and recovers |
| 57MB for a total of 98MB on an Alpha. |
| |
| After doing this, the compiler can still be installed, |
| especially if GNU @code{make} is used to avoid |
| gratuitous rebuilds (or, the installation can be done |
| by hand). |
| |
| @item |
| Installing @code{gcc} and @code{g77} copies |
| 23MB onto the @samp{--prefix} disk for a total of 103MB |
| on an ix86, and copies 31MB onto the @samp{--prefix} |
| disk for a total of 130MB on an Alpha. |
| @end itemize |
| |
| After installation, if no further modifications and |
| builds of @code{gcc} or @code{g77} are planned, the |
| source and build directory may be removed, leaving |
| the total impact on a system's disk storage as |
| that of the amount copied during installation. |
| |
| Systems with the appropriate version of @code{gcc} |
| installed don't require the complete |
| bootstrap build. |
| Doing a ``straight build'' requires about as much |
| space as does a bootstrap build followed by removing |
| both the @file{gcc/stage1} and @file{gcc/stage2} |
| directories. |
| |
| Installing @code{gcc} and @code{g77} over existing |
| versions might require less @emph{new} disk space, |
| but note that, unlike many products, @code{gcc} |
| installs itself in a way that avoids overwriting other |
| installed versions of itself, so that other versions may |
| easily be invoked (via @samp{gcc -V @var{version}}). |
| |
| So, the amount of space saved as a result of having |
| an existing version of @code{gcc} and @code{g77} |
| already installed is not much---typically only the |
| command drivers (@code{gcc}, @code{g77}, @code{g++}, |
| and so on, which are small) and the documentation |
| is overwritten by the new installation. |
| The rest of the new installation is done without |
| replacing existing installed versions (assuming |
| they have different version numbers). |
| |
| @item @code{make} |
| Your system must have @code{make}, and you will probably save |
| yourself a lot of trouble if it is GNU @code{make} (sometimes |
| referred to as @code{gmake}). |
| In particular, you probably need GNU @code{make} |
| to build outside the source directory |
| (with @code{configure}'s @samp{--srcdir} option.) |
| |
| The version of GNU @code{make} used to develop this release |
| is @value{version-make}. |
| |
| @item @code{cc} |
| Your system must have a working C compiler. |
| If it doesn't, you might be able to obtain |
| a prebuilt binary of some version of @code{gcc} |
| from the network or on CD-ROM, |
| perhaps from the FSF@. |
| The best source of information about binaries |
| is probably a system-specific Usenet news group, |
| initially via its FAQ. |
| |
| @xref{Installation,,Installing GNU CC,gcc,Using and Porting GNU CC}, |
| for more information on prerequisites for installing @code{gcc}. |
| |
| @item @code{sed} |
| All UNIX systems have @code{sed}, but some have a broken |
| version that cannot handle configuring, building, or |
| installing @code{gcc} or @code{g77}. |
| |
| The version of GNU @code{sed} used to develop this release |
| is @value{version-sed}. |
| (Note that GNU @code{sed} version 3.0 was withdrawn by the |
| FSF---if you happen to have this version installed, replace |
| it with version @value{version-sed} immediately. |
| See a GNU distribution site for further explanation.) |
| |
| @item @code{root} access or equivalent |
| To perform the complete installation procedures on a system, |
| you need to have @code{root} access to that system, or |
| equivalent access to the @samp{--prefix} directory tree |
| specified on the @code{configure} command line. |
| |
| Portions of the procedure (such as configuring and building |
| @code{g77}) can be performed by any user with enough disk |
| space and virtual memory. |
| |
| However, these instructions are oriented towards less-experienced |
| users who want to install @code{g77} on their own personal |
| systems. |
| |
| System administrators with more experience will want to |
| determine for themselves how they want to modify the |
| procedures described below to suit the needs of their |
| installation. |
| |
| @item @code{autoconf} |
| The version of GNU @code{autoconf} used to develop this release |
| is @value{version-autoconf}. |
| |
| @code{autoconf} is not needed in the typical case of |
| installing @code{gcc} and @code{g77}. |
| @xref{Missing tools?}, for information on when it |
| might be needed and how to work around not having it. |
| |
| @item @code{bison} |
| The version of GNU @code{bison} used to develop this release |
| is @value{version-bison}. |
| |
| @code{bison} is not needed in the typical case of |
| installing @code{gcc} and @code{g77}. |
| @xref{Missing tools?}, for information on when it |
| might be needed and how to work around not having it. |
| |
| @item @code{gperf} |
| The version of GNU @code{gperf} used to develop this release |
| is @value{version-gperf}. |
| |
| @code{gperf} is not needed in the typical case of |
| installing @code{gcc} and @code{g77}. |
| @xref{Missing tools?}, for information on when it |
| might be needed and how to work around not having it. |
| |
| @item @code{makeinfo} |
| The version of GNU @code{makeinfo} used to develop this release |
| is @value{version-makeinfo}. |
| |
| @code{makeinfo} is part of the GNU @code{texinfo} package; |
| @code{makeinfo} version @value{version-makeinfo} |
| is distributed as part of |
| GNU @code{texinfo} version @value{version-texinfo}. |
| |
| @code{makeinfo} is not needed in the typical case of |
| installing @code{gcc} and @code{g77}. |
| @xref{Missing tools?}, for information on when it |
| might be needed and how to work around not having it. |
| |
| An up-to-date version of GNU @code{makeinfo} is still convenient |
| when obtaining a new version of a GNU distribution such as |
| @code{gcc} or @code{g77}, |
| as it allows you to obtain the @file{.diff.gz} file |
| instead of the entire @file{.tar.gz} distribution |
| (assuming you have installed @code{patch}). |
| |
| @item @code{patch} |
| The version of GNU @code{patch} used to develop this release |
| is @value{version-patch}. |
| |
| Beginning with @code{g77} version 0.5.23, it is no longer |
| necessary to patch the @code{gcc} back end to build @code{g77}. |
| |
| An up-to-date version of GNU @code{patch} is still convenient |
| when obtaining a new version of a GNU distribution such as |
| @code{gcc} or @code{g77}, |
| as it allows you to obtain the @file{.diff.gz} file |
| instead of the entire @file{.tar.gz} distribution |
| (assuming you have installed the tools needed |
| to rebuild derived files, such as @code{makeinfo}). |
| @end table |
| |
| @end ifclear |
| |
| @node Problems Installing |
| @section Problems Installing |
| @cindex problems installing |
| @cindex installation problems |
| |
| This is a list of problems (and some apparent problems which don't |
| really mean anything is wrong) that show up when configuring, |
| building, installing, or porting GNU Fortran. |
| |
| @xref{Installation Problems,,,gcc,Using and Porting GNU CC}, |
| for more information on installation problems that can afflict |
| either @code{gcc} or @code{g77}. |
| |
| @menu |
| * General Problems:: Problems afflicting most or all systems. |
| * System-specific Problems:: Problems afflicting particular systems. |
| * Cross-compiler Problems:: Problems afflicting cross-compilation setups. |
| @end menu |
| |
| @node General Problems |
| @subsection General Problems |
| |
| These problems can occur on most or all systems. |
| |
| @menu |
| * GNU C Required:: Why even ANSI C is not enough. |
| * Patching GNU CC:: Why @code{gcc} needn't be patched. |
| * Building GNU CC Necessary:: Why you can't build @emph{just} Fortran. |
| * Missing strtoul or bsearch:: When linking @samp{f771} fails. |
| * Cleanup Kills Stage Directories:: For @code{g77} developers. |
| * LANGUAGES Macro Ignored:: Sometimes @samp{LANGUAGES} is ignored. |
| @end menu |
| |
| @node GNU C Required |
| @subsubsection GNU C Required |
| @cindex GNU C required |
| @cindex requirements, GNU C |
| |
| Compiling @code{g77} requires GNU C, not just ANSI C. |
| Fixing this wouldn't |
| be very hard (just tedious), but the code using GNU extensions to |
| the C language is expected to be rewritten for 0.6 anyway, |
| so there are no plans for an interim fix. |
| |
| This requirement does not mean you must already have @code{gcc} |
| installed to build @code{g77}. |
| As long as you have a working C compiler, you can use a |
| ``bootstrap'' build to automate the process of first building |
| @code{gcc} using the working C compiler you have, then building |
| @code{g77} and rebuilding @code{gcc} using that just-built @code{gcc}, |
| and so on. |
| |
| @node Patching GNU CC |
| @subsubsection Patching GNU CC |
| @cindex patch files |
| @cindex GBE |
| |
| @code{g77} no longer requires application of a patch file |
| to the @code{gcc} compiler tree. |
| In fact, no such patch file is distributed with @code{g77}. |
| This is as of version 0.5.23 |
| and @code{egcs} version 1.0. |
| |
| @node Building GNU CC Necessary |
| @subsubsection Building GNU CC Necessary |
| @cindex @code{gcc}, building |
| @cindex building gcc |
| |
| It should be possible to build the runtime without building @code{cc1} |
| and other non-Fortran items, but, for now, an easy way to do that |
| is not yet established. |
| |
| @node Missing strtoul or bsearch |
| @subsubsection Missing strtoul or bsearch |
| @cindex bsearch |
| @cindex _bsearch |
| @cindex strtoul |
| @cindex _strtoul |
| @cindex undefined reference (_bsearch) |
| @cindex undefined reference (_strtoul) |
| @cindex f771, linking error for |
| @cindex linking error for f771 |
| @cindex @code{ld}, error linking f771 |
| @cindex @code{ld}, can't find _bsearch |
| @cindex @code{ld}, can't find _strtoul |
| @cindex SunOS4 |
| |
| @ifset EGCS-G77 |
| This information does not apply to the |
| @code{egcs} version of @code{g77}. |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| On SunOS4 systems, linking the @code{f771} program used to |
| produce an error message concerning an undefined symbol named |
| @samp{_strtoul}, because the @samp{strtoul} library function |
| is not provided on that system. |
| |
| Other systems have, in the past, been reported to not provide |
| their own @samp{strtoul} or @samp{bsearch} function. |
| |
| Some versions @code{g77} tried to default to providing bare-bones |
| versions of @code{bsearch} and @code{strtoul} automatically, |
| but every attempt at this has failed for at least one kind of system. |
| |
| To limit the failures to those few systems actually missing the |
| required routines, the bare-bones versions are still provided, |
| in @file{@value{path-g77}/proj.c}, |
| if the appropriate macros are defined. |
| These are @code{NEED_BSEARCH} for @samp{bsearch} and |
| @code{NEED_STRTOUL} for @samp{NEED_STRTOUL}. |
| |
| Therefore, if you are sure your system is missing |
| @code{bsearch} or @code{strtoul} in its library, |
| define the relevant macro(s) before building @code{g77}. |
| This can be done by editing @file{@value{path-g77}/proj.c} and inserting |
| either or both of the following @samp{#define} statements |
| before the comment shown: |
| |
| @smallexample |
| /* Insert #define statements here. */ |
| |
| #define NEED_BSEARCH |
| #define NEED_STRTOUL |
| @end smallexample |
| |
| Then, continue configuring and building @code{g77} as usual. |
| |
| Or, you can define these on the @code{make} command line. |
| To build with the bundled @code{cc} on SunOS4, for example, try: |
| @smallexample |
| make bootstrap BOOT_CFLAGS='-O2 -g -DNEED_STRTOUL' |
| @end smallexample |
| |
| If you then encounter problems compiling @file{@value{path-g77}/proj.c}, |
| it might be due to a discrepancy between how @samp{bsearch} |
| or @samp{strtoul} are defined by that file and how they're |
| declared by your system's header files. |
| |
| In that case, you'll have to use some basic knowledge of C |
| to work around the problem, perhaps by editing @file{@value{path-g77}/proj.c} |
| somewhat. |
| |
| @end ifclear |
| |
| @node Cleanup Kills Stage Directories |
| @subsubsection Cleanup Kills Stage Directories |
| @cindex stage directories |
| @cindex make clean |
| |
| It'd be helpful if @code{g77}'s @file{Makefile.in} or @file{Make-lang.in} |
| would create the various @file{stage@var{n}} directories and their |
| subdirectories, so developers and expert installers wouldn't have to |
| reconfigure after cleaning up. |
| |
| That help has arrived as of version 0.5.23 of @code{g77} |
| and version 1.1 of @code{egcs}. |
| Configuration itself no longer creates any particular directories |
| that are unique to @code{g77}. |
| The build procedures in @file{Make-lang.in} take care of |
| that, on demand. |
| |
| @node LANGUAGES Macro Ignored |
| @subsubsection LANGUAGES Macro Ignored |
| @cindex @samp{LANGUAGES} macro ignored |
| @cindex ignoring @samp{LANGUAGES} macro |
| |
| Prior to version 0.5.23 of @code{g77} |
| and version 1.1 of @code{egcs}, |
| @code{g77} would sometimes ignore |
| the absence of @samp{f77} and @samp{F77} in the |
| @samp{LANGUAGES} macro definition used for the |
| @code{make} command being processed. |
| |
| As of @code{g77} version 0.5.23 |
| and @code{egcs} version 1.1, |
| @code{g77} now obeys this macro |
| in all relevant situations. |
| |
| However, in versions of @code{gcc} through 2.8.1, |
| non-@code{g77} portions of @code{gcc}, |
| such as @code{g++}, |
| are known to go ahead and perform various |
| language-specific activities when their |
| respective language strings do not appear |
| in the @samp{LANGUAGES} macro in effect |
| during that invocation of @code{make}. |
| |
| It is expected that these remaining problems will |
| be fixed in a future version of @code{gcc}. |
| |
| @node System-specific Problems |
| @subsection System-specific Problems |
| |
| @cindex AIX |
| A linker bug on some versions of AIX 4.1 might prevent building |
| when @code{g77} is built within @code{gcc}. |
| It might also occur when building within @code{egcs}. |
| @ifset DOC-G77 |
| @xref{LINKFAIL}. |
| @end ifset |
| |
| @node Cross-compiler Problems |
| @subsection Cross-compiler Problems |
| @cindex cross-compiler, problems |
| |
| @code{g77} has been in alpha testing since September of |
| 1992, and in public beta testing since February of 1995. |
| Alpha testing was done by a small number of people worldwide on a fairly |
| wide variety of machines, involving self-compilation in most or |
| all cases. |
| Beta testing has been done primarily via self-compilation, |
| but in more and more cases, cross-compilation (and ``criss-cross |
| compilation'', where a version of a compiler is built on one machine |
| to run on a second and generate code that runs on a third) has |
| been tried and has succeeded, to varying extents. |
| |
| Generally, @code{g77} can be ported to any configuration to which |
| @code{gcc}, @code{f2c}, and @code{libf2c} can be ported and made |
| to work together, aside from the known problems described in this |
| manual. |
| If you want to port @code{g77} to a particular configuration, |
| you should first make sure @code{gcc} and @code{libf2c} can be |
| ported to that configuration before focusing on @code{g77}, because |
| @code{g77} is so dependent on them. |
| |
| Even for cases where @code{gcc} and @code{libf2c} work, |
| you might run into problems with cross-compilation on certain machines, |
| for several reasons. |
| |
| @itemize @bullet |
| @item |
| There is one known bug |
| (a design bug to be fixed in 0.6) that prevents configuration of |
| @code{g77} as a cross-compiler in some cases, |
| though there are assumptions made during |
| configuration that probably make doing non-self-hosting builds |
| a hassle, requiring manual intervention. |
| |
| @item |
| @code{gcc} might still have some trouble being configured |
| for certain combinations of machines. |
| For example, it might not know how to handle floating-point |
| constants. |
| |
| @item |
| Improvements to the way @code{libg2c} is built could make |
| building @code{g77} as a cross-compiler easier---for example, |
| passing and using @samp{$(LD)} and @samp{$(AR)} in the appropriate |
| ways. |
| (This is improved in the @code{egcs} version of @code{g77}, |
| especially as of version 1.1.) |
| |
| @item |
| There are still some challenges putting together the right |
| run-time libraries (needed by @code{libg2c}) for a target |
| system, depending on the systems involved in the configuration. |
| (This is a general problem with cross-compilation, and with |
| @code{gcc} in particular.) |
| @end itemize |
| |
| @node Settings |
| @section Changing Settings Before Building |
| |
| Here are some internal @code{g77} settings that can be changed |
| by editing source files in @file{@value{path-g77}/} before building. |
| |
| This information, and perhaps even these settings, represent |
| stop-gap solutions to problems people doing various ports |
| of @code{g77} have encountered. |
| As such, none of the following information is expected to |
| be pertinent in future versions of @code{g77}. |
| |
| @menu |
| * Larger File Unit Numbers:: Raising @samp{MXUNIT}. |
| * Always Flush Output:: Synchronizing write errors. |
| * Maximum Stackable Size:: Large arrays forced off the stack. |
| * Floating-point Bit Patterns:: Possible programs building @code{g77} |
| as a cross-compiler. |
| * Large Initialization:: Large arrays with @code{DATA} |
| initialization. |
| * Alpha Problems Fixed:: Problems with 64-bit systems like |
| Alphas now fixed? |
| @end menu |
| |
| @node Larger File Unit Numbers |
| @subsection Larger File Unit Numbers |
| @cindex MXUNIT |
| @cindex unit numbers |
| @cindex maximum unit number |
| @cindex illegal unit number |
| @cindex increasing maximum unit number |
| |
| As distributed, whether as part of @code{f2c} or @code{g77}, |
| @code{libf2c} accepts file unit numbers only in the range |
| 0 through 99. |
| For example, a statement such as @samp{WRITE (UNIT=100)} causes |
| a run-time crash in @code{libf2c}, because the unit number, |
| 100, is out of range. |
| |
| If you know that Fortran programs at your installation require |
| the use of unit numbers higher than 99, you can change the |
| value of the @samp{MXUNIT} macro, which represents the maximum unit |
| number, to an appropriately higher value. |
| |
| To do this, edit the file @file{@value{path-libf2c}/libI77/fio.h} in your |
| @code{g77} source tree, changing the following line: |
| |
| @example |
| #define MXUNIT 100 |
| @end example |
| |
| Change the line so that the value of @samp{MXUNIT} is defined to be |
| at least one @emph{greater} than the maximum unit number used by |
| the Fortran programs on your system. |
| |
| (For example, a program that does @samp{WRITE (UNIT=255)} would require |
| @samp{MXUNIT} set to at least 256 to avoid crashing.) |
| |
| Then build or rebuild @code{g77} as appropriate. |
| |
| @emph{Note:} Changing this macro has @emph{no} effect on other limits |
| your system might place on the number of files open at the same time. |
| That is, the macro might allow a program to do @samp{WRITE (UNIT=100)}, |
| but the library and operating system underlying @code{libf2c} might |
| disallow it if many other files have already been opened (via @code{OPEN} or |
| implicitly via @code{READ}, @code{WRITE}, and so on). |
| Information on how to increase these other limits should be found |
| in your system's documentation. |
| |
| @node Always Flush Output |
| @subsection Always Flush Output |
| @cindex ALWAYS_FLUSH |
| @cindex synchronous write errors |
| @cindex disk full |
| @cindex flushing output |
| @cindex fflush() |
| @cindex I/O, flushing |
| @cindex output, flushing |
| @cindex writes, flushing |
| @cindex NFS |
| @cindex network file system |
| |
| Some Fortran programs require output |
| (writes) to be flushed to the operating system (under UNIX, |
| via the @code{fflush()} library call) so that errors, |
| such as disk full, are immediately flagged via the relevant |
| @code{ERR=} and @code{IOSTAT=} mechanism, instead of such |
| errors being flagged later as subsequent writes occur, forcing |
| the previously written data to disk, or when the file is |
| closed. |
| |
| Essentially, the difference can be viewed as synchronous error |
| reporting (immediate flagging of errors during writes) versus |
| asynchronous, or, more precisely, buffered error reporting |
| (detection of errors might be delayed). |
| |
| @code{libg2c} supports flagging write errors immediately when |
| it is built with the @samp{ALWAYS_FLUSH} macro defined. |
| This results in a @code{libg2c} that runs slower, sometimes |
| quite a bit slower, under certain circumstances---for example, |
| accessing files via the networked file system NFS---but the |
| effect can be more reliable, robust file I/O. |
| |
| If you know that Fortran programs requiring this level of precision |
| of error reporting are to be compiled using the |
| version of @code{g77} you are building, you might wish to |
| modify the @code{g77} source tree so that the version of |
| @code{libg2c} is built with the @samp{ALWAYS_FLUSH} macro |
| defined, enabling this behavior. |
| |
| To do this, find this line in @file{@value{path-libf2c}/f2c.h} in |
| your @code{g77} source tree: |
| |
| @example |
| /* #define ALWAYS_FLUSH */ |
| @end example |
| |
| Remove the leading @samp{/*@w{ }}, |
| so the line begins with @samp{#define}, |
| and the trailing @samp{@w{ }*/}. |
| |
| Then build or rebuild @code{g77} as appropriate. |
| |
| @node Maximum Stackable Size |
| @subsection Maximum Stackable Size |
| @vindex FFECOM_sizeMAXSTACKITEM |
| @cindex code, stack variables |
| @cindex maximum stackable size |
| @cindex stack, allocation |
| @cindex segmentation violation |
| @code{g77}, on most machines, puts many variables and arrays on the stack |
| where possible, and can be configured (by changing |
| @samp{FFECOM_sizeMAXSTACKITEM} in @file{@value{path-g77}/com.c}) to force |
| smaller-sized entities into static storage (saving |
| on stack space) or permit larger-sized entities to be put on the |
| stack (which can improve run-time performance, as it presents |
| more opportunities for the GBE to optimize the generated code). |
| |
| @emph{Note:} Putting more variables and arrays on the stack |
| might cause problems due to system-dependent limits on stack size. |
| Also, the value of @samp{FFECOM_sizeMAXSTACKITEM} has no |
| effect on automatic variables and arrays. |
| @xref{But-bugs}, for more information. |
| |
| @node Floating-point Bit Patterns |
| @subsection Floating-point Bit Patterns |
| |
| @cindex cross-compiler, building |
| @cindex floating-point bit patterns |
| @cindex bit patterns |
| The @code{g77} build will crash if an attempt is made to build |
| it as a cross-compiler |
| for a target when @code{g77} cannot reliably determine the bit pattern of |
| floating-point constants for the target. |
| Planned improvements for version 0.6 of @code{g77} |
| will give it the capabilities it needs to not have to crash the build |
| but rather generate correct code for the target. |
| (Currently, @code{g77} |
| would generate bad code under such circumstances if it didn't crash |
| during the build, e.g. when compiling a source file that does |
| something like @samp{EQUIVALENCE (I,R)} and @samp{DATA R/9.43578/}.) |
| |
| @node Large Initialization |
| @subsection Initialization of Large Aggregate Areas |
| |
| @cindex speed, of compiler |
| @cindex slow compiler |
| @cindex memory utilization |
| @cindex large initialization |
| @cindex aggregate initialization |
| A warning message is issued when @code{g77} sees code that provides |
| initial values (e.g. via @code{DATA}) to an aggregate area (@code{COMMON} |
| or @code{EQUIVALENCE}, or even a large enough array or @code{CHARACTER} |
| variable) |
| that is large enough to increase @code{g77}'s compile time by roughly |
| a factor of 10. |
| |
| This size currently is quite small, since @code{g77} |
| currently has a known bug requiring too much memory |
| and time to handle such cases. |
| In @file{@value{path-g77}/data.c}, the macro |
| @samp{FFEDATA_sizeTOO_BIG_INIT_} is defined |
| to the minimum size for the warning to appear. |
| The size is specified in storage units, |
| which can be bytes, words, or whatever, on a case-by-case basis. |
| |
| After changing this macro definition, you must |
| (of course) rebuild and reinstall @code{g77} for |
| the change to take effect. |
| |
| Note that, as of version 0.5.18, improvements have |
| reduced the scope of the problem for @emph{sparse} |
| initialization of large arrays, especially those |
| with large, contiguous uninitialized areas. |
| However, the warning is issued at a point prior to |
| when @code{g77} knows whether the initialization is sparse, |
| and delaying the warning could mean it is produced |
| too late to be helpful. |
| |
| Therefore, the macro definition should not be adjusted to |
| reflect sparse cases. |
| Instead, adjust it to generate the warning when densely |
| initialized arrays begin to cause responses noticeably slower |
| than linear performance would suggest. |
| |
| @node Alpha Problems Fixed |
| @subsection Alpha Problems Fixed |
| |
| @cindex Alpha, support |
| @cindex 64-bit systems |
| @code{g77} used to warn when it was used to compile Fortran code |
| for a target configuration that is not basically a 32-bit |
| machine (such as an Alpha, which is a 64-bit machine, especially |
| if it has a 64-bit operating system running on it). |
| That was because @code{g77} was known to not work |
| properly on such configurations. |
| |
| As of version 0.5.20, @code{g77} is believed to work well |
| enough on such systems. |
| So, the warning is no longer needed or provided. |
| |
| However, support for 64-bit systems, especially in |
| areas such as cross-compilation and handling of |
| intrinsics, is still incomplete. |
| The symptoms |
| are believed to be compile-time diagnostics rather |
| than the generation of bad code. |
| It is hoped that version 0.6 will completely support 64-bit |
| systems. |
| |
| @node Quick Start |
| @section Quick Start |
| @cindex quick start |
| |
| @ifset EGCS-G77 |
| For @code{egcs} users, this information is |
| superceded by the @code{egcs} installation instructions. |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| This procedure configures, builds, and installs @code{g77} |
| ``out of the box'' and works on most UNIX systems. |
| Each command is identified by a unique number, |
| used in the explanatory text that follows. |
| For the most part, the output of each command is not shown, |
| though indications of the types of responses are given in a |
| few cases. |
| |
| To perform this procedure, the installer must be logged |
| in as user @code{root}. |
| Much of it can be done while not logged in as @code{root}, |
| and users experienced with UNIX administration should be |
| able to modify the procedure properly to do so. |
| |
| Following traditional UNIX conventions, it is assumed that |
| the source trees for @code{g77} and @code{gcc} will be |
| placed in @file{/usr/src}. |
| It also is assumed that the source distributions themselves |
| already reside in @file{/usr/FSF}, a naming convention |
| used by the author of @code{g77} on his own system: |
| |
| @example |
| /usr/FSF/gcc-@value{version-gcc}.tar.gz |
| /usr/FSF/g77-@value{version-g77}.tar.gz |
| @end example |
| |
| @c (You can use @file{gcc-2.7.2.1.tar.gz} instead, or |
| @c the equivalent of it obtained by applying the |
| @c patch distributed as @file{gcc-2.7.2-2.7.2.1.diff.gz} |
| @c to version 2.7.2 of @code{gcc}, |
| @c if you remember to make the appropriate adjustments in the |
| @c instructions below.) |
| |
| @c @cindex SunOS4 |
| @c Users of the following systems should not blindly follow |
| @c these quick-start instructions, because of problems their |
| @c systems have coping with straightforward installation of |
| @c @code{g77}: |
| @c |
| @c @itemize @bullet |
| @c @item |
| @c SunOS4 |
| @c @end itemize |
| @c |
| @c Instead, see @ref{Complete Installation}, for detailed information |
| @c on how to configure, build, and install @code{g77} for your |
| @c particular system. |
| @c Also, see @ref{Trouble,,Known Causes of Trouble with GNU Fortran}, |
| @c for information on bugs and other problems known to afflict the |
| @c installation process, and how to report newly discovered ones. |
| @c |
| @c If your system is @emph{not} on the above list, and @emph{is} |
| @c a UNIX system or one of its variants, you should be able to |
| @c follow the instructions below. |
| |
| If you vary @emph{any} of the steps below, you might run into |
| trouble, including possibly breaking existing programs for |
| other users of your system. |
| Before doing so, it is wise to review the explanations of some |
| of the steps. |
| These explanations follow this list of steps. |
| |
| @example |
| sh[ 1]# @kbd{cd /usr/src} |
| @set source-dir 1 |
| sh[ 2]# @kbd{gunzip -c < /usr/FSF/gcc-@value{version-gcc}.tar.gz | tar xf -} |
| [Might say "Broken pipe"...that is normal on some systems.] |
| @set unpack-gcc 2 |
| sh[ 3]# @kbd{gunzip -c < /usr/FSF/g77-@value{version-g77}.tar.gz | tar xf -} |
| ["Broken pipe" again possible.] |
| @set unpack-g77 3 |
| sh[ 4]# @kbd{ln -s gcc-@value{version-gcc} gcc} |
| @set link-gcc 4 |
| sh[ 5]# @kbd{ln -s g77-@value{version-g77} g77} |
| @set link-g77 5 |
| sh[ 6]# @kbd{mv -i g77/* gcc} |
| [No questions should be asked by mv here; or, you made a mistake.] |
| @set merge-g77 6 |
| sh[ 7]# @kbd{cd gcc} |
| sh[ 8]# @kbd{./configure --prefix=/usr} |
| [Do not do the above if gcc is not installed in /usr/bin. |
| You might need a different @kbd{--prefix=@dots{}}, as |
| described below.] |
| @set configure-gcc 8 |
| sh[ 9]# @kbd{make bootstrap} |
| [This takes a long time, and is where most problems occur.] |
| @set build-gcc 9 |
| sh[10]# @kbd{make compare} |
| [This verifies that the compiler is `sane'. |
| If any files are printed, you have likely found a g77 bug.] |
| @set compare-gcc 10 |
| sh[11]# @kbd{rm -fr stage1} |
| @set rm-stage1 11 |
| sh[12]# @kbd{make -k install} |
| [The actual installation.] |
| @set install-g77 12 |
| sh[13]# @kbd{g77 -v} |
| [Verify that g77 is installed, obtain version info.] |
| @set show-version 13 |
| sh[14]# |
| @set end-procedure 14 |
| @end example |
| |
| @xref{Updating Documentation,,Updating Your Info Directory}, for |
| information on how to update your system's top-level @code{info} |
| directory to contain a reference to this manual, so that |
| users of @code{g77} can easily find documentation instead |
| of having to ask you for it. |
| |
| Elaborations of many of the above steps follows: |
| |
| @table @asis |
| @item Step @value{source-dir}: @kbd{cd /usr/src} |
| You can build @code{g77} pretty much anyplace. |
| By convention, this manual assumes @file{/usr/src}. |
| It might be helpful if other users on your system |
| knew where to look for the source code for the |
| installed version of @code{g77} and @code{gcc} in any case. |
| |
| @c @item Step @value{unpack-gcc}: @kbd{gunzip -d @dots{}} |
| @c Here, you might wish to use @file{gcc-2.7.2.1.tar.gz} |
| @c instead, or apply @file{gcc-2.7.2-2.7.2.1.diff.gz} to achieve |
| @c similar results. |
| |
| @item Step @value{unpack-g77}: @kbd{gunzip -d < /usr/FSF/g77-@value{version-g77}.tar.gz | tar xf -} |
| It is not always necessary to obtain the latest version of |
| @code{g77} as a complete @file{.tar.gz} file if you have |
| a complete, earlier distribution of @code{g77}. |
| If appropriate, you can unpack that earlier |
| version of @code{g77}, and then apply the appropriate patches |
| to achieve the same result---a source tree containing version |
| @value{version-g77} of @code{g77}. |
| |
| @item Step @value{link-gcc}: @kbd{ln -s gcc-@value{version-gcc} gcc} |
| @item Step @value{link-g77}: @kbd{ln -s g77-@value{version-g77} g77} |
| These commands mainly help reduce typing, |
| and help reduce visual clutter in examples |
| in this manual showing what to type to install @code{g77}. |
| |
| @c Of course, if appropriate, @kbd{ln -s gcc-2.7.2.1 gcc} or |
| @c similar. |
| |
| @xref{Unpacking}, for information on |
| using distributions of @code{g77} made by organizations |
| other than the FSF. |
| |
| @item Step @value{merge-g77}: @kbd{mv -i g77/* gcc} |
| After doing this, you can, if you like, type |
| @samp{rm g77} and @samp{rmdir g77-@value{version-g77}} to remove |
| the empty directory and the symbol link to it. |
| But, it might be helpful to leave them around as |
| quick reminders of which version(s) of @code{g77} are |
| installed on your system. |
| |
| @xref{Unpacking}, for information |
| on the contents of the @file{g77} directory (as merged |
| into the @file{gcc} directory). |
| |
| @item Step @value{configure-gcc}: @kbd{./configure --prefix=/usr} |
| This is where you specify that |
| the @file{g77} and @file{gcc} executables are to be |
| installed in @file{/usr/bin/}, |
| the @code{g77} and @code{gcc} documentation is |
| to be installed in @file{/usr/info/} and @file{/usr/man/}, |
| and so on. |
| |
| You should ensure that any existing installation of the @file{gcc} |
| executable is in @file{/usr/bin/}. |
| |
| However, if that existing version of @code{gcc} is not @value{version-gcc}, |
| or if you simply wish to avoid risking overwriting it with a |
| newly built copy of the same version, |
| you can specify @samp{--prefix=/usr/local} |
| (which is the default) |
| or some other path, |
| and invoke the newly installed version |
| directly from that path's @file{bin} directory. |
| |
| @xref{Where to Install,,Where in the World Does Fortran (and GNU CC) Go?}, |
| for more information on determining where to install @code{g77}. |
| @xref{Configuring gcc}, for more information on the |
| configuration process triggered by invoking the @file{./configure} |
| script. |
| |
| @item Step @value{build-gcc}: @kbd{make bootstrap} |
| @xref{Installation,,Installing GNU CC, |
| gcc,Using and Porting GNU CC}, for information |
| on the kinds of diagnostics you should expect during |
| this procedure. |
| |
| @xref{Building gcc}, for complete @code{g77}-specific |
| information on this step. |
| |
| @item Step @value{compare-gcc}: @kbd{make compare} |
| @xref{Bug Lists,,Where to Port Bugs}, for information |
| on where to report that you observed files |
| having different contents during this |
| phase. |
| |
| @xref{Bug Reporting,,How to Report Bugs}, for |
| information on @emph{how} to report bugs like this. |
| |
| @item Step @value{rm-stage1}: @kbd{rm -fr stage1} |
| You don't need to do this, but it frees up disk space. |
| |
| @item Step @value{install-g77}: @kbd{make -k install} |
| If this doesn't seem to work, try: |
| |
| @example |
| make -k install install-libf77 |
| @end example |
| |
| Or, make sure you're using GNU @code{make}. |
| |
| @xref{Installation of Binaries}, for more information. |
| |
| @xref{Updating Documentation,,Updating Your Info Directory}, |
| for information on entering this manual into your |
| system's list of texinfo manuals. |
| |
| @item Step @value{show-version}: @kbd{g77 -v} |
| If this command prints approximately 25 lines of output, |
| including the GNU Fortran Front End version number (which |
| should be the same as the version number for the version |
| of @code{g77} you just built and installed) and the |
| version numbers for the three parts of the @code{libf2c} |
| library (@code{libF77}, @code{libI77}, @code{libU77}), and |
| those version numbers are all in agreement, then there is |
| a high likelihood that the installation has been successfully |
| completed. |
| |
| You might consider doing further testing. |
| For example, log in as a non-privileged user, then create |
| a small Fortran program, such as: |
| |
| @example |
| PROGRAM SMTEST |
| DO 10 I=1, 10 |
| PRINT *, 'Hello World #', I |
| 10 CONTINUE |
| END |
| @end example |
| |
| Compile, link, and run the above program, and, assuming you named |
| the source file @file{smtest.f}, the session should look like this: |
| |
| @example |
| sh# @kbd{g77 -o smtest smtest.f} |
| sh# @kbd{./smtest} |
| Hello World # 1 |
| Hello World # 2 |
| Hello World # 3 |
| Hello World # 4 |
| Hello World # 5 |
| Hello World # 6 |
| Hello World # 7 |
| Hello World # 8 |
| Hello World # 9 |
| Hello World # 10 |
| sh# |
| @end example |
| |
| If invoking @code{g77} doesn't seem to work, |
| the problem might be that you've installed it in |
| a location that is not in your shell's search path. |
| For example, if you specified @samp{--prefix=/gnu}, |
| and @file{/gnu/bin} is not in your @code{PATH} |
| environment variable, |
| you must explicitly specify the location of the compiler |
| via @kbd{/gnu/bin/g77 -o smtest smtest.f}. |
| |
| After proper installation, you don't |
| need to keep your gcc and g77 source and build directories |
| around anymore. |
| Removing them can free up a lot of disk space. |
| @end table |
| |
| @end ifclear |
| |
| @node Complete Installation |
| @section Complete Installation |
| |
| @ifset EGCS-G77 |
| For @code{egcs} users, this information is |
| superceded by the @code{egcs} installation instructions. |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| Here is the complete @code{g77}-specific information on how |
| to configure, build, and install @code{g77}. |
| |
| @menu |
| * Unpacking:: |
| * Merging Distributions:: |
| * Where to Install:: |
| * Configuring gcc:: |
| * Building gcc:: |
| * Pre-installation Checks:: |
| * Installation of Binaries:: |
| * Updating Documentation:: |
| * Missing tools?:: |
| @end menu |
| |
| @node Unpacking |
| @subsection Unpacking |
| @cindex unpacking distributions |
| @cindex distributions, unpacking |
| @cindex code, source |
| @cindex source code |
| @cindex source tree |
| @cindex packages |
| |
| The @code{gcc} source distribution is a stand-alone distribution. |
| It is designed to be unpacked (producing the @code{gcc} |
| source tree) and built as is, assuming certain |
| prerequisites are met (including the availability of compatible |
| UNIX programs such as @code{make}, @code{cc}, and so on). |
| |
| However, before building @code{gcc}, you will want to unpack |
| and merge the @code{g77} distribution in with it, so that you |
| build a Fortran-capable version of @code{gcc}, which includes |
| the @code{g77} command, the necessary run-time libraries, |
| and this manual. |
| |
| Unlike @code{gcc}, the @code{g77} source distribution |
| is @emph{not} a stand-alone distribution. |
| It is designed to be unpacked and, afterwards, immediately merged |
| into an applicable @code{gcc} source tree. |
| That is, the @code{g77} distribution @emph{augments} a |
| @code{gcc} distribution---without @code{gcc}, generally |
| only the documentation is immediately usable. |
| |
| A sequence of commands typically used to unpack @code{gcc} |
| and @code{g77} is: |
| |
| @example |
| sh# @kbd{cd /usr/src} |
| sh# @kbd{gunzip -c /usr/FSF/gcc-@value{version-gcc}.tar.gz | tar xf -} |
| sh# @kbd{gunzip -c /usr/FSF/g77-@value{version-g77}.tar.gz | tar xf -} |
| sh# @kbd{ln -s gcc-@value{version-gcc} gcc} |
| sh# @kbd{ln -s g77-@value{version-g77} g77} |
| sh# @kbd{mv -i g77/* gcc} |
| @end example |
| |
| @emph{Notes:} The commands beginning with @samp{gunzip@dots{}} might |
| print @samp{Broken pipe@dots{}} as they complete. |
| That is nothing to worry about, unless you actually |
| @emph{hear} a pipe breaking. |
| The @code{ln} commands are helpful in reducing typing |
| and clutter in installation examples in this manual. |
| Hereafter, the top level of @code{gcc} source tree is referred to |
| as @file{gcc}, and the top level of just the @code{g77} |
| source tree (prior to issuing the @code{mv} command, above) |
| is referred to as @file{g77}. |
| |
| There are three top-level names in a @code{g77} distribution: |
| |
| @example |
| g77/COPYING.g77 |
| g77/README.g77 |
| g77/f |
| @end example |
| |
| All three entries should be moved (or copied) into a @code{gcc} |
| source tree (typically named after its version number and |
| as it appears in the FSF distributions---e.g. @file{gcc-@value{version-gcc}}). |
| |
| @file{g77/f} is the subdirectory containing all of the |
| code, documentation, and other information that is specific |
| to @code{g77}. |
| The other two files exist to provide information on @code{g77} |
| to someone encountering a @code{gcc} source tree with @code{g77} |
| already present, who has not yet read these installation |
| instructions and thus needs help understanding that the |
| source tree they are looking at does not come from a single |
| FSF distribution. |
| They also help people encountering an unmerged @code{g77} source |
| tree for the first time. |
| |
| @cindex modifying @code{g77} |
| @cindex code, modifying |
| @cindex Pentium optimizations |
| @cindex optimization, for Pentium |
| @emph{Note:} Please use @strong{only} @code{gcc} and @code{g77} |
| source trees as distributed by the FSF. |
| Use of modified versions is likely to result in problems that appear to be |
| in the @code{g77} code but, in fact, are not. |
| Do not use such modified versions |
| unless you understand all the differences between them and the versions |
| the FSF distributes---in which case you should be able to modify the |
| @code{g77} (or @code{gcc}) source trees appropriately so @code{g77} |
| and @code{gcc} can coexist as they do in the stock FSF distributions. |
| |
| @node Merging Distributions |
| @subsection Merging Distributions |
| @cindex merging distributions |
| @cindex @code{gcc}, versions supported by @code{g77} |
| @cindex versions, of @code{gcc} |
| @cindex support, @code{gcc} versions |
| |
| After merging the @code{g77} source tree into the @code{gcc} source tree, |
| you have put together a complete @code{g77} source tree. |
| |
| @cindex @code{gcc}, version number |
| @cindex version number |
| @cindex @code{g77}, version number |
| @cindex GNU version numbering |
| As of version 0.5.23, @code{g77} no longer modifies |
| the version number of @code{gcc}, |
| nor does it patch @code{gcc} itself. |
| |
| @code{g77} still depends on being merged with an |
| appropriate version of @code{gcc}. |
| For version @value{version-g77} of @code{g77}, |
| the specific version of @code{gcc} supported is @value{version-gcc}. |
| |
| However, other versions of @code{gcc} might be suitable |
| ``hosts'' for this version of @code{g77}. |
| |
| GNU version numbers make it easy to figure out whether a |
| particular version of a distribution is newer or older than |
| some other version of that distribution. |
| The format is, |
| generally, @var{major}.@var{minor}.@var{patch}, with |
| each field being a decimal number. |
| (You can safely ignore |
| leading zeros; for example, 1.5.3 is the same as 1.5.03.) |
| The @var{major} field only increases with time. |
| The other two fields are reset to 0 when the field to |
| their left is incremented; otherwise, they, too, only |
| increase with time. |
| So, version 2.6.2 is newer than version 2.5.8, and |
| version 3.0 is newer than both. |
| (Trailing @samp{.0} fields often are omitted in |
| announcements and in names for distributions and |
| the directories they create.) |
| |
| If your version of @code{gcc} is older than the oldest version |
| supported by @code{g77} |
| (as casually determined by listing the contents of @file{@value{path-g77}/INSTALL/}, |
| which contains these installation instructions in plain-text format), |
| you should obtain a newer, supported version of @code{gcc}. |
| (You could instead obtain an older version of @code{g77}, |
| or try and get your @code{g77} to work with the old |
| @code{gcc}, but neither approach is recommended, and |
| you shouldn't bother reporting any bugs you find if you |
| take either approach, because they're probably already |
| fixed in the newer versions you're not using.) |
| |
| If your version of @code{gcc} is newer than the newest version |
| supported by @code{g77}, it is possible that your @code{g77} |
| will work with it anyway. |
| If the version number for @code{gcc} differs only in the |
| @var{patch} field, you might as well try that version of @code{gcc}. |
| Since it has the same @var{major} and @var{minor} fields, |
| the resulting combination is likely to work. |
| |
| So, for example, if a particular version of @code{g77} has support for |
| @code{gcc} versions 2.8.0 and 2.8.1, |
| it is likely that @file{gcc-2.8.2} would work well with @code{g77}. |
| |
| However, @file{gcc-2.9.0} would almost certainly |
| not work with that version of @code{g77} |
| without appropriate modifications, |
| so a new version of @code{g77} would be needed. |
| |
| @cindex distributions, why separate |
| @cindex separate distributions |
| @cindex why separate distributions |
| This complexity is the result of @code{gcc} and @code{g77} being |
| separate distributions. |
| By keeping them separate, each product is able to be independently |
| improved and distributed to its user base more frequently. |
| |
| However, the GBE interface defined by @code{gcc} typically |
| undergoes some incompatible changes at least every time the |
| @var{minor} field of the version number is incremented, |
| and such changes require corresponding changes to |
| the @code{g77} front end (FFE). |
| |
| @c @pindex config-lang.in |
| @c @emph{Note:} @code{g77}'s configuration file @file{@value{path-g77}/config-lang.in} |
| @c sometimes ensures that the source code for the version of @code{gcc} |
| @c being configured has at least one indication of being an appropriate |
| @c version as required specifically by @code{g77}. |
| @c This configuration-time |
| @c checking should catch failures to use the proper version of @code{gcc} and, |
| @c if so caught, should abort the configuration with an explanation. |
| @c @emph{Please} do not try to disable this check, |
| @c otherwise @code{g77} might well appear to build |
| @c and install correctly, and even appear to compile correctly, |
| @c but could easily produce broken code. |
| |
| @node Where to Install |
| @subsection Where in the World Does Fortran (and GNU CC) Go? |
| @cindex language f77 not recognized |
| @cindex @code{gcc}, will not compile Fortran programs |
| |
| Before configuring, you should make sure you know |
| where you want the @code{g77} and @code{gcc} |
| binaries to be installed after they're built, |
| because this information is given to the configuration |
| tool and used during the build itself. |
| |
| A @code{g77} installation normally includes installation of |
| a Fortran-aware version of @code{gcc}, so that the @code{gcc} |
| command recognizes Fortran source files and knows how to compile |
| them. |
| |
| For this to work, the version of @code{gcc} that you will be building |
| as part of @code{g77} @strong{must} be installed as the ``active'' |
| version of @code{gcc} on the system. |
| |
| Sometimes people make the mistake of installing @code{gcc} as |
| @file{/usr/local/bin/gcc}, |
| leaving an older, non-Fortran-aware version in @file{/usr/bin/gcc}. |
| (Or, the opposite happens.) |
| This can result in @code{gcc} being unable to compile Fortran |
| source files, |
| because when the older version of @code{gcc} is invoked, |
| it complains that it does not |
| recognize the language, or the file name suffix. |
| |
| So, determine whether @code{gcc} already is installed on your system, |
| and, if so, @emph{where} it is installed, and prepare to configure the |
| new version of @code{gcc} you'll be building so that it installs |
| over the existing version of @code{gcc}. |
| |
| You might want to back up your existing copy of @file{/usr/bin/gcc}, and |
| the entire @file{/usr/lib} directory, before |
| you perform the actual installation (as described in this manual). |
| |
| Existing @code{gcc} installations typically are |
| found in @file{/usr} or @file{/usr/local}. |
| (This means the commands are installed in @file{/usr/bin} or |
| @file{/usr/local/bin}, |
| the libraries in @file{/usr/lib} or @file{/usr/local/lib}, |
| and so on.) |
| |
| If you aren't certain where the currently |
| installed version of @code{gcc} and its |
| related programs reside, look at the output |
| of this command: |
| |
| @example |
| gcc -v -o /tmp/delete-me -xc /dev/null -xnone |
| @end example |
| |
| All sorts of interesting information on the locations of various |
| @code{gcc}-related programs and data files should be visible |
| in the output of the above command. |
| (The output also is likely to include a diagnostic from |
| the linker, since there's no @samp{main_()} function.) |
| However, you do have to sift through it yourself; @code{gcc} |
| currently provides no easy way to ask it where it is installed |
| and where it looks for the various programs and data files it |
| calls on to do its work. |
| |
| Just @emph{building} @code{g77} should not overwrite any installed |
| programs---but, usually, after you build @code{g77}, you will want |
| to install it, so backing up anything it might overwrite is |
| a good idea. |
| (This is true for any package, not just @code{g77}, |
| though in this case it is intentional that @code{g77} overwrites |
| @code{gcc} if it is already installed---it is unusual that |
| the installation process for one distribution intentionally |
| overwrites a program or file installed by another distribution, |
| although, in this case, @code{g77} is an augmentation of the |
| @code{gcc} distribution.) |
| |
| Another reason to back up the existing version first, |
| or make sure you can restore it easily, is that it might be |
| an older version on which other users have come to depend |
| for certain behaviors. |
| However, even the new version of @code{gcc} you install |
| will offer users the ability to specify an older version of |
| the actual compilation programs if desired, and these |
| older versions need not include any @code{g77} components. |
| @xref{Target Options,,Specifying Target Machine and Compiler Version, |
| gcc,Using and Porting GNU CC}, for information on the @samp{-V} |
| option of @code{gcc}. |
| |
| @node Configuring gcc |
| @subsection Configuring GNU CC |
| |
| @code{g77} is configured automatically when you configure |
| @code{gcc}. |
| There are two parts of @code{g77} that are configured in two |
| different ways---@code{g77}, which ``camps on'' to the |
| @code{gcc} configuration mechanism, and @code{libg2c}, which |
| uses a variation of the GNU @code{autoconf} configuration |
| system. |
| |
| Generally, you shouldn't have to be concerned with |
| either @code{g77} or @code{libg2c} configuration, unless |
| you're configuring @code{g77} as a cross-compiler. |
| In this case, the @code{libg2c} configuration, and possibly the |
| @code{g77} and @code{gcc} configurations as well, |
| might need special attention. |
| (This also might be the case if you're porting @code{gcc} to |
| a whole new system---even if it is just a new operating system |
| on an existing, supported CPU.) |
| |
| To configure the system, see |
| @ref{Installation,,Installing GNU CC,gcc,Using and Porting GNU CC}, |
| following the instructions for running @file{./configure}. |
| Pay special attention to the @samp{--prefix=} option, which |
| you almost certainly will need to specify. |
| |
| (Note that @code{gcc} installation information is provided |
| as a plain-text file in @file{gcc/INSTALL}.) |
| |
| The information printed by the invocation of @file{./configure} |
| should show that the @file{f} directory (the Fortran language) |
| has been configured. |
| If it does not, there is a problem. |
| |
| @emph{Note:} Configuring with the @samp{--srcdir} argument, |
| or by starting in an empty directory |
| and typing a command such as @kbd{../gcc/configure} to |
| build with separate build and source directories, |
| is known to work with GNU @code{make}, |
| but it is known to not work with other variants of @code{make}. |
| Irix5.2 and SunOS4.1 versions of @code{make} definitely |
| won't work outside the source directory at present. |
| |
| @code{g77}'s portion of the @file{configure} script |
| used to issue a warning message about this |
| when configuring for building binaries outside the source directory, |
| but no longer does this as of version 0.5.23. |
| |
| Instead, @code{g77} simply rejects most common attempts |
| to build it using a non-GNU @code{make} when the |
| build directory is not the same as the source directory, |
| issuing an explanatory diagnostic. |
| |
| @node Building gcc |
| @subsection Building GNU CC |
| @cindex building @code{gcc} |
| @cindex building @code{g77} |
| |
| @cindex @samp{LANGUAGES} macro |
| Building @code{g77} requires building enough of @code{gcc} that |
| these instructions assume you're going to build all of |
| @code{gcc}, including @code{g++}, @code{protoize}, and so on. |
| You can save a little time and disk space by changes the |
| @samp{LANGUAGES} macro definition in @code{gcc/Makefile.in} |
| or @code{gcc/Makefile}, but if you do that, you're on your own. |
| One change is almost @emph{certainly} going to cause failures: |
| removing @samp{c} or @samp{f77} from the definition of the |
| @samp{LANGUAGES} macro. |
| |
| After configuring @code{gcc}, which configures @code{g77} and |
| @code{libg2c} automatically, you're ready to start the actual |
| build by invoking @code{make}. |
| |
| @pindex configure |
| @emph{Note:} You @strong{must} have run the @file{configure} |
| script in @code{gcc} before you run @code{make}, |
| even if you're using an already existing @code{gcc} development directory, |
| because @file{./configure} does the work to recognize that you've added |
| @code{g77} to the configuration. |
| |
| There are two general approaches to building GNU CC from |
| scratch: |
| |
| @table @dfn |
| @item bootstrap |
| This method uses minimal native system facilities to |
| build a barebones, unoptimized @code{gcc}, that is then |
| used to compile (``bootstrap'') the entire system. |
| |
| @item straight |
| This method assumes a more complete native system |
| exists, and uses that just once to build the entire |
| system. |
| @end table |
| |
| On all systems without a recent version of @code{gcc} |
| already installed, the @i{bootstrap} method must be |
| used. |
| In particular, @code{g77} uses extensions to the C |
| language offered, apparently, only by @code{gcc}. |
| |
| On most systems with a recent version of @code{gcc} |
| already installed, the @i{straight} method can be |
| used. |
| This is an advantage, because it takes less CPU time |
| and disk space for the build. |
| However, it does require that the system have fairly |
| recent versions of many GNU programs and other |
| programs, which are not enumerated here. |
| |
| @menu |
| * Bootstrap Build:: For all systems. |
| * Straight Build:: For systems with a recent version of @code{gcc}. |
| @end menu |
| |
| @node Bootstrap Build |
| @subsubsection Bootstrap Build |
| @cindex bootstrap build |
| @cindex build, bootstrap |
| |
| A complete bootstrap build is done by issuing a command |
| beginning with @samp{make bootstrap @dots{}}, as |
| described in @ref{Installation,,Installing GNU CC, |
| gcc,Using and Porting GNU CC}. |
| This is the most reliable form of build, but it does require |
| the most disk space and CPU time, since the complete system |
| is built twice (in Stages 2 and 3), after an initial build |
| (during Stage 1) of a minimal @code{gcc} compiler using |
| the native compiler and libraries. |
| |
| You might have to, or want to, control the way a bootstrap |
| build is done by entering the @code{make} commands to build |
| each stage one at a time, as described in the @code{gcc} |
| manual. |
| For example, to save time or disk space, you might want |
| to not bother doing the Stage 3 build, in which case you |
| are assuming that the @code{gcc} compiler you have built |
| is basically sound (because you are giving up the opportunity |
| to compare a large number of object files to ensure they're |
| identical). |
| |
| To save some disk space during installation, after Stage 2 |
| is built, you can type @samp{rm -fr stage1} to remove the |
| binaries built during Stage 1. |
| |
| Also, @xref{Installation,,Installing GNU CC,gcc,Using and Porting GNU CC}, |
| for important information on building @code{gcc} that is |
| not described in this @code{g77} manual. |
| For example, explanations of diagnostic messages |
| and whether they're expected, or indicate trouble, |
| are found there. |
| |
| @node Straight Build |
| @subsubsection Straight Build |
| @cindex straight build |
| @cindex build, straight |
| |
| If you have a recent version of @code{gcc} |
| already installed on your system, and if you're |
| reasonably certain it produces code that is |
| object-compatible with the version of @code{gcc} |
| you want to build as part of building @code{g77}, |
| you can save time and disk space by doing a straight |
| build. |
| |
| To build just the compilers along with the |
| necessary run-time libraries, issue the following |
| command: |
| |
| @example |
| make -k CC=gcc |
| @end example |
| |
| If you run into problems using this method, you have |
| two options: |
| |
| @itemize @bullet |
| @item |
| Abandon this approach and do a bootstrap build. |
| |
| @item |
| Try to make this approach work by diagnosing the |
| problems you're running into and retrying. |
| @end itemize |
| |
| Especially if you do the latter, you might consider |
| submitting any solutions as bug/fix reports. |
| @xref{Trouble,,Known Causes of Trouble with GNU Fortran}. |
| |
| However, understand that many problems preventing a |
| straight build from working are not @code{g77} problems, |
| and, in such cases, are not likely to be addressed in |
| future versions of @code{g77}. |
| Consider treating them as @code{gcc} bugs instead. |
| |
| @node Pre-installation Checks |
| @subsection Pre-installation Checks |
| @cindex pre-installation checks |
| @cindex installing, checking before |
| |
| Before installing the system, which includes installing |
| @code{gcc}, you might want to do some minimum checking |
| to ensure that some basic things work. |
| |
| Here are some commands you can try, and output typically |
| printed by them when they work: |
| |
| @example |
| sh# @kbd{cd /usr/src/gcc} |
| sh# @kbd{./g77 -B./ -v} |
| g77 version @value{version-g77} |
| Driving: ./g77 -B./ -v -c -xf77-version /dev/null -xnone |
| Reading specs from ./specs |
| gcc version @value{version-gcc} |
| cpp -lang-c -v -isystem ./include -undef -D__GNUC__=2 @dots{} |
| GNU CPP version @value{version-gcc} (Alpha GNU/Linux with ELF) |
| #include "..." search starts here: |
| #include <...> search starts here: |
| include |
| /usr/alpha-linux/include |
| /usr/lib/gcc-lib/alpha-linux/@value{version-gcc}/include |
| /usr/include |
| End of search list. |
| ./f771 -fnull-version -quiet -dumpbase g77-version.f -version @dots{} |
| GNU F77 version @value{version-gcc} (alpha-linux) compiled @dots{} |
| GNU Fortran Front End version @value{version-g77} |
| as -nocpp -o /tmp/cca14485.o /tmp/cca14485.s |
| ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 @dots{} |
| /tmp/cca14485 |
| __G77_LIBF77_VERSION__: @value{version-g77} |
| @@(#)LIBF77 VERSION 19970919 |
| __G77_LIBI77_VERSION__: @value{version-g77} |
| @@(#) LIBI77 VERSION pjw,dmg-mods 19980405 |
| __G77_LIBU77_VERSION__: @value{version-g77} |
| @@(#) LIBU77 VERSION 19970919 |
| sh# @kbd{./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone} |
| Reading specs from ./specs |
| gcc version @value{version-gcc} |
| ./cpp -lang-c -v -isystem ./include -undef @dots{} |
| GNU CPP version @value{version-gcc} (Alpha GNU/Linux with ELF) |
| #include "..." search starts here: |
| #include <...> search starts here: |
| include |
| /usr/alpha-linux/include |
| /usr/lib/gcc-lib/alpha-linux/@value{version-gcc}/include |
| /usr/include |
| End of search list. |
| ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version @dots{} |
| GNU C version @value{version-gcc} (alpha-linux) compiled @dots{} |
| as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s |
| ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 @dots{} |
| /usr/lib/crt1.o: In function `_start': |
| ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' |
| ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' |
| sh# |
| @end example |
| |
| (Note that long lines have been truncated, and @samp{@dots{}} |
| used to indicate such truncations.) |
| |
| The above two commands test whether @code{g77} and @code{gcc}, |
| respectively, are able to compile empty (null) source files, |
| whether invocation of the C preprocessor works, whether libraries |
| can be linked, and so on. |
| |
| If the output you get from either of the above two commands |
| is noticeably different, especially if it is shorter or longer |
| in ways that do not look consistent with the above sample |
| output, you probably should not install @code{gcc} and @code{g77} |
| until you have investigated further. |
| |
| For example, you could try compiling actual applications and |
| seeing how that works. |
| (You might want to do that anyway, even if the above tests |
| work.) |
| |
| To compile using the not-yet-installed versions of @code{gcc} |
| and @code{g77}, use the following commands to invoke them. |
| |
| To invoke @code{g77}, type: |
| |
| @example |
| /usr/src/gcc/g77 -B/usr/src/gcc/ @dots{} |
| @end example |
| |
| To invoke @code{gcc}, type: |
| |
| @example |
| /usr/src/gcc/xgcc -B/usr/src/gcc/ @dots{} |
| @end example |
| |
| @node Installation of Binaries |
| @subsection Installation of Binaries |
| @cindex installation of binaries |
| @cindex @code{g77}, installation of |
| @cindex @code{gcc}, installation of |
| |
| After configuring, building, and testing @code{g77} and @code{gcc}, |
| when you are ready to install them on your system, type: |
| |
| @example |
| make -k CC=gcc install |
| @end example |
| |
| As described in @ref{Installation,,Installing GNU CC, |
| gcc,Using and Porting GNU CC}, the values for |
| the @samp{CC} and @samp{LANGUAGES} macros should |
| be the same as those you supplied for the build |
| itself. |
| |
| So, the details of the above command might vary |
| if you used a bootstrap build (where you might be |
| able to omit both definitions, or might have to |
| supply the same definitions you used when building |
| the final stage) or if you deviated from the |
| instructions for a straight build. |
| |
| If the above command does not install @file{libg2c.a} |
| as expected, try this: |
| |
| @example |
| make -k @dots{} install install-libf77 |
| @end example |
| |
| We don't know why some non-GNU versions of @code{make} sometimes |
| require this alternate command, but they do. |
| (Remember to supply the appropriate definition for @samp{CC} |
| where you see @samp{@dots{}} in the above command.) |
| |
| Note that using the @samp{-k} option tells @code{make} to |
| continue after some installation problems, like not having |
| @code{makeinfo} installed on your system. |
| It might not be necessary for your system. |
| |
| @emph{Note:} @code{g77} no longer installs |
| files not directly part of @code{g77}, |
| such as @file{/usr/bin/f77}, @file{/usr/lib/libf2c.a}, |
| and @file{/usr/include/f2c.h}, or their |
| @file{/usr/local} equivalents. |
| |
| @xref{Distributing Binaries}, for information on |
| how to accommodate systems with no existing non-@code{g77} |
| @code{f77} compiler and systems with @code{f2c} installed. |
| |
| @node Updating Documentation |
| @subsection Updating Your Info Directory |
| @cindex updating info directory |
| @cindex info, updating directory |
| @cindex directory, updating info |
| @pindex /usr/info/dir |
| @pindex g77.info |
| @cindex texinfo |
| @cindex documentation |
| |
| As part of installing @code{g77}, you should make sure users |
| of @code{info} can easily access this manual on-line. |
| |
| @code{g77} does this automatically by |
| invoking the @code{install-info} command |
| when you use @samp{make install} to install @code{g77}. |
| |
| If that fails, or if the @code{info} directory |
| it updates is not the one normally accessed by users, |
| consider invoking it yourself. |
| For example: |
| |
| @smallexample |
| install-info --info-dir=/usr/info /usr/info/g77.info |
| @end smallexample |
| |
| The above example assumes the @code{g77} documentation |
| already is installed in @file{/usr/info} |
| and that @file{/usr/info/dir} is the file |
| you wish to update. |
| Adjust the command accordingly, |
| if those assumptions are wrong. |
| |
| @node Missing tools? |
| @subsection Missing tools? |
| @cindex command missing |
| @cindex command not found |
| @cindex file not found |
| @cindex not found |
| |
| A build of @code{gcc} might fail due to one or more tools |
| being called upon by @code{make} |
| (during the build or install process), |
| when those tools are not installed on your system. |
| |
| This situation can result from any of the following actions |
| (performed by you or someone else): |
| |
| @itemize @bullet |
| @item |
| Changing the source code or documentation yourself |
| (as a developer or technical writer). |
| |
| @item |
| Applying a patch that changes the source code or documentation |
| (including, sometimes, the official patches distributed by |
| the FSF). |
| |
| @item |
| Deleting the files that are created by the (missing) tools. |
| |
| The @samp{make maintainer-clean} command is supposed |
| to delete these files, so invoking this command without |
| having all the appropriate tools installed is not recommended. |
| |
| @item |
| Creating the source directory using a method that |
| does not preserve the date-time-modified information |
| in the original distribution. |
| |
| For example, the UNIX @samp{cp -r} command copies a |
| directory tree without preserving the date-time-modified |
| information. |
| Use @samp{cp -pr} instead. |
| @end itemize |
| |
| The reason these activities cause @code{make} to try and |
| invoke tools that it probably wouldn't when building |
| from a perfectly ``clean'' source directory containing |
| @code{gcc} and @code{g77} is that some files in the |
| source directory (and the corresponding distribution) |
| aren't really source files, but @emph{derived} files |
| that are produced by running tools with the corresponding |
| source files as input. |
| These derived files @dfn{depend}, in @code{make} terminology, |
| on the corresponding source files. |
| |
| @code{make} determines that a file that depends on another |
| needs to be updated if the date-time-modified information for |
| the source file shows that it is newer than the corresponding |
| information for the derived file. |
| |
| If it makes that determination, @code{make} runs the appropriate |
| commands (specified in the ``Makefile'') to update the |
| derived file, and this process typically calls upon one or |
| more installed tools to do the work. |
| |
| The ``safest'' approach to dealing with this situation |
| is to recreate the @code{gcc} and @code{g77} source |
| directories from complete @code{gcc} and @code{g77} distributions |
| known to be provided by the FSF. |
| |
| Another fairly ``safe'' approach is to simply install |
| the tools you need to complete the build process. |
| This is especially appropriate if you've changed the |
| source code or applied a patch to do so. |
| |
| However, if you're certain that the problem is limited |
| entirely to incorrect date-time-modified information, |
| that there are no discrepancies between the contents of |
| source files and files derived from them in the source |
| directory, you can often update the date-time-modified |
| information for the derived files to work around the |
| problem of not having the appropriate tools installed. |
| |
| On UNIX systems, the simplest way to update the date-time-modified |
| information of a file is to use the use the @samp{touch} |
| command. |
| |
| How to use @samp{touch} to update the derived files |
| updated by each of the tools is described below. |
| @emph{Note:} New versions of @code{g77} might change the set of |
| files it generates by invoking each of these tools. |
| If you cannot figure |
| out for yourself how to handle such a situation, try an |
| older version of @code{g77} until you find someone who can |
| (or until you obtain and install the relevant tools). |
| |
| @menu |
| * autoconf: Missing autoconf?. |
| * bison: Missing bison?. |
| * gperf: Missing gperf?. |
| * makeinfo: Missing makeinfo?. |
| @end menu |
| |
| @node Missing autoconf? |
| @subsubsection Missing @code{autoconf}? |
| @cindex @code{autoconf} |
| @cindex missing @code{autoconf} |
| |
| If you cannot install @code{autoconf}, make sure you have started |
| with a @emph{fresh} distribution of @code{gcc} and @code{g77}, |
| do @emph{not} do @samp{make maintainer-clean}, and, to ensure that |
| @code{autoconf} is not invoked by @code{make} during the build, |
| type these commands: |
| |
| @example |
| sh# @kbd{cd @value{path-libf2c}} |
| sh# @kbd{touch configure libU77/configure} |
| sh# @kbd{cd ../../..} |
| sh# |
| @end example |
| |
| @node Missing bison? |
| @subsubsection Missing @code{bison}? |
| @cindex @code{bison} |
| @cindex missing @code{bison} |
| |
| If you cannot install @code{bison}, make sure you have started |
| with a @emph{fresh} distribution of @code{gcc}, do @emph{not} |
| do @samp{make maintainer-clean}, and, to ensure that |
| @code{bison} is not invoked by @code{make} during the build, |
| type these commands: |
| |
| @example |
| sh# @kbd{cd gcc} |
| sh# @kbd{touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c} |
| sh# @kbd{touch cp/parse.c cp/parse.h objc-parse.c} |
| sh# @kbd{cd ..} |
| sh# |
| @end example |
| |
| @node Missing gperf? |
| @subsubsection Missing @code{gperf}? |
| @cindex @code{gperf} |
| @cindex missing @code{gperf} |
| |
| If you cannot install @code{gperf}, make sure you have started |
| with a @emph{fresh} distribution of @code{gcc}, do @emph{not} |
| do @samp{make maintainer-clean}, and, to ensure that |
| @code{gperf} is not invoked by @code{make} during the build, |
| type these commands: |
| |
| @example |
| sh# @kbd{cd gcc} |
| sh# @kbd{touch c-gperf.h} |
| sh# @kbd{cd ..} |
| sh# |
| @end example |
| |
| @node Missing makeinfo? |
| @subsubsection Missing @code{makeinfo}? |
| @cindex @code{makeinfo} |
| @cindex missing @code{makeinfo} |
| @cindex @code{libg2c.a} not found |
| @cindex missing @code{libg2c.a} |
| |
| If @code{makeinfo} is needed but unavailable |
| when installing (via @code{make install}), |
| some files, like @file{libg2c.a}, |
| might not be installed, |
| because once @code{make} determines that it cannot |
| invoke @code{makeinfo}, it cancels any further processing. |
| |
| If you cannot install @code{makeinfo}, an easy work-around is to |
| specify @samp{MAKEINFO=true} on the @code{make} command line, |
| or to specify the @samp{-k} option (@kbd{make -k install}). |
| |
| Another approach is to force the relevant files to be up-to-date |
| by typing these commands and then re-trying the installation step: |
| |
| @example |
| sh# @kbd{cd gcc} |
| sh# @kbd{touch f/g77.info f/BUGS f/INSTALL f/NEWS} |
| sh# @kbd{cd ..} |
| sh# |
| @end example |
| |
| @end ifclear |
| |
| @node Distributing Binaries |
| @section Distributing Binaries |
| @cindex binaries, distributing |
| @cindex code, distributing |
| |
| @ifset EGCS-G77 |
| For @code{egcs} users, this information is |
| superceded by the @code{egcs} installation instructions. |
| @end ifset |
| |
| @ifclear OMIT-FSF-G77 |
| If you are building @code{g77} for distribution to others in binary form, |
| first make sure you are aware of your legal responsibilities (read |
| the file @file{gcc/COPYING} thoroughly). |
| |
| Then, consider your target audience and decide where @code{g77} should |
| be installed. |
| |
| For systems like GNU/Linux that have no native Fortran compiler (or |
| where @code{g77} could be considered the native compiler for Fortran and |
| @code{gcc} for C, etc.), you should definitely configure |
| @code{g77} for installation |
| in @file{/usr/bin} instead of @file{/usr/local/bin}. |
| Specify the |
| @samp{--prefix=/usr} option when running @file{./configure}. |
| |
| You might also want to set up the distribution |
| so the @file{f77} command is a link to @file{g77}, |
| although a script that accepts ``classic'' UNIX @code{f77} |
| options and translates the command-line to the |
| appropriate @code{g77} command line would be more appropriate. |
| If you do this, @emph{please} also provide a ``man page'' in |
| @file{man/man1/f77.1} describing the command. |
| (A link to @file{man/man1/g77.1} is appropriate |
| if @file{bin/f77} is a link to @file{bin/g77}.) |
| |
| For a system that might already have @code{f2c} installed, |
| consider whether inter-operation with @code{g77} will be |
| important to users of @code{f2c} on that system. |
| If you want to improve the likelihood |
| that users will be able to use both @code{f2c} and @code{g77} |
| to compile code for a single program |
| without encountering link-time or run-time incompatibilities, |
| make sure that, |
| whenever they intend to combine @code{f2c}-produced code |
| with @code{g77}-produced code in an executable, they: |
| |
| @itemize @bullet |
| @item |
| Use the @file{lib/gcc-lib/@dots{}/include/g2c.h} file |
| generated by the @code{g77} build |
| in place of the @file{f2c.h} file |
| that normally comes with @code{f2c} |
| (or versions of @code{g77} prior to 0.5.23) |
| when compiling @emph{all} of the @code{f2c}-produced C code |
| |
| @item |
| Link to the @code{lib/gcc-lib/@dots{}/libg2c.a} library |
| built by the @code{g77} build |
| instead of the @file{libf2c.a} library |
| that normally comes with @code{f2c} |
| (or versions of @code{g77} prior to 0.5.23) |
| @end itemize |
| |
| How you choose to effect the above depends on whether |
| the existing installation of @code{f2c} must be |
| maintained. |
| |
| In any case, it is important to try and ensure that |
| the installation keeps working properly even after |
| subsequent re-installation of @code{f2c}, |
| which probably involves overwriting |
| @file{/usr/local/lib/libf2c.a} and |
| @file{/usr/local/include/f2c.h}, |
| or similar. |
| |
| At least, copying @file{libg2c.a} and @file{g2c.h} into |
| the appropriate ``public'' directories |
| allows users to more easily select the version of |
| @code{libf2c} they wish to use for a particular |
| build. |
| The names are changed by @code{g77} to make this |
| coexistence easier to maintain; |
| even if @code{f2c} is installed later, |
| the @code{g77} files normally installed |
| by its installation process aren't disturbed. |
| Use of symbolic links from one set of files to |
| another might result in problems after a subsequent |
| reinstallation of either @code{f2c} or @code{g77}, |
| so be sure to alert users of your distribution |
| accordingly. |
| |
| (Make sure you clearly document, in the description of |
| your distribution, how installation of your distribution will |
| affect existing installations of @code{gcc}, @code{f2c}, |
| @code{f77}, @file{libf2c.a}, and so on. |
| Similarly, you should clearly document any requirements |
| you assume will be met by users of your distribution.) |
| |
| For other systems with native @code{f77} (and @code{cc}) compilers, |
| configure @code{g77} as you (or most of your audience) would |
| configure @code{gcc} for their installations. |
| Typically this is for installation in @file{/usr/local}, |
| and would not include a new version of @file{/usr/bin/f77} |
| or @file{/usr/local/bin/f77}, |
| so users could still use the native @code{f77}. |
| |
| In any case, for @code{g77} to work properly, you @strong{must} ensure |
| that the binaries you distribute include: |
| |
| @table @file |
| @item bin/g77 |
| This is the command most users use to compile Fortran. |
| |
| @item bin/gcc |
| This is the command some users use to compile Fortran, |
| typically when compiling programs written in other languages |
| at the same time. |
| The @file{bin/gcc} executable file must have been built |
| from a @code{gcc} source tree into which a @code{g77} source |
| tree was merged and configured, or it will not know how |
| to compile Fortran programs. |
| |
| @item info/g77.info* |
| This is the documentation for @code{g77}. |
| If it is not included, users will have trouble understanding |
| diagnostics messages and other such things, and will send |
| you a lot of email asking questions. |
| |
| Please edit this documentation (by editing @file{@value{path-g77}/*.texi} |
| and doing @samp{make doc} from the @file{/usr/src/gcc} directory) |
| to reflect any changes you've made to @code{g77}, or at |
| least to encourage users of your binary distribution to |
| report bugs to you first. |
| |
| Also, whether you distribute binaries or install @code{g77} |
| on your own system, it might be helpful for everyone to |
| add a line listing this manual by name and topic to the |
| top-level @code{info} node in @file{/usr/info/dir}. |
| That way, users can find @code{g77} documentation more |
| easily. |
| @xref{Updating Documentation,,Updating Your Info Directory}. |
| |
| @item man/man1/g77.1 |
| This is the short man page for @code{g77}. |
| It is not always kept up-to-date, |
| but you might as well include it |
| for people who really like ``man'' pages. |
| |
| @cindex gcc-lib directory |
| @cindex directories, gcc-lib |
| @item lib/gcc-lib |
| This is the directory containing the ``private'' files |
| installed by and for @code{gcc}, @code{g77}, @code{g++}, |
| and other GNU compilers. |
| |
| @item lib/gcc-lib/@dots{}/f771 |
| This is the actual Fortran compiler. |
| |
| @item lib/gcc-lib/@dots{}/libg2c.a |
| This is the run-time library for @code{g77}-compiled programs. |
| @end table |
| |
| Whether you want to include the slightly updated (and possibly |
| improved) versions of @file{cc1}, @file{cc1plus}, and whatever other |
| binaries get rebuilt with the changes the GNU Fortran distribution |
| makes to the GNU back end, is up to you. |
| These changes are highly unlikely to break any compilers, |
| because they involve doing things like adding to the |
| list of acceptable compiler options |
| (so, for example, @file{cc1plus} accepts, and ignores, |
| options that only @file{f771} actually processes). |
| |
| Please assure users that unless |
| they have a specific need for their existing, |
| older versions of @file{gcc} command, |
| they are unlikely to experience any problems by overwriting |
| it with your version---though they could certainly protect |
| themselves by making backup copies first! |
| |
| Otherwise, users might try and install your binaries |
| in a ``safe'' place, find they cannot compile Fortran |
| programs with your distribution (because, perhaps, they're |
| invoking their old version of the @file{gcc} command, |
| which does not recognize Fortran programs), and assume |
| that your binaries (or, more generally, GNU Fortran |
| distributions in general) are broken, at least for their |
| system. |
| |
| Finally, @strong{please} ask for bug reports to go to you first, at least |
| until you're sure your distribution is widely used and has been |
| well tested. |
| This especially goes for those of you making any |
| changes to the @code{g77} sources to port @code{g77}, e.g. to OS/2. |
| @email{fortran@@gnu.org} has received a fair number of bug |
| reports that turned out to be problems with other peoples' ports |
| and distributions, about which nothing could be done for the |
| user. |
| Once you are quite certain a bug report does not involve |
| your efforts, you can forward it to us. |
| |
| @end ifclear |