@@ -435,14 +435,27 @@ end program]])],
435435 # If we got all the stuff from above, then also look for the new
436436 # F08 syntax that we can use for the use_mpif08 module.
437437
438- # We need to have ignore TKR functionality to build the mpi_f08
438+ OMPI_FORTRAN_HAVE_TS= 0
439+ OMPI_MPI_SUBARRAYS_SUPPORTED= .false.
440+ OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING= .false.
441+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
442+ [OMPI_FORTRAN_CHECK_TS([OMPI_FORTRAN_HAVE_TS= 1])])
443+
444+ # We need to have ignore TKR or the ISO Fortran bindings functionality to build the mpi_f08
439445 # module
440- AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
441- test $OMPI_FORTRAN_HAVE_IGNORE_TKR -eq 1],
442- [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
443- OMPI_FORTRAN_F08_PREDECL= $OMPI_FORTRAN_IGNORE_TKR_PREDECL
444- OMPI_FORTRAN_F08_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
445- ])
446+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
447+ [AS_IF([test $OMPI_FORTRAN_HAVE_IGNORE_TKR -eq 1],
448+ [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
449+ OMPI_FORTRAN_F08_PREDECL= $OMPI_FORTRAN_IGNORE_TKR_PREDECL
450+ OMPI_FORTRAN_F08_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
451+ ])
452+ AS_IF([test $OMPI_FORTRAN_HAVE_TS -eq 1],
453+ [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
454+ OMPI_MPI_SUBARRAYS_SUPPORTED= .true.
455+ OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING= .true.])])
456+
457+ AC_SUBST(OMPI_MPI_SUBARRAYS_SUPPORTED)
458+ AC_SUBST(OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING)
446459
447460 # The overall "_BIND_C" variable will be set to 1 if we have all
448461 # the necessary forms of BIND(C)
@@ -576,17 +589,13 @@ end type test_mpi_handle],
576589 ])
577590
578591 OMPI_FORTRAN_NEED_WRAPPER_ROUTINES= 1
579- OMPI_FORTRAN_F08_PREDECL= ' !'
580- OMPI_FORTRAN_F08_TYPE= real
581592 OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK= 0
582593 AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
583594 test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
584595 [ # Look for Fortran 2008 assumed rank syntax
585596 OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK(
586597 [ # If we have assumed rank, we can build the use
587598 # mpi_f08 module "better"
588- OMPI_FORTRAN_F08_PREDECL= ' !'
589- OMPI_FORTRAN_F08_TYPE= ' type(*), dimension(..)'
590599 OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK= 1])
591600
592601 # Which mpi_f08 implementation are we using?
@@ -616,6 +625,12 @@ end type test_mpi_handle],
616625 [OMPI_FORTRAN_ELEMENTAL_TYPE= ])])
617626 AC_SUBST(OMPI_FORTRAN_ELEMENTAL_TYPE)
618627
628+ OMPI_FORTRAN_HAVE_C_ISO_FORTRAN= 0
629+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
630+ test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
631+ [OMPI_FORTRAN_CHECK_TS([OMPI_FORTRAN_HAVE_TS= 1],
632+ [OMPI_FORTRAN_HAVE_TS= 0])])
633+
619634 # Note: the current implementation *only* has wrappers;
620635 # there is no optimized implementation for a "good"
621636 # compiler. I'm leaving the above logic in place for
@@ -778,10 +793,9 @@ end type test_mpi_handle],
778793 # This goes into mpifort-wrapper-data.txt
779794 AC_SUBST(OMPI_FORTRAN_USEMPIF08_LIB)
780795
781- # These go into interfaces/mpi-f08-interfaces-[no]bind.h (and
782- # mpi-f*-interfaces*.h files)
783- AC_SUBST(OMPI_FORTRAN_F08_PREDECL)
784- AC_SUBST(OMPI_FORTRAN_F08_TYPE)
796+ # These go into mod/mpi-f08-interfaces.h
797+ AC_SUBST(OMPI_F08_IGNORE_TKR_PREDECL)
798+ AC_SUBST(OMPI_F08_IGNORE_TKR_TYPE)
785799
786800 AC_SUBST(OMPI_MPI_PREFIX)
787801 AC_SUBST(OMPI_MPI_BIND_PREFIX)
@@ -863,6 +877,25 @@ end type test_mpi_handle],
863877 # For configure-fortran-output.h
864878 AC_SUBST(OMPI_FORTRAN_HAVE_BIND_C)
865879
880+ AM_CONDITIONAL(OMPI_FORTRAN_HAVE_TS,
881+ [test $OMPI_FORTRAN_HAVE_TS -eq 1])
882+ AC_SUBST(OMPI_FORTRAN_HAVE_TS)
883+ AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_TS],
884+ [$OMPI_FORTRAN_HAVE_TS ],
885+ [For ompi/mpi/fortran/use-mpi-f08/base/ts.* : whether the compiler supports TS 29113 or not])
886+
887+ AS_IF([test $OMPI_FORTRAN_HAVE_TS -eq 1],
888+ [OMPI_F08_IGNORE_TKR_TYPE= " type(*), dimension(..)"
889+ OMPI_F08_IGNORE_TKR_PREDECL= " no attribute required for"
890+ OMPI_F08_BINDINGS_EXTENSION= " ts"
891+ OMPI_F08_BINDINGS_TS_SUFFIX= " ts" ],
892+ [OMPI_F08_IGNORE_TKR_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
893+ OMPI_F08_IGNORE_TKR_PREDECL= ${OMPI_FORTRAN_IGNORE_TKR_PREDECL: 1}
894+ OMPI_F08_BINDINGS_EXTENSION= " f"
895+ OMPI_F08_BINDINGS_TS_SUFFIX= " " ])
896+ AC_SUBST(OMPI_F08_BINDINGS_EXTENSION)
897+ AC_SUBST(OMPI_F08_BINDINGS_TS_SUFFIX)
898+
866899 # Somewhat redundant because ompi/Makefile.am won't traverse into
867900 # ompi/mpi/fortran/use-mpi-f08 if it's not to be built, but we
868901 # might as well have ompi/mpi/fortran/use-mpi-f08/Makefile.am be
0 commit comments