Blob Blame History Raw
## DO NOT EDIT
## This file created by buildiface 
##
## vim: set ft=automake :

MOD              = @FCMODEXT@
MPIMOD           = @MPIMODNAME@
MPICONSTMOD      = @MPICONSTMODNAME@
MPISIZEOFMOD     = @MPISIZEOFMODNAME@
MPIBASEMOD       = @MPIBASEMODNAME@
FC_COMPILE_MODS  = $(LTFCCOMPILE)

# ensure that the buildiface script ends up in the release tarball
EXTRA_DIST += src/binding/fortran/use_mpi/buildiface

# additional perl files that are "require"d by use_mpi/buildiface and
# mpif_h/buildiface, respectively
EXTRA_DIST += src/binding/fortran/use_mpi/binding.sub src/binding/fortran/use_mpi/cf90tdefs

# FIXME need to add proper rules to rebuild the fortran sources generated by
# buildiface when buildiface is updated
if MAINTAINER_MODE
$(top_srcdir)/src/binding/fortran/use_mpi/Makefile.mk: src/binding/fortran/use_mpi/buildiface-stamp

src/binding/fortran/use_mpi/buildiface-stamp: $(top_srcdir)/src/binding/fortran/use_mpi/buildiface $(top_srcdir)/src/include/mpi.h.in
	( cd $(top_srcdir)/src/binding/fortran/use_mpi && ./buildiface )
endif MAINTAINER_MODE

# variables for custom "silent-rules" for F90 modules
mod_verbose = $(mod_verbose_$(V))
mod_verbose_ = $(mod_verbose_$(AM_DEFAULT_VERBOSITY))
mod_verbose_0 = @echo "  MOD     " $@;

if BUILD_FC_BINDING

# We need to tell some compilers (e.g., Solaris f90) to look for modules in the
# current directory when the source file is not in the working directory (i.e.,
# in a VPATH build)
AM_FCFLAGS += @FCINCFLAG@src/binding/fortran/use_mpi

# C source that implements both the C and the Fortran bindings for the type
# creation routines.  These go into libmpi.la and will be built a second time
# for inclusion in libpmpi.la on platforms that do not support weak symbols.
# If shared libraries are enabled then the compilation space doubles again.
mpi_sources += \
    src/binding/fortran/use_mpi/create_f90_int.c \
    src/binding/fortran/use_mpi/create_f90_real.c \
    src/binding/fortran/use_mpi/create_f90_complex.c

# utility code that has no PMPI equivalent
mpi_core_sources += src/binding/fortran/use_mpi/create_f90_util.c
AM_CPPFLAGS += -Isrc/binding/fortran/use_mpi
noinst_HEADERS +=                     \
    src/binding/fortran/use_mpi/create_f90_util.h \
    src/binding/fortran/use_mpi/cf90t.h           \
    src/binding/fortran/use_mpi/mpif90type.h      \
    src/binding/fortran/use_mpi/mpifnoext.h

nodist_noinst_HEADERS += \
    src/binding/fortran/use_mpi/mpif90model.h

# cause any .$(MOD) files to be output in the f90 bindings directory instead of
# the current directory
FC_COMPILE_MODS += $(FCMODOUTFLAG)src/binding/fortran/use_mpi

mpi_fc_sources += \
    src/binding/fortran/use_mpi/typef90cmplxf.c \
    src/binding/fortran/use_mpi/typef90realf.c \
    src/binding/fortran/use_mpi/typef90intf.c \
    src/binding/fortran/use_mpi/mpi.f90 \
    src/binding/fortran/use_mpi/mpi_constants.f90 \
    src/binding/fortran/use_mpi/mpi_sizeofs.f90 \
    src/binding/fortran/use_mpi/mpi_base.f90

