# 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
