1
1

Make the use of PROTECTED in the mpi_f08 module be optional.

Add a configure test to see if the Fortran compiler supports the
PROTECTED keyword.  If it does, use in mpi-f08-types.F90 (via a macro
defined in configure-fortran-output-bottom.h).

This is needed to support the PGI 9 Fortran compiler, which does not
support the PROTECTED keyword.

Note that regardless of whether we want to support the PGI 9 Fortran
compiler + mpi_f08, we need to correctly detect whether PROTECTED
works or not, and then use that determination as a criteria for
building the mpi_f08 module.  Previously, mpi-f08-types.F90 used
PROTECTED unconditionally, and we didn't test for it in configure.  So
if a compiler (e.g., PGI 9) supported everything else but didn't
support PROTECTED, it would try to compile the mpi_f08 stuff and choke
on the use of PROTECTED.

Refs trac:4093

This commit was SVN r30273.

The following Trac tickets were found above:
  Ticket 4093 --> https://svn.open-mpi.org/trac/ompi/ticket/4093
Этот коммит содержится в:
Jeff Squyres 2014-01-13 18:35:42 +00:00
родитель c6c6cbddb2
Коммит 5f17bc3c2c
6 изменённых файлов: 153 добавлений и 78 удалений

44
config/ompi_fortran_check_protected.m4 Обычный файл
Просмотреть файл

@ -0,0 +1,44 @@
dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
dnl of Tennessee Research Foundation. All rights
dnl reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2010-2014 Cisco Systems, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
# Check whether or not the Fortran compiler supports the "protected"
# keyword in derived types or not.
# OMPI_FORTRAN_CHECK_PROTECTED([action if found],
# [action if not found])
# ----------------------------------------------------
AC_DEFUN([OMPI_FORTRAN_CHECK_PROTECTED],[
AS_VAR_PUSHDEF([protected_var], [ompi_cv_fortran_protected])
AC_CACHE_CHECK([if Fortran compiler supports PROTECTED], protected_var,
[AC_LANG_PUSH([Fortran])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[module test_for_protected
integer, protected :: bogus
end module test_for_protected]])],
[AS_VAR_SET(protected_var, yes)],
[AS_VAR_SET(protected_var, no)])
touch conftest_foo.mod
rm -rf *.mod 2>/dev/null
AC_LANG_POP([Fortran])
])
AS_VAR_IF(protected_var, [yes], [$1], [$2])
AS_VAR_POPDEF([protected_var])dnl
])

Просмотреть файл

@ -395,15 +395,23 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
OMPI_FORTRAN_HAVE_PRIVATE=0
AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
$OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
[ # Does the compiler support the "private"
[ # Does the compiler support "private"
OMPI_FORTRAN_CHECK_PRIVATE(
[OMPI_FORTRAN_HAVE_PRIVATE=1],
[OMPI_FORTRAN_HAVE_PRIVATE=0])])
OMPI_FORTRAN_HAVE_PROTECTED=0
AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
$OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
[ # Does the compiler support "protected"
OMPI_FORTRAN_CHECK_PROTECTED(
[OMPI_FORTRAN_HAVE_PROTECTED=1],
[OMPI_FORTRAN_HAVE_PROTECTED=0])])
OMPI_FORTRAN_HAVE_ABSTRACT=0
AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
$OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
[ # Does the compiler support the "abstract"
[ # Does the compiler support "abstract"
OMPI_FORTRAN_CHECK_ABSTRACT(
[OMPI_FORTRAN_HAVE_ABSTRACT=1],
[OMPI_FORTRAN_HAVE_ABSTRACT=0])])
@ -411,7 +419,7 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
OMPI_FORTRAN_HAVE_ASYNCHRONOUS=0
AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
$OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
[ # Does the compiler support the "asynchronous"
[ # Does the compiler support "asynchronous"
OMPI_FORTRAN_CHECK_ASYNCHRONOUS(
[OMPI_FORTRAN_HAVE_ASYNCHRONOUS=1],
[OMPI_FORTRAN_HAVE_ASYNCHRONOUS=0])])
@ -419,7 +427,7 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
OMPI_FORTRAN_HAVE_PROCEDURE=0
AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \
$OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1],
[ # Does the compiler support the "procedure"
[ # Does the compiler support "procedure"
OMPI_FORTRAN_CHECK_PROCEDURE(
[OMPI_FORTRAN_HAVE_PROCEDURE=1],
[OMPI_FORTRAN_HAVE_PROCEDURE=0])])
@ -658,6 +666,12 @@ end type test_mpi_handle],
[$OMPI_FORTRAN_HAVE_PRIVATE],
[For mpi-f08-types.f90 and ompi_info: whether the compiler supports the "private" keyword or not (used in MPI_Status)])
# For configure-fortran-output.h, mpi-f08-types.F90 (and ompi_info)
AC_SUBST([OMPI_FORTRAN_HAVE_PROTECTED])
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_HAVE_PROTECTED],
[$OMPI_FORTRAN_HAVE_PROTECTED],
[For mpi-f08-types.f90 and .F90 and ompi_info: whether the compiler supports the "protected" keyword or not])
# For configure-fortran-output.h, mpi-f08-interfaces-callbacks.F90
# (and ompi_info)
AC_SUBST([OMPI_FORTRAN_HAVE_ABSTRACT])