# FIXME: We may want to edit the mpif.h to convert Fortran77-specific
# items (such as an integer*8 used for file offsets) into the
# corresponding Fortran 90 KIND type, to accomodate compilers that
# reject non-standard features such as integer*8 (such as the Intel
# Fortran compiler with -std95).
# We need the MPI constants in a separate module for some of the
# interface definitions (the ones that need MPI_ADDRESS_KIND or
# MPI_OFFSET_KIND)
src/binding/fortran/use_mpi/mpi.$(MOD)-stamp: src/binding/fortran/use_mpi/$(MPICONSTMOD).$(MOD) src/binding/fortran/use_mpi/$(MPISIZEOFMOD).$(MOD) src/binding/fortran/use_mpi/$(MPIBASEMOD).$(MOD) $(srcdir)/src/binding/fortran/use_mpi/mpi.f90 src/binding/fortran/use_mpi/mpifnoext.h
	@rm -f src/binding/fortran/use_mpi/mpi-tmp
	@touch src/binding/fortran/use_mpi/mpi-tmp
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] || [ ! -f mpi.$(FCEXT) ] ; then \
	       rm -f mpi.$(FCEXT) ; \
	       $(LN_S) $(abs_top_srcdir)/src/binding/fortran/use_mpi/mpi.f90 mpi.$(FCEXT) ; \
	   fi )
	$(mod_verbose)$(FC_COMPILE_MODS) -c src/binding/fortran/use_mpi/mpi.$(FCEXT) -o src/binding/fortran/use_mpi/mpi.lo
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] || [ ! -f mpi.$(FCEXT) ] ; then \
	       rm -f mpi.$(FCEXT) ; \
	   fi )
	@mv src/binding/fortran/use_mpi/mpi-tmp src/binding/fortran/use_mpi/mpi.$(MOD)-stamp

src/binding/fortran/use_mpi/mpi.lo src/binding/fortran/use_mpi/$(MPIMOD).$(MOD): src/binding/fortran/use_mpi/mpi.$(MOD)-stamp
## Recover from the removal of $@
	@if test -f $@; then :; else \
	  trap 'rm -rf src/binding/fortran/use_mpi/mpi-lock src/binding/fortran/use_mpi/mpi.$(MOD)-stamp' 1 2 13 15; \
	  if mkdir src/binding/fortran/use_mpi/mpi-lock 2>/dev/null; then \
## This code is being executed by the first process.
	    rm -f src/binding/fortran/use_mpi/mpi.$(MOD)-stamp; \
	    $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi/mpi.$(MOD)-stamp; \
	    rmdir src/binding/fortran/use_mpi/mpi-lock; \
	  else \
## This code is being executed by the follower processes.
## Wait until the first process is done.
	    while test -d src/binding/fortran/use_mpi/mpi-lock; do sleep 1; done; \
## Succeed if and only if the first process succeeded.
	    test -f src/binding/fortran/use_mpi/mpi.$(MOD)-stamp; exit $$?; \
	  fi; \
	fi

CLEANFILES += src/binding/fortran/use_mpi/mpi.$(MOD)-stamp src/binding/fortran/use_mpi/$(MPIMOD).$(MOD) src/binding/fortran/use_mpi/mpi.lo src/binding/fortran/use_mpi/mpi-tmp


src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp: src/binding/fortran/use_mpi/mpi_constants.f90 src/binding/fortran/use_mpi/mpifnoext.h
	@rm -f src/binding/fortran/use_mpi/mpi_constants-tmp
	@touch src/binding/fortran/use_mpi/mpi_constants-tmp
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] || [ ! -f mpi_constants.$(FCEXT) ] ; then \
	       rm -f mpi_constants.$(FCEXT) ; \
	       $(LN_S) $(abs_top_srcdir)/src/binding/fortran/use_mpi/mpi_constants.f90 mpi_constants.$(FCEXT) ; \
	   fi )
	$(mod_verbose)$(FC_COMPILE_MODS) -c src/binding/fortran/use_mpi/mpi_constants.$(FCEXT) -o src/binding/fortran/use_mpi/mpi_constants.lo
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] || [ ! -f mpi_constants.$(FCEXT) ] ; then \
	       rm -f mpi_constants.$(FCEXT) ; \
	   fi )
	@mv src/binding/fortran/use_mpi/mpi_constants-tmp src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp

