# -*- makefile -*-
# Top level makefile fragment for GNU gfortran, the GNU Fortran 95 compiler.
# Copyright (C) 2002-2013 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 3, 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 COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

# 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.install-common, foo.install-man, foo.install-info, foo.install-pdf,
# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# 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 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/class.o fortran/constructor.o fortran/cpp.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 fortran/target-memory.o

F95_OBJS = $(F95_PARSER_OBJS) $(FORTRAN_TARGET_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 fortran/frontend-passes.o

fortran_OBJS = $(F95_OBJS) gfortranspec.o

#
# 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) coretypes.h intl.h $(OPTS_H)
	(SHLIB='$(SHLIB)'; \
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \
		$(INCLUDES) $(srcdir)/fortran/gfortranspec.c)

# Create the compiler driver gfortran.
GFORTRAN_D_OBJS = $(GCC_OBJS) gfortranspec.o
gfortran$(exeext): $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
	$(LIBDEPS)
	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
	  $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
	  $(EXTRA_GCC_LIBS) $(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)

# The compiler itself is called f951.
f951$(exeext): $(F95_OBJS) \
		$(BACKEND) $(LIBDEPS) attribs.o
	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
		$(F95_OBJS) $(BACKEND) $(LIBS) attribs.o $(BACKENDLIBS)

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 doc/gfc-internals.info
fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi

F95_HTMLFILES = $(build_htmldir)/gfortran

fortran.html: $(F95_HTMLFILES)/index.html

fortran.install-html: $(F95_HTMLFILES)
	@$(NORMAL_INSTALL)
	test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)"
	@list='$(F95_HTMLFILES)'; for p in $$list; do \
	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
	  f=$(html__strip_dir) \
	  if test -d "$$d$$p"; then \
	    echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
	  else \
	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
	  fi; \
	done

F95_PDFFILES = doc/gfortran.pdf

fortran.pdf: $(F95_PDFFILES) doc/gfc-internals.pdf

fortran.install-pdf: $(F95_PDFFILES)
	@$(NORMAL_INSTALL)
	test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
	@list='$(F95_PDFFILES)'; for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  f=$(pdf__strip_dir) \
	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
	done

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
check-f95-subtargets : check-gfortran-subtargets
check-fortran-subtargets : check-gfortran-subtargets
lang_checks += check-gfortran
lang_checks_parallelized += check-gfortran
# For description see comment above check_gcc_parallelize in gcc/Makefile.in.
check_gfortran_parallelize = dg.exp=gfortran.dg/\[adAD\]* \
			     dg.exp=gfortran.dg/\[bcBC\]* \
			     dg.exp=gfortran.dg/\[nopNOP\]* \
			     dg.exp=gfortran.dg/\[isuvISUV\]* \
			     dg.exp=gfortran.dg/\[efhkqrxzEFHKQRXZ\]* \
			     dg.exp=gfortran.dg/\[0-9gjlmtwyGJLMTWY\]*

# 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_v3.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) -DBUGURL="$(BUGURL_TEXI)" \
	  < $(srcdir)/fortran/invoke.texi > $@

# GFORTRAN internals documentation.
GFC_INTERNALS_TEXI = \
  $(srcdir)/fortran/gfc-internals.texi \
  $(srcdir)/doc/include/fdl.texi \
  $(srcdir)/doc/include/gcc-common.texi \
  gcc-vers.texi

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

doc/gfc-internals.dvi: $(GFC_INTERNALS_TEXI)
	$(TEXI2DVI) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $<

doc/gfc-internals.pdf: $(GFC_INTERNALS_TEXI)
	$(TEXI2PDF) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $<

# Create or recreate the gfortran private include file directory.
install-finclude-dir: installdirs
	$(mkinstalldirs) -m 0755 $(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-plugin:

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/libgfortran.h \
		fortran/intrinsic.h fortran/match.h fortran/constructor.h \
		fortran/parse.h fortran/arith.h fortran/target-memory.h \
		$(CONFIG_H) $(SYSTEM_H) $(TM_H) $(TM_P_H) coretypes.h \
		dumpfile.h $(TREE_H) dumpfile.h $(GGC_H) $(VEC_H) \
		$(FLAGS_H) $(DIAGNOSTIC_H) errors.h $(FUNCTION_H) \
		fortran/iso-c-binding.def fortran/iso-fortran-env.def
fortran/openmp.o: pointer-set.h $(TARGET_H) toplev.h

GFORTRAN_TRANS_DEPS = fortran/gfortran.h fortran/libgfortran.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/iso-c-binding.def fortran/iso-fortran-env.def

CFLAGS-fortran/cpp.o += $(TARGET_SYSTEM_ROOT_DEFINE)
fortran/f95-lang.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \
  gt-fortran-f95-lang.h gtype-fortran.h $(CGRAPH_H) $(TARGET_H) fortran/cpp.h \
  $(BUILTINS_DEF) fortran/types.def \
  $(TM_H) debug.h langhooks.h $(FLAGS_H) $(EXPR_H) $(LANGHOOKS_DEF_H) \
  libfuncs.h expr.h $(DIAGNOSTIC_H)
fortran/scanner.o: toplev.h fortran/cpp.h
fortran/convert.o: $(GFORTRAN_TRANS_DEPS) convert.h
fortran/frontend-passes.o: $(GFORTRAN_TRANS_DEPS)
fortran/trans.o: $(GFORTRAN_TRANS_DEPS) tree-iterator.h
fortran/trans-decl.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-decl.h \
  $(CGRAPH_H) $(TARGET_H) $(FUNCTION_H) $(FLAGS_H) $(RTL_H) $(GIMPLE_H) \
  $(TREE_DUMP_H) debug.h pointer-set.h
fortran/trans-types.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-types.h \
  $(REAL_H) toplev.h $(TARGET_H) $(FLAGS_H) dwarf2out.h
fortran/trans-const.o: $(GFORTRAN_TRANS_DEPS) realmpfr.h
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) $(GIMPLE_H)
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/data.h fortran/target-memory.h
fortran/data.o: fortran/data.h
fortran/options.o: $(PARAMS_H) $(TARGET_H) fortran/cpp.h
fortran/cpp.o: fortran/cpp.c incpath.h incpath.o cppbuiltin.h
