# -*- makefile -*-
# Top level makefile fragment for GNU gfortran, the GNU Fortran 95 compiler.
# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# Contributed by Paul Brook <paul@nowt.org
# and Steven Bosscher <s.bosscher@student.tudelft.nl>

#This file is part of GCC.

#GCC 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.

#GCC 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 GCC; see the file COPYING.  If not, write to
#the Free Software Foundation, 51 Franklin Street, Fifth Floor,
#Boston, MA 02110-1301, USA.

# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.info
# foo.install-common, foo.install-info, foo.install-man,
# foo.uninstall, foo.install-info, foo.dvi, foo.pdf, foo.html,
# 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: gfortran)
# - the compiler proper (eg: f951)
# - define the names for selecting the language in LANGUAGES.
# $(srcdir) must be set to the gcc/ source directory (*not* gcc/fortran/).

# Actual name to use when installing a native compiler.
GFORTRAN_INSTALL_NAME := $(shell echo gfortran|sed '$(program_transform_name)')
GFORTRAN_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gfortran|sed '$(program_transform_name)')

#^L

# Use strict warnings for this front end.
fortran-warn = $(STRICT_WARN)

# These files get warnings from an inline function in GMP saying:
# "control may reach end of non-void function '__gmpz_get_ui' being inlined"
fortran/expr.o-warn = -Wno-error
fortran/resolve.o-warn = -Wno-error
fortran/simplify.o-warn = -Wno-error
fortran/trans-common.o-warn = -Wno-error

# These are the groups of object files we have.  The F95_PARSER_OBJS are
# all the front end files, the F95_OBJS are the files for the translation
# from the parse tree to GENERIC

F95_PARSER_OBJS = fortran/arith.o fortran/array.o fortran/bbt.o \
    fortran/check.o fortran/data.o fortran/decl.o fortran/dump-parse-tree.o \
    fortran/error.o fortran/expr.o fortran/interface.o \
    fortran/intrinsic.o fortran/io.o fortran/iresolve.o \
    fortran/match.o fortran/matchexp.o fortran/misc.o fortran/module.o \
    fortran/openmp.o fortran/options.o fortran/parse.o fortran/primary.o \
    fortran/resolve.o fortran/scanner.o fortran/simplify.o fortran/st.o \
    fortran/symbol.o

F95_OBJS = $(F95_PARSER_OBJS) \
    fortran/convert.o fortran/dependency.o fortran/f95-lang.o \
    fortran/trans.o fortran/trans-array.o fortran/trans-common.o \
    fortran/trans-const.o fortran/trans-decl.o fortran/trans-expr.o \
    fortran/trans-intrinsic.o fortran/trans-io.o fortran/trans-openmp.o \
    fortran/trans-stmt.o fortran/trans-types.o

# GFORTRAN uses GMP for its internal arithmetics.
F95_LIBS = $(GMPLIBS) $(LIBS)

#
# Define the names for selecting gfortran in LANGUAGES.
fortran: f951$(exeext)

# Tell GNU make to ignore files by these names if they exist.
.PHONY: fortran

gfortranspec.o: $(srcdir)/fortran/gfortranspec.c $(SYSTEM_H) $(TM_H) $(GCC_H) $(CONFIG_H)
	(SHLIB_LINK='$(SHLIB_LINK)' \
	SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \
		$(INCLUDES) $(srcdir)/fortran/gfortranspec.c)

# Create the compiler driver gfortran.
GFORTRAN_D_OBJS = $(GCC_OBJS) gfortranspec.o version.o prefix.o intl.o
gfortran$(exeext): $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
	  $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)

# Create a version of the gfortran driver which calls the cross-compiler.
gfortran-cross$(exeext): gfortran$(exeext)
	-rm -f gfortran-cross$(exeext)
	cp gfortran$(exeext) gfortran-cross$(exeext)

# LLVM LOCAL begin
# Language-independent object files.
F95_BACKEND = $(BACKEND) attribs.o stub-objc.o stub-c.o