src/binding/fortran/use_mpi/mpi_constants.lo src/binding/fortran/use_mpi/$(MPICONSTMOD).$(MOD): src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp
## Recover from the removal of $@
	@if test -f $@; then :; else \
	  trap 'rm -rf src/binding/fortran/use_mpi/mpi_constants-lock src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp' 1 2 13 15; \
	  if mkdir src/binding/fortran/use_mpi/mpi_constants-lock 2>/dev/null; then \
## This code is being executed by the first process.
	    rm -f src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp; \
	    $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp; \
	    rmdir src/binding/fortran/use_mpi/mpi_constants-lock; \
	  else \
## This code is being executed by the follower processes.
## Wait until the first process is done.
	    while test -d src/binding/fortran/use_mpi/mpi_constants-lock; do sleep 1; done; \
## Succeed if and only if the first process succeeded.
	    test -f src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp; exit $$?; \
	  fi; \
	fi

CLEANFILES += src/binding/fortran/use_mpi/mpi_constants.$(MOD)-stamp src/binding/fortran/use_mpi/$(MPICONSTMOD).$(MOD) src/binding/fortran/use_mpi/mpi_constants.lo src/binding/fortran/use_mpi/mpi_constants-tmp


src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp: src/binding/fortran/use_mpi/mpi_sizeofs.f90 src/binding/fortran/use_mpi/mpifnoext.h
	@rm -f src/binding/fortran/use_mpi/mpi_sizeofs-tmp
	@touch src/binding/fortran/use_mpi/mpi_sizeofs-tmp
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] ; then \
	       rm -f mpi_sizeofs.$(FCEXT) ; \
	       $(LN_S) mpi_sizeofs.f90 mpi_sizeofs.$(FCEXT) ; \
	   fi )
	$(mod_verbose)$(FC_COMPILE_MODS) -c src/binding/fortran/use_mpi/mpi_sizeofs.$(FCEXT) -o src/binding/fortran/use_mpi/mpi_sizeofs.lo
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] ; then \
	       rm -f mpi_sizeofs.$(FCEXT) ; \
	   fi )
	@mv src/binding/fortran/use_mpi/mpi_sizeofs-tmp src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp

src/binding/fortran/use_mpi/mpi_sizeofs.lo src/binding/fortran/use_mpi/$(MPISIZEOFMOD).$(MOD): src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp
## Recover from the removal of $@
	@if test -f $@; then :; else \
	  trap 'rm -rf src/binding/fortran/use_mpi/mpi_sizeofs-lock src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp' 1 2 13 15; \
	  if mkdir src/binding/fortran/use_mpi/mpi_sizeofs-lock 2>/dev/null; then \
## This code is being executed by the first process.
	    rm -f src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp; \
	    $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp; \
	    rmdir src/binding/fortran/use_mpi/mpi_sizeofs-lock; \
	  else \
## This code is being executed by the follower processes.
## Wait until the first process is done.
	    while test -d src/binding/fortran/use_mpi/mpi_sizeofs-lock; do sleep 1; done; \
## Succeed if and only if the first process succeeded.
	    test -f src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp; exit $$?; \
	  fi; \
	fi

CLEANFILES += src/binding/fortran/use_mpi/mpi_sizeofs.$(MOD)-stamp src/binding/fortran/use_mpi/$(MPISIZEOFMOD).$(MOD) src/binding/fortran/use_mpi/mpi_sizeofs.lo src/binding/fortran/use_mpi/mpi_sizeofs-tmp


