@@ -449,14 +449,27 @@ end program]])],
449449 # If we got all the stuff from above, then also look for the new
450450 # F08 syntax that we can use for the use_mpif08 module.
451451
452- # We need to have ignore TKR functionality to build the mpi_f08
452+ OMPI_FORTRAN_HAVE_TS= 0
453+ OMPI_MPI_SUBARRAYS_SUPPORTED= .false.
454+ OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING= .false.
455+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
456+ [OMPI_FORTRAN_CHECK_TS([OMPI_FORTRAN_HAVE_TS= 1])])
457+
458+ AC_SUBST(OMPI_MPI_SUBARRAYS_SUPPORTED)
459+ AC_SUBST(OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING)
460+
461+ # We need to have ignore TKR or the ISO Fortran bindings functionality to build the mpi_f08
453462 # module
454- AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
455- test $OMPI_FORTRAN_HAVE_IGNORE_TKR -eq 1],
456- [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
457- OMPI_FORTRAN_F08_PREDECL= $OMPI_FORTRAN_IGNORE_TKR_PREDECL
458- OMPI_FORTRAN_F08_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
459- ])
463+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
464+ [AS_IF([test $OMPI_FORTRAN_HAVE_IGNORE_TKR -eq 1],
465+ [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
466+ OMPI_FORTRAN_F08_PREDECL= $OMPI_FORTRAN_IGNORE_TKR_PREDECL
467+ OMPI_FORTRAN_F08_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
468+ ])
469+ AS_IF([test $OMPI_FORTRAN_HAVE_TS -eq 1],
470+ [OMPI_BUILD_FORTRAN_BINDINGS= $OMPI_FORTRAN_USEMPIF08_BINDINGS
471+ OMPI_MPI_SUBARRAYS_SUPPORTED= .true.
472+ OMPI_MPI_ASYNC_PROTECTS_NONBLOCKING= .true.])])
460473
461474 # The overall "_BIND_C" variable will be set to 1 if we have all
462475 # the necessary forms of BIND(C)
@@ -590,17 +603,13 @@ end type test_mpi_handle],
590603 ])
591604
592605 OMPI_FORTRAN_NEED_WRAPPER_ROUTINES= 1
593- OMPI_FORTRAN_F08_PREDECL= ' !'
594- OMPI_FORTRAN_F08_TYPE= real
595606 OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK= 0
596607 AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
597608 test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
598609 [ # Look for Fortran 2008 assumed rank syntax
599610 OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK(
600611 [ # If we have assumed rank, we can build the use
601612 # mpi_f08 module "better"
602- OMPI_FORTRAN_F08_PREDECL= ' !'
603- OMPI_FORTRAN_F08_TYPE= ' type(*), dimension(..)'
604613 OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK= 1])
605614
606615 # Which mpi_f08 implementation are we using?
@@ -630,6 +639,12 @@ end type test_mpi_handle],
630639 [OMPI_FORTRAN_ELEMENTAL_TYPE= ])])
631640 AC_SUBST(OMPI_FORTRAN_ELEMENTAL_TYPE)
632641
642+ OMPI_FORTRAN_HAVE_C_ISO_FORTRAN= 0
643+ AS_IF([test $OMPI_TRY_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS && \
644+ test $OMPI_BUILD_FORTRAN_BINDINGS -ge $OMPI_FORTRAN_USEMPIF08_BINDINGS ],
645+ [OMPI_FORTRAN_CHECK_TS([OMPI_FORTRAN_HAVE_TS= 1],
646+ [OMPI_FORTRAN_HAVE_TS= 0])])
647+
633648 # Note: the current implementation *only* has wrappers;
634649 # there is no optimized implementation for a "good"
635650 # compiler. I'm leaving the above logic in place for
@@ -652,6 +667,8 @@ end type test_mpi_handle],
652667 AS_IF([test $OMPI_MIN_REQUIRED_FORTRAN_BINDINGS -gt $OMPI_BUILD_FORTRAN_BINDINGS ],
653668 [AC_MSG_ERROR([Cannot build requested Fortran bindings, aborting])])
654669
670+ dnl AC_CONFIG_FILES([ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h])
671+
655672 # -------------------
656673 # mpif.h final setup
657674 # -------------------
@@ -792,10 +809,9 @@ end type test_mpi_handle],
792809 # This goes into mpifort-wrapper-data.txt
793810 AC_SUBST(OMPI_FORTRAN_USEMPIF08_LIB)
794811
795- # These go into interfaces/mpi-f08-interfaces-[no]bind.h (and
796- # mpi-f*-interfaces*.h files)
797- AC_SUBST(OMPI_FORTRAN_F08_PREDECL)
798- AC_SUBST(OMPI_FORTRAN_F08_TYPE)
812+ # These go into mod/mpi-f08-interfaces.h
813+ AC_SUBST(OMPI_F08_IGNORE_TKR_PREDECL)
814+ AC_SUBST(OMPI_F08_IGNORE_TKR_TYPE)
799815
800816 AC_SUBST(OMPI_MPI_PREFIX)
801817 AC_SUBST(OMPI_MPI_BIND_PREFIX)
@@ -877,6 +893,22 @@ end type test_mpi_handle],
877893 # For configure-fortran-output.h
878894 AC_SUBST(OMPI_FORTRAN_HAVE_BIND_C)
879895
896+ AM_CONDITIONAL(OMPI_FORTRAN_HAVE_TS,
897+ [test $OMPI_FORTRAN_HAVE_TS -eq 1])
898+ AC_SUBST(OMPI_FORTRAN_HAVE_TS)
899+
900+ AS_IF([test $OMPI_FORTRAN_HAVE_TS -eq 1],
901+ [OMPI_F08_IGNORE_TKR_TYPE= " type(*), dimension(..)"
902+ OMPI_F08_IGNORE_TKR_PREDECL= " no attribute required for"
903+ OMPI_F08_BINDINGS_EXTENSION= " ts"
904+ OMPI_F08_BINDINGS_TS_SUFFIX= " ts" ],
905+ [OMPI_F08_IGNORE_TKR_TYPE= $OMPI_FORTRAN_IGNORE_TKR_TYPE
906+ OMPI_F08_IGNORE_TKR_PREDECL= ${OMPI_FORTRAN_IGNORE_TKR_PREDECL: 1}
907+ OMPI_F08_BINDINGS_EXTENSION= " f"
908+ OMPI_F08_BINDINGS_TS_SUFFIX= " " ])
909+ AC_SUBST(OMPI_F08_BINDINGS_EXTENSION)
910+ AC_SUBST(OMPI_F08_BINDINGS_TS_SUFFIX)
911+
880912 # Somewhat redundant because ompi/Makefile.am won't traverse into
881913 # ompi/mpi/fortran/use-mpi-f08 if it's not to be built, but we
882914 # might as well have ompi/mpi/fortran/use-mpi-f08/Makefile.am be
0 commit comments