# The compiler itself is called f951.
f951$(exeext): $(F95_OBJS) \
		$(F95_BACKEND) $(LIBDEPS)
	$(LINKCC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
		$(F95_OBJS) $(F95_BACKEND) $(F95_LIBS)
# LLVM LOCAL end

gt-fortran-trans.h    : s-gtype; @true
#
# Build hooks:

fortran.all.cross: gfortran-cross$(exeext)

fortran.start.encap: gfortran$(exeext)
fortran.rest.encap:

fortran.srcinfo: doc/gfortran.info
	-cp -p $^ $(srcdir)/fortran

fortran.tags: force
	cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \
	etags --include TAGS.sub --include ../TAGS.sub

fortran.info: doc/gfortran.info
fortran.dvi: doc/gfortran.dvi
fortran.pdf: doc/gfortran.pdf
fortran.html: $(build_htmldir)/gfortran/index.html

F95_MANFILES = doc/gfortran.1

fortran.man: $(F95_MANFILES)

fortran.srcman: $(F95_MANFILES)
	-cp -p $^ $(srcdir)/doc

fortran.srcextra:

check-f95 : check-gfortran
check-fortran : check-gfortran
lang_checks += check-gfortran

# GFORTRAN documentation.
GFORTRAN_TEXI = \
  $(srcdir)/fortran/gfortran.texi \
  $(srcdir)/fortran/intrinsic.texi \
  $(srcdir)/fortran/invoke.texi \
  $(srcdir)/doc/include/fdl.texi \
  $(srcdir)/doc/include/gpl.texi \
  $(srcdir)/doc/include/funding.texi \
  $(srcdir)/doc/include/gcc-common.texi \
  gcc-vers.texi

doc/gfortran.info: $(GFORTRAN_TEXI)
	if [ x$(BUILD_INFO) = xinfo ]; then \
	  rm -f doc/gfortran.info-*; \
	  $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \
	    -o $@ $<; \
	else true; fi

doc/gfortran.dvi: $(GFORTRAN_TEXI)
	$(TEXI2DVI) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $<

doc/gfortran.pdf: $(GFORTRAN_TEXI)
	$(TEXI2PDF) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $<

$(build_htmldir)/gfortran/index.html: $(GFORTRAN_TEXI)
	$(mkinstalldirs) $(@D)
	rm -f $(@D)/*
	$(TEXI2HTML) -I $(gcc_docdir)/include -I $(srcdir)/fortran -o $(@D) $<

.INTERMEDIATE: gfortran.pod

gfortran.pod: $(GFORTRAN_TEXI)
	-$(TEXI2POD) < $(srcdir)/fortran/invoke.texi > $@

# Create or recreate the gfortran private include file directory.
install-finclude-dir: installdirs
	-rm -rf $(DESTDIR)$(libsubdir)/finclude
	mkdir $(DESTDIR)$(libsubdir)/finclude
	-chmod a+rx $(DESTDIR)$(libsubdir)/finclude
#
# Install hooks:
# f951 is installed elsewhere as part of $(COMPILERS).

# Install the driver program as $(target)-gfortran
# and also as either gfortran (if native) or $(tooldir)/bin/gfortran.
fortran.install-common: install-finclude-dir installdirs
	-if [ -f f951$(exeext) ] ; then \
	  rm -f $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) gfortran$(exeext) $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
	  chmod a+x $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
	  if [ -f gfortran-cross$(exeext) ] ; then \
	    if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
	      rm -f $(DESTDIR)$(gcc_tooldir)/bin/gfortran$(exeext); \
	      $(INSTALL_PROGRAM) gfortran-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/gfortran$(exeext); \
	    else true; fi; \
	  else \
	    rm -f $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
	    $(LN) $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext) $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
	  fi ; \
	fi

fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info

fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext)

$(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext): doc/gfortran.1 \
		installdirs
	-rm -f $@
	-$(INSTALL_DATA) $< $@
	-chmod a-x $@

fortran.uninstall:
	if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
	  echo " install-info --delete --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gfortran.info"; \
	  install-info --delete --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gfortran.info || : ; \
	else : ; fi; \
	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \
	rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \
	rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \
	rm -rf $(DESTDIR)$(infodir)/gfortran.info*

#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.

fortran.mostlyclean:
	-rm -f f951$(exeext)
	-rm -f fortran/*.o

fortran.clean:
fortran.distclean:
	-rm -f fortran/config.status fortran/Makefile

fortran.extraclean:
fortran.maintainer-clean:
	-rm -f doc/gfortran.info* fortran/gfortran.*aux
	-rm -f $(docobjdir)/gfortran.1

#
# Stage hooks:
# The toplevel makefile has already created stage?/fortran at this point.

fortran.stage1: stage1-start
	-mv fortran/*$(objext) stage1/fortran
fortran.stage2: stage2-start
	-mv fortran/*$(objext) stage2/fortran
fortran.stage3: stage3-start
	-mv fortran/*$(objext) stage3/fortran
fortran.stage4: stage4-start
	-mv fortran/*$(objext) stage4/fortran
fortran.stageprofile: stageprofile-start
	-mv fortran/*$(objext) stageprofile/fortran
fortran.stagefeedback: stageprofile-start
	-mv fortran/*$(objext) stagefeedback/fortran

#
# .o: .h dependencies.

# Everything depends on gfortran.h, but only a few files depend on
# the other headers.  So at some point we'll have to split out
# which objects depend on what.  FIXME
# TODO: Add dependencies on the backend/tree header files

$(F95_PARSER_OBJS): fortran/gfortran.h fortran/intrinsic.h fortran/match.h \
		fortran/parse.h \
		$(CONFIG_H) $(SYSTEM_H) $(TM_H) $(TM_P_H) coretypes.h \
		$(RTL_H) $(TREE_H) $(TREE_DUMP_H) $(GGC_H) $(EXPR_H) \
		$(FLAGS_H) output.h $(DIAGNOSTIC_H) errors.h $(FUNCTION_H) 
fortran/openmp.o: pointer-set.h $(TARGET_H) toplev.h

GFORTRAN_TRANS_DEPS = fortran/gfortran.h fortran/intrinsic.h fortran/trans-array.h \
    fortran/trans-const.h fortran/trans-const.h fortran/trans.h \
    fortran/trans-stmt.h fortran/trans-types.h \
    $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_H) coretypes.h $(GGC_H)

fortran/f95-lang.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \
  gt-fortran-f95-lang.h gtype-fortran.h $(CGRAPH_H) $(TARGET_H) \
  $(BUILTINS_DEF) fortran/types.def
fortran/scanner.o: toplev.h
fortran/convert.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans-decl.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-decl.h \
  $(CGRAPH_H) $(TARGET_H) $(FUNCTION_H) $(FLAGS_H) $(RTL_H) $(TREE_GIMPLE_H) \
  $(TREE_DUMP_H)
fortran/trans-types.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-types.h \
  $(REAL_H) toplev.h $(TARGET_H)
fortran/trans-const.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans-expr.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h
fortran/trans-stmt.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h
fortran/trans-openmp.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans-io.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-io.h \
  fortran/ioparm.def
fortran/trans-array.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans-intrinsic.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \
  gt-fortran-trans-intrinsic.h
fortran/dependency.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h
fortran/trans-common.o: $(GFORTRAN_TRANS_DEPS) $(TARGET_H) $(RTL_H)
fortran/resolve.o: fortran/dependency.h
fortran/options.o: $(TARGET_H)
