| # Top level makefile fragment for GNU Fortran. -*-makefile-*- |
| # Copyright (C) 1995-1998 Free Software Foundation, Inc. |
| |
| #This file is part of GNU Fortran. |
| |
| #GNU Fortran is free software; you can redistribute it and/or modify |
| #it under the terms of the GNU General Public License as published by |
| #the Free Software Foundation; either version 2, or (at your option) |
| #any later version. |
| |
| #GNU Fortran is distributed in the hope that it will be useful, |
| #but WITHOUT ANY WARRANTY; without even the implied warranty of |
| #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| #GNU General Public License for more details. |
| |
| #You should have received a copy of the GNU General Public License |
| #along with GNU Fortran; see the file COPYING. If not, write to |
| #the Free Software Foundation, 59 Temple Place - Suite 330, |
| #Boston, MA 02111-1307, USA. |
| |
| # This file provides the language dependent support in the main Makefile. |
| # Each language makefile fragment must provide the following targets: |
| # |
| # foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap, |
| # foo.info, foo.dvi, |
| # foo.install-normal, foo.install-common, foo.install-info, foo.install-man, |
| # foo.uninstall, foo.distdir, |
| # foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean, |
| # foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 |
| # |
| # where `foo' is the name of the language. |
| # |
| # It should also provide rules for: |
| # |
| # - making any compiler driver (eg: g++) |
| # - the compiler proper (eg: cc1plus) |
| # - define the names for selecting the language in LANGUAGES. |
| # |
| # $(srcdir) must be set to the gcc/ source directory (not gcc/f/). |
| # |
| # Actual name to use when installing a native compiler. |
| G77_INSTALL_NAME = `t='$(program_transform_name)'; echo g77 | sed $$t` |
| |
| # Actual name to use when installing a cross-compiler. |
| G77_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g77 | sed $$t` |
| # |
| # Define the names for selecting f77 in LANGUAGES. |
| # Note that it would be nice to move the dependency on g77 |
| # into the F77 rule, but that needs a little bit of work |
| # to do the right thing within all.cross. |
| F77 f77: f771$(exeext) |
| |
| # Tell GNU make to ignore these if they exist. |
| .PHONY: F77 f77 f77.all.build f77.all.cross \ |
| f77.start.encap f77.rest.encap f77.info f77.dvi \ |
| f77.install-normal \ |
| f77.install-common f77.install-info f77.install-man \ |
| f77.uninstall f77.mostlyclean f77.clean f77.distclean \ |
| f77.extraclean f77.maintainer-clean f77.distdir f77.rebuilt \ |
| f77.stage1 f77.stage2 f77.stage3 f77.stage4 |
| |
| g77.c: $(srcdir)/gcc.c |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| rm -f g77.c; \ |
| $(LN_S) $(srcdir)/gcc.c g77.c; \ |
| fi |
| |
| g77spec.o: $(srcdir)/f/g77spec.c $(srcdir)/f/version.h |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/f/g77spec.c; \ |
| fi |
| |
| g77version.o: $(srcdir)/f/version.c |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o g77version.o \ |
| $(srcdir)/f/version.c; \ |
| fi |
| |
| # N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added. |
| # It'd be nice if we could find an easier way to do this---rather than have |
| # to track changes to the toplevel gcc Makefile as well. |
| # We depend on g77.c last, to make it obvious where it came from. |
| g77.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g77.c |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(DRIVER_DEFINES) \ |
| -DLANG_SPECIFIC_DRIVER -c g77.c; \ |
| fi |
| |
| # Create the compiler driver for g77. |
| g77$(exeext): g77.o g77spec.o g77version.o version.o choose-temp.o pexecute.o prefix.o mkstemp.o \ |
| $(LIBDEPS) $(EXTRA_GCC_OBJS) |
| if [ -f lang-f77 ]; then \ |
| $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g77.o g77spec.o g77version.o \ |
| version.o choose-temp.o pexecute.o prefix.o mkstemp.o $(EXTRA_GCC_OBJS) $(LIBS); \ |
| fi |
| |
| # Create a version of the g77 driver which calls the cross-compiler. |
| g77-cross$(exeext): g77$(exeext) |
| if [ -f lang-f77 ]; then \ |
| rm -f g77-cross$(exeext); \ |
| cp g77$(exeext) g77-cross$(exeext); \ |
| fi |
| |
| F77_SRCS = \ |
| $(srcdir)/f/assert.j \ |
| $(srcdir)/f/bad.c \ |
| $(srcdir)/f/bad.def \ |
| $(srcdir)/f/bad.h \ |
| $(srcdir)/f/bit.c \ |
| $(srcdir)/f/bit.h \ |
| $(srcdir)/f/bld-op.def \ |
| $(srcdir)/f/bld.c \ |
| $(srcdir)/f/bld.h \ |
| $(srcdir)/f/com-rt.def \ |
| $(srcdir)/f/com.c \ |
| $(srcdir)/f/com.h \ |
| $(srcdir)/f/config.j \ |
| $(srcdir)/f/convert.j \ |
| $(srcdir)/f/data.c \ |
| $(srcdir)/f/data.h \ |
| $(srcdir)/f/equiv.c \ |
| $(srcdir)/f/equiv.h \ |
| $(srcdir)/f/expr.c \ |
| $(srcdir)/f/expr.h \ |
| $(srcdir)/f/fini.c \ |
| $(srcdir)/f/flags.j \ |
| $(srcdir)/f/glimits.j \ |
| $(srcdir)/f/global.c \ |
| $(srcdir)/f/global.h \ |
| $(srcdir)/f/hconfig.j \ |
| $(srcdir)/f/implic.c \ |
| $(srcdir)/f/implic.h \ |
| $(srcdir)/f/input.j \ |
| $(srcdir)/f/info-b.def \ |
| $(srcdir)/f/info-k.def \ |
| $(srcdir)/f/info-w.def \ |
| $(srcdir)/f/info.c \ |
| $(srcdir)/f/info.h \ |
| $(srcdir)/f/intrin.c \ |
| $(srcdir)/f/intrin.def \ |
| $(srcdir)/f/intrin.h \ |
| $(srcdir)/f/lab.c \ |
| $(srcdir)/f/lab.h \ |
| $(srcdir)/f/lex.c \ |
| $(srcdir)/f/lex.h \ |
| $(srcdir)/f/malloc.c \ |
| $(srcdir)/f/malloc.h \ |
| $(srcdir)/f/name.c \ |
| $(srcdir)/f/name.h \ |
| $(srcdir)/f/output.j \ |
| $(srcdir)/f/parse.c \ |
| $(srcdir)/f/proj.c \ |
| $(srcdir)/f/proj.h \ |
| $(srcdir)/f/rtl.j \ |
| $(srcdir)/f/src.c \ |
| $(srcdir)/f/src.h \ |
| $(srcdir)/f/st.c \ |
| $(srcdir)/f/st.h \ |
| $(srcdir)/f/sta.c \ |
| $(srcdir)/f/sta.h \ |
| $(srcdir)/f/stb.c \ |
| $(srcdir)/f/stb.h \ |
| $(srcdir)/f/stc.c \ |
| $(srcdir)/f/stc.h \ |
| $(srcdir)/f/std.c \ |
| $(srcdir)/f/std.h \ |
| $(srcdir)/f/ste.c \ |
| $(srcdir)/f/ste.h \ |
| $(srcdir)/f/storag.c \ |
| $(srcdir)/f/storag.h \ |
| $(srcdir)/f/stp.c \ |
| $(srcdir)/f/stp.h \ |
| $(srcdir)/f/str-1t.fin \ |
| $(srcdir)/f/str-2t.fin \ |
| $(srcdir)/f/str-fo.fin \ |
| $(srcdir)/f/str-io.fin \ |
| $(srcdir)/f/str-nq.fin \ |
| $(srcdir)/f/str-op.fin \ |
| $(srcdir)/f/str-ot.fin \ |
| $(srcdir)/f/str.c \ |
| $(srcdir)/f/str.h \ |
| $(srcdir)/f/sts.c \ |
| $(srcdir)/f/sts.h \ |
| $(srcdir)/f/stt.c \ |
| $(srcdir)/f/stt.h \ |
| $(srcdir)/f/stu.c \ |
| $(srcdir)/f/stu.h \ |
| $(srcdir)/f/stv.c \ |
| $(srcdir)/f/stv.h \ |
| $(srcdir)/f/stw.c \ |
| $(srcdir)/f/stw.h \ |
| $(srcdir)/f/symbol.c \ |
| $(srcdir)/f/symbol.def \ |
| $(srcdir)/f/symbol.h \ |
| $(srcdir)/f/system.j \ |
| $(srcdir)/f/target.c \ |
| $(srcdir)/f/target.h \ |
| $(srcdir)/f/tconfig.j \ |
| $(srcdir)/f/tm.j \ |
| $(srcdir)/f/top.c \ |
| $(srcdir)/f/top.h \ |
| $(srcdir)/f/toplev.j \ |
| $(srcdir)/f/tree.j \ |
| $(srcdir)/f/type.c \ |
| $(srcdir)/f/type.h \ |
| $(srcdir)/f/version.c \ |
| $(srcdir)/f/version.h \ |
| $(srcdir)/f/where.c \ |
| $(srcdir)/f/where.h |
| |
| f771$(exeext): $(P) $(F77_SRCS) $(LIBDEPS) stamp-objlist |
| touch lang-f77 |
| cd f; $(MAKE) $(FLAGS_TO_PASS) \ |
| HOST_CC="$(HOST_CC)" HOST_CFLAGS="$(HOST_CFLAGS)" HOST_CPPFLAGS="$(HOST_CPPFLAGS)" \ |
| ../f771$(exeext) |
| |
| # |
| # Build hooks: |
| |
| f77.all.build: g77$(exeext) |
| f77.all.cross: g77-cross$(exeext) |
| f77.start.encap: g77$(exeext) |
| f77.rest.encap: |
| |
| f77.info: f/g77.info |
| f77.dvi: f/g77.dvi |
| |
| # g77 documentation. |
| f/g77.info: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \ |
| $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \ |
| $(srcdir)/f/intdoc.texi |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| rm -f $(srcdir)/f/g77.info-*; \ |
| $(MAKEINFO) -I$(srcdir)/f -o f/g77.info $(srcdir)/f/g77.texi; \ |
| fi |
| |
| f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \ |
| $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \ |
| $(srcdir)/f/intdoc.texi |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| # `tex2dvi' was used below, but the Texinfo 3.12 one won't work properly |
| # with the include files from $(srcdir). This use of TEXINPUTS may not |
| # be universally valid. `$(TEX)' should be used if it gets defined in |
| # gcc/Makefile.in. |
| if [ -f lang-f77 ]; then \ |
| TEXINPUTS=$(srcdir)/f:$$TEXINPUTS tex $(srcdir)/f/g77.texi; \ |
| texindex g77.??; \ |
| TEXINPUTS=$(srcdir)/f:$$TEXINPUTS tex $(srcdir)/f/g77.texi; \ |
| mv g77.dvi f; \ |
| fi |
| |
| # This dance is all about producing accurate documentation for g77's |
| # intrinsics with minimum fuss. f/ansify appends "\n\" to C strings |
| # so ANSI C compilers can compile f/intdoc.h -- gcc can compile f/intdoc.in |
| # directly, if f/intdoc.c #include'd that, but we don't want to force |
| # people to install gcc just to build the documentation. We use the |
| # C format for f/intdoc.in in the first place to allow a fairly "free", |
| # but widely known format for documentation -- basically anyone who knows |
| # how to write texinfo source and enclose it in C constants can handle |
| # it, and f/ansify allows them to not even end lines with "\n\". So, |
| # essentially, the C preprocessor and compiler are used to enter the |
| # document snippets into a data base via name lookup, rather than duplicating |
| # that kind of code here. And we use f/intdoc.c instead of straight |
| # texinfo in the first place so that as much information as possible |
| # contained in f/intrin.def can be inserted directly and reliably into |
| # the documentation. That's better than replicating it, because it |
| # reduces the likelihood of discrepancies between the docs and the compiler |
| # itself, which uses f/intrin.def; in fact, many bugs in f/intrin.def have |
| # been found only upon reading the documentation that was automatically |
| # produced from it. |
| $(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.in f/ansify.c f/intrin.def f/intrin.h |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 ]; then \ |
| $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) \ |
| `echo $(srcdir)/f/ansify.c | sed 's,^\./,,'` -o f/ansify; \ |
| f/ansify < $(srcdir)/f/intdoc.in > f/intdoc.h0 $(srcdir)/f/intdoc.in; \ |
| $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) -I./f \ |
| `echo $(srcdir)/f/intdoc.c | sed 's,^\./,,'` -o f/intdoc; \ |
| f/intdoc > $(srcdir)/f/intdoc.texi; \ |
| rm f/intdoc f/ansify f/intdoc.h0; \ |
| fi |
| |
| $(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi |
| cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \ |
| --no-validate -o BUGS bugs0.texi |
| |
| $(srcdir)/f/INSTALL: f/install0.texi f/g77install.texi |
| cd $(srcdir)/f; $(MAKEINFO) -D INSTALLONLY --no-header --no-split \ |
| --no-validate -o INSTALL install0.texi |
| |
| $(srcdir)/f/NEWS: f/news0.texi f/news.texi |
| cd $(srcdir)/f; $(MAKEINFO) -D NEWSONLY --no-header --no-split \ |
| --no-validate -o NEWS news0.texi |
| |
| f77.rebuilt: f/g77.info $(srcdir)/f/BUGS $(srcdir)/f/INSTALL \ |
| $(srcdir)/f/NEWS |
| |
| # |
| # Install hooks: |
| # f771 is installed elsewhere as part of $(COMPILERS). |
| |
| f77.install-normal: |
| |
| # Install the driver program as $(target)-g77 |
| # and also as either g77 (if native) or $(tooldir)/bin/g77. |
| f77.install-common: |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| -if [ -f lang-f77 -a -f f771$(exeext) ] ; then \ |
| if [ -f g77-cross$(exeext) ] ; then \ |
| rm -f $(bindir)/$(G77_CROSS_NAME)$(exeext); \ |
| $(INSTALL_PROGRAM) g77-cross$(exeext) $(bindir)/$(G77_CROSS_NAME)$(exeext); \ |
| chmod a+x $(bindir)/$(G77_CROSS_NAME)$(exeext); \ |
| else \ |
| rm -f $(bindir)/$(G77_INSTALL_NAME)$(exeext); \ |
| $(INSTALL_PROGRAM) g77$(exeext) $(bindir)/$(G77_INSTALL_NAME)$(exeext); \ |
| chmod a+x $(bindir)/$(G77_INSTALL_NAME)$(exeext); \ |
| fi ; \ |
| else true; fi |
| @if [ -f f77-install-ok -o -f $(srcdir)/f77-install-ok ]; then \ |
| echo ''; \ |
| echo 'Warning: egcs no longer installs an f77 command.'; \ |
| echo ' You must do so yourself. For more information,'; \ |
| echo ' read "Distributing Binaries" in the egcs g77 docs.'; \ |
| echo ' (To turn off this warning, delete the file'; \ |
| echo ' f77-install-ok in the source or build directory.)'; \ |
| echo ''; \ |
| fi |
| |
| # $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir |
| # to do the install. The sed rule was copied from stmp-int-hdrs. |
| f77.install-info: f77.info |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| if [ -f lang-f77 -a -f f/g77.info ] ; then \ |
| rm -f $(infodir)/g77.info*; \ |
| for f in f/g77.info*; do \ |
| realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ |
| $(INSTALL_DATA) $$f $(infodir)/$$realfile; \ |
| done; \ |
| chmod a-x $(infodir)/g77.info*; \ |
| fi |
| @if [ -f lang-f77 -a -f $(srcdir)/f/g77.info ] ; then \ |
| if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ |
| echo " install-info --info-dir=$(infodir) $(infodir)/g77.info"; \ |
| install-info --info-dir=$(infodir) $(infodir)/g77.info || : ; \ |
| else : ; fi; \ |
| else : ; fi |
| |
| f77.install-man: $(srcdir)/f/g77.1 |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| -if [ -f lang-f77 -a -f f771$(exeext) ] ; then \ |
| if [ -f g77-cross$(exeext) ] ; then \ |
| rm -f $(mandir)/$(G77_CROSS_NAME)$(manext); \ |
| $(INSTALL_DATA) $(srcdir)/f/g77.1 $(mandir)/$(G77_CROSS_NAME)$(manext); \ |
| chmod a-x $(mandir)/$(G77_CROSS_NAME)$(manext); \ |
| else \ |
| rm -f $(mandir)/$(G77_INSTALL_NAME)$(manext); \ |
| $(INSTALL_DATA) $(srcdir)/f/g77.1 $(mandir)/$(G77_INSTALL_NAME)$(manext); \ |
| chmod a-x $(mandir)/$(G77_INSTALL_NAME)$(manext); \ |
| fi; \ |
| else true; fi |
| |
| f77.uninstall: |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| @if [ -f lang-f77 ] ; then \ |
| if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ |
| echo " install-info --delete --info-dir=$(infodir) $(infodir)/g77.info"; \ |
| install-info --delete --info-dir=$(infodir) $(infodir)/g77.info || : ; \ |
| else : ; fi; \ |
| else : ; fi |
| -if [ -f lang-f77 ]; then \ |
| rm -rf $(bindir)/$(G77_INSTALL_NAME)$(exeext); \ |
| rm -rf $(bindir)/$(G77_CROSS_NAME)$(exeext); \ |
| rm -rf $(mandir)/$(G77_INSTALL_NAME)$(manext); \ |
| rm -rf $(mandir)/$(G77_CROSS_NAME)$(manext); \ |
| rm -rf $(infodir)/g77.info*; \ |
| fi |
| # |
| # Clean hooks: |
| # A lot of the ancillary files are deleted by the main makefile. |
| # We just have to delete files specific to us. |
| |
| f77.mostlyclean: |
| -rm -f f/*$(objext) |
| -rm -f f/fini f/stamp-str f/str-*.h f/str-*.j |
| -rm -f f/intdoc f/ansify f/intdoc.h0 |
| -rm -f g77.aux g77.cps g77.ky g77.toc g77.vr g77.fn g77.kys \ |
| g77.pg g77.tp g77.vrs g77.cp g77.fns g77.log g77.pgs g77.tps |
| f77.clean: |
| -rm -f g77.c g77.o g77spec.o g77version.o |
| f77.distclean: |
| -rm -f lang-f77 f/Makefile |
| f77.extraclean: |
| f77.maintainer-clean: |
| -rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/INSTALL f/NEWS f/intdoc.texi |
| # |
| # Stage hooks: |
| # The main makefile has already created stage?/f. |
| |
| G77STAGESTUFF = f/*$(objext) f/fini f/stamp-str f/str-*.h f/str-*.j \ |
| lang-f77 g77.c g77.o g77spec.o g77version.o |
| |
| f77.stage1: stage1-start |
| -if [ -f lang-f77 ]; then \ |
| mv -f $(G77STAGESTUFF) stage1/f; \ |
| fi |
| f77.stage2: stage2-start |
| -if [ -f lang-f77 ]; then \ |
| mv -f $(G77STAGESTUFF) stage2/f; \ |
| fi |
| f77.stage3: stage3-start |
| -if [ -f lang-f77 ]; then \ |
| mv -f $(G77STAGESTUFF) stage3/f; \ |
| fi |
| f77.stage4: stage4-start |
| -if [ -f lang-f77 ]; then \ |
| mv -f $(G77STAGESTUFF) stage4/f; \ |
| fi |
| # |
| # Maintenance hooks: |
| |
| # This target creates the files that can be rebuilt, but go in the |
| # distribution anyway. It then copies the files to the distdir directory. |
| f77.distdir: f77.rebuilt |
| case "$(LANGUAGES)" in \ |
| *[fF]77*) touch lang-f77;; \ |
| *) rm -f lang-f77;; \ |
| esac |
| -if [ -f lang-f77 ]; then \ |
| mkdir tmp/f; \ |
| cd f; \ |
| for file in *[0-9a-zA-Z+]; do \ |
| $(LN_S) $$file ../tmp/f; \ |
| done; \ |
| fi |