Просмотреть файл

@ -1,6 +1,6 @@
! -*- f90 -*-
!
! Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2014 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All rights reserved.
! $COPYRIGHT$
@ -87,47 +87,47 @@ module mpi_f08_types
! Pre-defined handles
!
type(MPI_Comm), protected, bind(C, name="ompi_f08_mpi_comm_world") :: MPI_COMM_WORLD
type(MPI_Comm), protected, bind(C, name="ompi_f08_mpi_comm_self") :: MPI_COMM_SELF
type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_world") OMPI_PROTECTED :: MPI_COMM_WORLD
type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_self") OMPI_PROTECTED :: MPI_COMM_SELF
type(MPI_Group), protected, bind(C, name="ompi_f08_mpi_group_empty") :: MPI_GROUP_EMPTY
type(MPI_Group), bind(C, name="ompi_f08_mpi_group_empty") OMPI_PROTECTED :: MPI_GROUP_EMPTY
type(MPI_Errhandler), protected, bind(C, name="ompi_f08_mpi_errors_are_fatal") :: MPI_ERRORS_ARE_FATAL
type(MPI_Errhandler), protected, bind(C, name="ompi_f08_mpi_errors_return") :: MPI_ERRORS_RETURN
type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errors_are_fatal") OMPI_PROTECTED :: MPI_ERRORS_ARE_FATAL
type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errors_return") OMPI_PROTECTED :: MPI_ERRORS_RETURN
type(MPI_Message), protected, bind(C, name="ompi_f08_mpi_message_no_proc") :: MPI_MESSAGE_NO_PROC
type(MPI_Message), bind(C, name="ompi_f08_mpi_message_no_proc") OMPI_PROTECTED :: MPI_MESSAGE_NO_PROC
type(MPI_Info), protected, bind(C, name="ompi_f08_mpi_info_env") :: MPI_INFO_ENV
type(MPI_Info), bind(C, name="ompi_f08_mpi_info_env") OMPI_PROTECTED :: MPI_INFO_ENV
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_max" ) :: MPI_MAX
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_min" ) :: MPI_MIN
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_sum" ) :: MPI_SUM
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_prod" ) :: MPI_PROD
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_land" ) :: MPI_LAND
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_band" ) :: MPI_BAND
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_lor" ) :: MPI_LOR
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_bor" ) :: MPI_BOR
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_lxor" ) :: MPI_LXOR
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_bxor" ) :: MPI_BXOR
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_maxloc" ) :: MPI_MAXLOC
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_minloc" ) :: MPI_MINLOC
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_replace" ) :: MPI_REPLACE
type(MPI_Op), bind(C, name="ompi_f08_mpi_max" ) OMPI_PROTECTED :: MPI_MAX
type(MPI_Op), bind(C, name="ompi_f08_mpi_min" ) OMPI_PROTECTED :: MPI_MIN
type(MPI_Op), bind(C, name="ompi_f08_mpi_sum" ) OMPI_PROTECTED :: MPI_SUM
type(MPI_Op), bind(C, name="ompi_f08_mpi_prod" ) OMPI_PROTECTED :: MPI_PROD
type(MPI_Op), bind(C, name="ompi_f08_mpi_land" ) OMPI_PROTECTED :: MPI_LAND
type(MPI_Op), bind(C, name="ompi_f08_mpi_band" ) OMPI_PROTECTED :: MPI_BAND
type(MPI_Op), bind(C, name="ompi_f08_mpi_lor" ) OMPI_PROTECTED :: MPI_LOR
type(MPI_Op), bind(C, name="ompi_f08_mpi_bor" ) OMPI_PROTECTED :: MPI_BOR
type(MPI_Op), bind(C, name="ompi_f08_mpi_lxor" ) OMPI_PROTECTED :: MPI_LXOR
type(MPI_Op), bind(C, name="ompi_f08_mpi_bxor" ) OMPI_PROTECTED :: MPI_BXOR
type(MPI_Op), bind(C, name="ompi_f08_mpi_maxloc" ) OMPI_PROTECTED :: MPI_MAXLOC
type(MPI_Op), bind(C, name="ompi_f08_mpi_minloc" ) OMPI_PROTECTED :: MPI_MINLOC
type(MPI_Op), bind(C, name="ompi_f08_mpi_replace" ) OMPI_PROTECTED :: MPI_REPLACE
!
! NULL "handles" (indices)
!
type(MPI_Comm), protected, bind(C, name="ompi_f08_mpi_comm_null") :: MPI_COMM_NULL;
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_datatype_null") :: MPI_DATATYPE_NULL;
type(MPI_Errhandler), protected, bind(C, name="ompi_f08_mpi_errhandler_null") :: MPI_ERRHANDLER_NULL;
type(MPI_Group), protected, bind(C, name="ompi_f08_mpi_group_null") :: MPI_GROUP_NULL;
type(MPI_Info), protected, bind(C, name="ompi_f08_mpi_info_null") :: MPI_INFO_NULL;
type(MPI_Message), protected, bind(C, name="ompi_f08_mpi_message_null") :: MPI_MESSAGE_NULL;
type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_op_null") :: MPI_OP_NULL;
type(MPI_Request), protected, bind(C, name="ompi_f08_mpi_request_null") :: MPI_REQUEST_NULL;
type(MPI_Win), protected, bind(C, name="ompi_f08_mpi_win_null") :: MPI_WIN_NULL;
type(MPI_Comm), bind(C, name="ompi_f08_mpi_comm_null") OMPI_PROTECTED :: MPI_COMM_NULL;
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_datatype_null") OMPI_PROTECTED :: MPI_DATATYPE_NULL;
type(MPI_Errhandler), bind(C, name="ompi_f08_mpi_errhandler_null") OMPI_PROTECTED :: MPI_ERRHANDLER_NULL;
type(MPI_Group), bind(C, name="ompi_f08_mpi_group_null") OMPI_PROTECTED :: MPI_GROUP_NULL;
type(MPI_Info), bind(C, name="ompi_f08_mpi_info_null") OMPI_PROTECTED :: MPI_INFO_NULL;
type(MPI_Message), bind(C, name="ompi_f08_mpi_message_null") OMPI_PROTECTED :: MPI_MESSAGE_NULL;
type(MPI_Op), bind(C, name="ompi_f08_mpi_op_null") OMPI_PROTECTED :: MPI_OP_NULL;
type(MPI_Request), bind(C, name="ompi_f08_mpi_request_null") OMPI_PROTECTED :: MPI_REQUEST_NULL;
type(MPI_Win), bind(C, name="ompi_f08_mpi_win_null") OMPI_PROTECTED :: MPI_WIN_NULL;
#if OMPI_PROVIDE_MPI_FILE_INTERFACE
type(MPI_File), protected, bind(C, name="ompi_f08_mpi_file_null") :: MPI_FILE_NULL;
type(MPI_File), bind(C, name="ompi_f08_mpi_file_null") OMPI_PROTECTED :: MPI_FILE_NULL;
#endif
!
@ -137,48 +137,48 @@ module mpi_f08_types
! They are defined in ompi/runtime/ompi_mpi_init.c
!
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_byte") :: MPI_BYTE
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_packed") :: MPI_PACKED
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_ub") :: MPI_UB
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_lb") :: MPI_LB
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_character") :: MPI_CHARACTER
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical") :: MPI_LOGICAL
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer") :: MPI_INTEGER
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer1") :: MPI_INTEGER1
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer2") :: MPI_INTEGER2
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer4") :: MPI_INTEGER4
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer8") :: MPI_INTEGER8
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_integer16") :: MPI_INTEGER16
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_real") :: MPI_REAL
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_real4") :: MPI_REAL4
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_real8") :: MPI_REAL8
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_real16") :: MPI_REAL16
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_double_precision") :: MPI_DOUBLE_PRECISION
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_complex") :: MPI_COMPLEX
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_complex8") :: MPI_COMPLEX8
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_complex16") :: MPI_COMPLEX16
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_complex32") :: MPI_COMPLEX32
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_double_complex") :: MPI_DOUBLE_COMPLEX
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_2real") :: MPI_2REAL
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_2double_precision") :: MPI_2DOUBLE_PRECISION
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_2integer") :: MPI_2INTEGER
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_2complex") :: MPI_2COMPLEX
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_2double_complex") :: MPI_2DOUBLE_COMPLEX
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_real2") :: MPI_REAL2
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical1") :: MPI_LOGICAL1
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical2") :: MPI_LOGICAL2
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical4") :: MPI_LOGICAL4
type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical8") :: MPI_LOGICAL8
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_byte") OMPI_PROTECTED :: MPI_BYTE
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_packed") OMPI_PROTECTED :: MPI_PACKED
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_ub") OMPI_PROTECTED :: MPI_UB
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_lb") OMPI_PROTECTED :: MPI_LB
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_character") OMPI_PROTECTED :: MPI_CHARACTER
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical") OMPI_PROTECTED :: MPI_LOGICAL
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer") OMPI_PROTECTED :: MPI_INTEGER
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer1") OMPI_PROTECTED :: MPI_INTEGER1
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer2") OMPI_PROTECTED :: MPI_INTEGER2
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer4") OMPI_PROTECTED :: MPI_INTEGER4
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer8") OMPI_PROTECTED :: MPI_INTEGER8
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_integer16") OMPI_PROTECTED :: MPI_INTEGER16
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real") OMPI_PROTECTED :: MPI_REAL
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real4") OMPI_PROTECTED :: MPI_REAL4
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real8") OMPI_PROTECTED :: MPI_REAL8
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real16") OMPI_PROTECTED :: MPI_REAL16
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double_precision") OMPI_PROTECTED :: MPI_DOUBLE_PRECISION
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex") OMPI_PROTECTED :: MPI_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex8") OMPI_PROTECTED :: MPI_COMPLEX8
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex16") OMPI_PROTECTED :: MPI_COMPLEX16
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_complex32") OMPI_PROTECTED :: MPI_COMPLEX32
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_double_complex") OMPI_PROTECTED :: MPI_DOUBLE_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2real") OMPI_PROTECTED :: MPI_2REAL
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2double_precision") OMPI_PROTECTED :: MPI_2DOUBLE_PRECISION
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2integer") OMPI_PROTECTED :: MPI_2INTEGER
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2complex") OMPI_PROTECTED :: MPI_2COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_2double_complex") OMPI_PROTECTED :: MPI_2DOUBLE_COMPLEX
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_real2") OMPI_PROTECTED :: MPI_REAL2
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical1") OMPI_PROTECTED :: MPI_LOGICAL1
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical2") OMPI_PROTECTED :: MPI_LOGICAL2
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical4") OMPI_PROTECTED :: MPI_LOGICAL4
type(MPI_Datatype), bind(C, name="ompi_f08_mpi_logical8") OMPI_PROTECTED :: MPI_LOGICAL8
!... Special sentinel constants
!------------------------------
type(MPI_STATUS), bind(C, name="mpi_fortran_status_ignore") :: MPI_STATUS_IGNORE
type(MPI_STATUS), bind(C, name="mpi_fortran_statuses_ignore") :: MPI_STATUSES_IGNORE(1)
integer, bind(C, name="mpi_fortran_bottom") :: MPI_BOTTOM
integer, bind(C, name="mpi_fortran_in_place") :: MPI_IN_PLACE
integer, bind(C, name="mpi_fortran_argv_null") :: MPI_ARGV_NULL
integer, bind(C, name="mpi_fortran_argvs_null") :: MPI_ARGVS_NULL
integer, bind(C, name="mpi_fortran_errcodes_ignore") :: MPI_ERRCODES_IGNORE
type(MPI_STATUS), bind(C, name="mpi_fortran_status_ignore") OMPI_PROTECTED :: MPI_STATUS_IGNORE
type(MPI_STATUS), bind(C, name="mpi_fortran_statuses_ignore") OMPI_PROTECTED :: MPI_STATUSES_IGNORE(1)
integer, bind(C, name="mpi_fortran_bottom") OMPI_PROTECTED :: MPI_BOTTOM
integer, bind(C, name="mpi_fortran_in_place") OMPI_PROTECTED :: MPI_IN_PLACE
integer, bind(C, name="mpi_fortran_argv_null") OMPI_PROTECTED :: MPI_ARGV_NULL
integer, bind(C, name="mpi_fortran_argvs_null") OMPI_PROTECTED :: MPI_ARGVS_NULL
integer, bind(C, name="mpi_fortran_errcodes_ignore") OMPI_PROTECTED :: MPI_ERRCODES_IGNORE
!... Interfaces for operators with handles
!-----------------------------------------

