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