src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp: src/binding/fortran/use_mpi/mpi_base.f90 src/binding/fortran/use_mpi/$(MPICONSTMOD).$(MOD)
	@rm -f src/binding/fortran/use_mpi/mpi_base-tmp
	@touch src/binding/fortran/use_mpi/mpi_base-tmp
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] ; then \
	       rm -f mpi_base.$(FCEXT) ; \
	       $(LN_S) mpi_base.f90 mpi_base.$(FCEXT) ; \
	   fi )
	$(mod_verbose)$(FC_COMPILE_MODS) -c src/binding/fortran/use_mpi/mpi_base.$(FCEXT) -o src/binding/fortran/use_mpi/mpi_base.lo
	@( cd src/binding/fortran/use_mpi && \
	   if [ "$(FCEXT)" != "f90" ] ; then \
	       rm -f mpi_base.$(FCEXT) ; \
	   fi )
	@mv src/binding/fortran/use_mpi/mpi_base-tmp src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp

src/binding/fortran/use_mpi/mpi_base.lo src/binding/fortran/use_mpi/$(MPIBASEMOD).$(MOD): src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp
## Recover from the removal of $@
	@if test -f $@; then :; else \
	  trap 'rm -rf src/binding/fortran/use_mpi/mpi_base-lock src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp' 1 2 13 15; \
	  if mkdir src/binding/fortran/use_mpi/mpi_base-lock 2>/dev/null; then \
## This code is being executed by the first process.
	    rm -f src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp; \
	    $(MAKE) $(AM_MAKEFLAGS) src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp; \
	    rmdir src/binding/fortran/use_mpi/mpi_base-lock; \
	  else \
## This code is being executed by the follower processes.
## Wait until the first process is done.
	    while test -d src/binding/fortran/use_mpi/mpi_base-lock; do sleep 1; done; \
## Succeed if and only if the first process succeeded.
	    test -f src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp; exit $$?; \
	  fi; \
	fi

CLEANFILES += src/binding/fortran/use_mpi/mpi_base.$(MOD)-stamp src/binding/fortran/use_mpi/$(MPIBASEMOD).$(MOD) src/binding/fortran/use_mpi/mpi_base.lo src/binding/fortran/use_mpi/mpi_base-tmp



mpi_fc_modules += \
    src/binding/fortran/use_mpi/$(MPIMOD).$(MOD) \
    src/binding/fortran/use_mpi/$(MPISIZEOFMOD).$(MOD) \
    src/binding/fortran/use_mpi/$(MPICONSTMOD).$(MOD) \
    src/binding/fortran/use_mpi/$(MPIBASEMOD).$(MOD)

# We need a free-format version of mpif.h with no external commands,
# including no wtime/wtick (removing MPI_WTICK also removes MPI_WTIME,
# but leave MPI_WTIME_IS_GLOBAL).
# Also allow REAL*8 or DOUBLE PRECISION for the MPI_WTIME/MPI_WTICK
# declarations
src/binding/fortran/use_mpi/mpifnoext.h: src/binding/fortran/mpif_h/mpif.h
	rm -f $@
	sed -e 's/^C/\!/g' -e '/EXTERNAL/d' \
	-e '/REAL\*8/d' \
	-e '/DOUBLE PRECISION/d' \
	-e '/MPI_WTICK/d' src/binding/fortran/mpif_h/mpif.h > $@

CLEANFILES += src/binding/fortran/use_mpi/mpifnoext.h

MAINTAINERCLEANFILES += $(mpi_sources) fproto.h
CLEANFILES += $(mpi_fc_modules)

# Documentation sources
# FIXME disabled for now until we sort out how to handle docs correctly in the
# new build system
#doc_sources =
#DOCDESTDIRS = html:www/www1,man:man/man1,latex:doc/refman
#doc_HTML_SOURCES  = ${doc_sources}
#doc_MAN_SOURCES   = ${doc_sources}
#doc_LATEX_SOURCES = ${doc_sources}

endif BUILD_FC_BINDING