Просмотреть файл

@ -1,6 +1,6 @@
! -*- fortran -*-
!
! Copyright (c) 2006-2013 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All rights reserved.
!
@ -45,4 +45,11 @@
#define OMPI_PRIVATE
#endif
! PROTECTED or not
#if OMPI_FORTRAN_HAVE_PROTECTED
#define OMPI_PROTECTED , PROTECTED
#else
#define OMPI_PROTECTED
#endif
#endif

Просмотреть файл

@ -1,6 +1,6 @@
! -*- fortran -*-
!
! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
! All rights reserved.
!
@ -26,6 +26,9 @@
! Whether we have PRIVATE or not
#define OMPI_FORTRAN_HAVE_PRIVATE @OMPI_FORTRAN_HAVE_PRIVATE@
! Whether we have PROTECTED or not
#define OMPI_FORTRAN_HAVE_PROTECTED @OMPI_FORTRAN_HAVE_PROTECTED@
! Whether we have ABSTRACT or not
#define OMPI_FORTRAN_HAVE_ABSTRACT @OMPI_FORTRAN_HAVE_ABSTRACT@

Просмотреть файл

@ -9,7 +9,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2007-2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
* $COPYRIGHT$
*
@ -93,6 +93,7 @@ void ompi_info_do_config(bool want_all)
char *fortran_have_bind_c_type;
char *fortran_have_bind_c_type_name;
char *fortran_have_private;
char *fortran_have_protected;
char *fortran_have_abstract;
char *fortran_have_asynchronous;
char *fortran_have_procedure;
@ -173,6 +174,7 @@ void ompi_info_do_config(bool want_all)
fortran_have_bind_c_type_name = OMPI_FORTRAN_HAVE_BIND_C_TYPE_NAME ?
"yes" : "no";
fortran_have_private = OMPI_FORTRAN_HAVE_PRIVATE ? "yes" : "no";
fortran_have_protected = OMPI_FORTRAN_HAVE_PROTECTED ? "yes" : "no";
fortran_have_abstract = OMPI_FORTRAN_HAVE_ABSTRACT ? "yes" : "no";
fortran_have_asynchronous = OMPI_FORTRAN_HAVE_ASYNCHRONOUS ? "yes" : "no";
fortran_have_procedure = OMPI_FORTRAN_HAVE_PROCEDURE ? "yes" : "no";
@ -183,7 +185,9 @@ void ompi_info_do_config(bool want_all)
module has */
if (OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS) {
/* Do we have everything? */
/* Do we have everything? (not including PROTECTED, which
isn't *needed* for the mpi_f08 module compliance -- it's
just *nice to have*) */
if (OMPI_BUILD_FORTRAN_F08_SUBARRAYS &&
OMPI_FORTRAN_HAVE_PRIVATE &&
OMPI_FORTRAN_HAVE_ABSTRACT &&
@ -390,6 +394,9 @@ void ompi_info_do_config(bool want_all)
opal_info_out("Fort PRIVATE",
"compiler:fortran:private",
fortran_have_private);
opal_info_out("Fort PROTECTED",
"compiler:fortran:protected",
fortran_have_protected);
opal_info_out("Fort ABSTRACT",
"compiler:fortran:abstract",
fortran_have_abstract);