Folks,

when OpenMPI is configured with --disable-weak-symbols and a fortran
2008 capable compiler (e.g. gcc 4.9),
MPI_STATUSES_IGNORE invoked from Fortran is not correctly interpreted as
it should.
/* instead of being a special array of statuses, it is an array of one
status, which can lead to buffer overflow and memory corruption */

A simple workaround is the attached workaround.patch

i could not find any reason why :
a) weak symbols matter here, since none of these are weak symbols
b) all 4 symbols are always defined no matter what

so i tried to improve this and came up with a much larger patch.
it comes in two patches :
1) fortran.patch : only compile some files and some piece of code if
fortran is supported
/* while i was working on a fix, that came as a pre-requisite for the
following patch */
2) weak.patch : only define the required symbols in fortran
   (e.g. one of CAPS, PLAIN, SINGLE_UNDERSCORE and DOUBLE_UNDERSCORE)
   and bind the f08 symbols to the correct C defined symbol

Since this is quite an important changeset, i did not commit it yet.

Could someone (Jeff ?) please review and comment ?

If the last two patches can be commited into the trunk, what about v1.8 ?
- should these patches land into the v1.8 branch as well ?
- is the workaround.patch enough for the v1.8 branch ?

Cheers,

Gilles

Index: ompi/mpi/fortran/base/constants.h
===================================================================
--- ompi/mpi/fortran/base/constants.h   (revision 32668)
+++ ompi/mpi/fortran/base/constants.h   (working copy)
@@ -12,6 +12,8 @@
  * Copyright (c) 2006-2012 Cisco Systems, Inc.  All rights reserved.
  * Copyright (c) 2011-2013 Inria.  All rights reserved.
  * Copyright (c) 2011-2012 Universite Bordeaux 1
+ * Copyright (c) 2014      Research Organization for Information Science
+ *                         and Technology (RIST). All rights reserved.
  * $COPYRIGHT$
  * 
  * Additional copyrights may follow
@@ -116,10 +118,8 @@
      mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__);

 /*
- * Create macros to do the checking.  Only check for all 4 if we have
- * weak symbols.  Otherwise, just check for the one relevant symbol.
+ * Create macros to do the checking.  Always check for all 4.
  */
-#if OPAL_HAVE_WEAK_SYMBOLS
 #define OMPI_IS_FORTRAN_BOTTOM(addr) \
   (addr == (void*) &MPI_FORTRAN_BOTTOM || \
    addr == (void*) &mpi_fortran_bottom || \
@@ -166,88 +166,6 @@
    addr == (void*) &mpi_fortran_statuses_ignore_ || \
    addr == (void*) &mpi_fortran_statuses_ignore__)

-#elif OMPI_FORTRAN_CAPS
-#define OMPI_IS_FORTRAN_BOTTOM(addr) \
-  (addr == (void*) &MPI_FORTRAN_BOTTOM)
-#define OMPI_IS_FORTRAN_IN_PLACE(addr) \
-  (addr == (void*) &MPI_FORTRAN_IN_PLACE)
-#define OMPI_IS_FORTRAN_UNWEIGHTED(addr) \
-  (addr == (void*) &MPI_FORTRAN_UNWEIGHTED)
-#define OMPI_IS_FORTRAN_WEIGHTS_EMPTY(addr) \
-  (addr == (void*) &MPI_FORTRAN_WEIGHTS_EMPTY)
-#define OMPI_IS_FORTRAN_ARGV_NULL(addr) \
-  (addr == (void*) &MPI_FORTRAN_ARGV_NULL)
-#define OMPI_IS_FORTRAN_ARGVS_NULL(addr) \
-  (addr == (void*) &MPI_FORTRAN_ARGVS_NULL)
-#define OMPI_IS_FORTRAN_ERRCODES_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_ERRCODES_IGNORE)
-#define OMPI_IS_FORTRAN_STATUS_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_STATUS_IGNORE)
-#define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_STATUSES_IGNORE)
-
-#elif OMPI_FORTRAN_PLAIN
-#define OMPI_IS_FORTRAN_BOTTOM(addr) \
-   (addr == (void*) &mpi_fortran_bottom)
-#define OMPI_IS_FORTRAN_IN_PLACE(addr) \
-   (addr == (void*) &mpi_fortran_in_place)
-#define OMPI_IS_FORTRAN_UNWEIGHTED(addr) \
-   (addr == (void*) &mpi_fortran_unweighted)
-#define OMPI_IS_FORTRAN_WEIGHTS_EMPTY(addr) \
-   (addr == (void*) &mpi_fortran_weights_empty)
-#define OMPI_IS_FORTRAN_ARGV_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argv_null)
-#define OMPI_IS_FORTRAN_ARGVS_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argvs_null)
-#define OMPI_IS_FORTRAN_ERRCODES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_errcodes_ignore)
-#define OMPI_IS_FORTRAN_STATUS_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_status_ignore)
-#define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_statuses_ignore)
-
-#elif OMPI_FORTRAN_SINGLE_UNDERSCORE
-#define OMPI_IS_FORTRAN_BOTTOM(addr) \
-   (addr == (void*) &mpi_fortran_bottom_)
-#define OMPI_IS_FORTRAN_IN_PLACE(addr) \
-   (addr == (void*) &mpi_fortran_in_place_)
-#define OMPI_IS_FORTRAN_UNWEIGHTED(addr) \
-   (addr == (void*) &mpi_fortran_unweighted_)
-#define OMPI_IS_FORTRAN_WEIGHTS_EMPTY(addr) \
-   (addr == (void*) &mpi_fortran_weights_empty_)
-#define OMPI_IS_FORTRAN_ARGV_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argv_null_)
-#define OMPI_IS_FORTRAN_ARGVS_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argvs_null_)
-#define OMPI_IS_FORTRAN_ERRCODES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_errcodes_ignore_)
-#define OMPI_IS_FORTRAN_STATUS_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_status_ignore_)
-#define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_statuses_ignore_)
-
-#else
-#define OMPI_IS_FORTRAN_BOTTOM(addr) \
-   (addr == (void*) &mpi_fortran_bottom__)
-#define OMPI_IS_FORTRAN_IN_PLACE(addr) \
-   (addr == (void*) &mpi_fortran_in_place__)
-#define OMPI_IS_FORTRAN_UNWEIGHTED(addr) \
-   (addr == (void*) &mpi_fortran_unweighted__)
-#define OMPI_IS_FORTRAN_WEIGHTS_EMPTY(addr) \
-   (addr == (void*) &mpi_fortran_weights_empty__)
-#define OMPI_IS_FORTRAN_ARGV_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argv_null__)
-#define OMPI_IS_FORTRAN_ARGVS_NULL(addr) \
-   (addr == (void*) &mpi_fortran_argvs_null__)
-#define OMPI_IS_FORTRAN_ERRCODES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_errcodes_ignore__)
-#define OMPI_IS_FORTRAN_STATUS_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_status_ignore__)
-#define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
-   (addr == (void*) &mpi_fortran_statuses_ignore__)
-
-#endif /* weak / specific symbol type */
-
 /* Convert between Fortran and C MPI_BOTTOM */
 #define OMPI_F2C_BOTTOM(addr)      (OMPI_IS_FORTRAN_BOTTOM(addr) ? MPI_BOTTOM 
: (addr))
 #define OMPI_F2C_IN_PLACE(addr)    (OMPI_IS_FORTRAN_IN_PLACE(addr) ? 
MPI_IN_PLACE : (addr))
Index: ompi/runtime/ompi_mpi_init.c
===================================================================
--- ompi/runtime/ompi_mpi_init.c        (revision 32669)
+++ ompi/runtime/ompi_mpi_init.c        (working copy)
@@ -17,6 +17,8 @@
  * Copyright (c) 2011      Sandia National Laboratories. All rights reserved.
  * Copyright (c) 2012-2013 Inria.  All rights reserved.
  * Copyright (c) 2014      Intel, Inc. All rights reserved.
+ * Copyright (c) 2014      Research Organization for Information Science
+ *                         and Technology (RIST). All rights reserved.
  *
  * $COPYRIGHT$
  * 
@@ -58,7 +60,9 @@
 #include "opal/mca/pmix/pmix.h"

 #include "ompi/constants.h"
+#if OMPI_BUILD_FORTRAN_BINDINGS
 #include "ompi/mpi/fortran/base/constants.h"
+#endif
 #include "ompi/runtime/mpiruntime.h"
 #include "ompi/runtime/params.h"
 #include "ompi/communicator/communicator.h"
Index: ompi/mpi/c/Makefile.am
===================================================================
--- ompi/mpi/c/Makefile.am      (revision 32669)
+++ ompi/mpi/c/Makefile.am      (working copy)
@@ -15,6 +15,8 @@
 # Copyright (c) 2012-2013 Inria.  All rights reserved.
 # Copyright (c) 2013      Los Alamos National Security, LLC. All rights
 #                         reserved.
+# Copyright (c) 2014      Research Organization for Information Science
+#                         and Technology (RIST). All rights reserved.
 # $COPYRIGHT$
 # 
 # Additional copyrights may follow
@@ -103,7 +105,6 @@
         cart_sub.c \
         close_port.c \
         comm_accept.c \
-        comm_c2f.c \
         comm_call_errhandler.c \
         comm_compare.c \
         comm_connect.c \
@@ -116,7 +117,6 @@
         comm_dup.c \
         comm_dup_with_info.c \
         comm_idup.c \
-        comm_f2c.c \
         comm_free.c \
         comm_free_keyval.c \
         comm_get_attr.c \
@@ -145,9 +145,7 @@
         comm_test_inter.c \
        compare_and_swap.c \
         dims_create.c \
-        errhandler_c2f.c \
         errhandler_create.c \
-        errhandler_f2c.c \
         errhandler_free.c \
         errhandler_get.c \
         errhandler_set.c \
@@ -179,11 +177,9 @@
         graphdims_get.c \
         grequest_complete.c \
         grequest_start.c \
-        group_c2f.c \
         group_compare.c \
         group_difference.c \
         group_excl.c \
-        group_f2c.c \
         group_free.c \
         group_incl.c \
         group_intersection.c \
@@ -196,11 +192,9 @@
         ibsend.c \
         improbe.c \
         imrecv.c \
-        info_c2f.c \
         info_create.c \
         info_delete.c \
         info_dup.c \
-        info_f2c.c \
         info_free.c \
         info_get.c \
         info_get_nkeys.c \
@@ -221,8 +215,6 @@
         keyval_create.c \
         keyval_free.c \
         lookup_name.c \
-        message_f2c.c \
-        message_c2f.c \
         mprobe.c \
         mrecv.c \
         neighbor_allgather.c \
@@ -235,10 +227,8 @@
         ineighbor_alltoallv.c \
         neighbor_alltoallw.c \
         ineighbor_alltoallw.c \
-        op_c2f.c \
         op_commutative.c \
         op_create.c \
-        op_f2c.c \
         op_free.c \
         open_port.c \
         pack_external.c \
@@ -259,8 +249,6 @@
         ireduce_scatter.c \
         reduce_scatter_block.c \
         ireduce_scatter_block.c \
-        request_c2f.c \
-        request_f2c.c \
         request_free.c \
         request_get_status.c \
        rget.c \
@@ -282,8 +270,6 @@
         ssend.c \
         start.c \
         startall.c \
-        status_c2f.c \
-        status_f2c.c \
         status_set_cancelled.c \
         status_set_elements.c \
         status_set_elements_x.c \
@@ -293,7 +279,6 @@
         test_cancelled.c \
         testsome.c \
         topo_test.c \
-        type_c2f.c \
         type_commit.c \
         type_contiguous.c \
         type_create_darray.c \
@@ -311,7 +296,6 @@
         type_delete_attr.c \
         type_dup.c \
         type_extent.c \
-        type_f2c.c \
         type_free.c \
         type_free_keyval.c \
         type_get_attr.c \
@@ -349,7 +333,6 @@
        win_allocate.c \
        win_allocate_shared.c \
        win_attach.c \
-        win_c2f.c \
         win_call_errhandler.c \
         win_complete.c  \
         win_create_errhandler.c \
@@ -358,7 +341,6 @@
        win_create_dynamic.c \
         win_delete_attr.c \
        win_detach.c \
-        win_f2c.c \
         win_fence.c \
        win_flush.c \
        win_flush_all.c \
@@ -386,14 +368,36 @@
        win_unlock_all.c \
         win_wait.c

+if OMPI_BUILD_FORTRAN_BINDINGS
+libmpi_c_mpi_la_SOURCES += \
+        comm_c2f.c \
+        comm_f2c.c \
+        errhandler_c2f.c \
+        errhandler_f2c.c \
+        group_c2f.c \
+        group_f2c.c \
+        info_f2c.c \
+        info_c2f.c \
+        message_c2f.c \
+        message_f2c.c \
+        op_c2f.c \
+        op_f2c.c \
+        request_c2f.c \
+        request_f2c.c \
+        status_c2f.c \
+        status_f2c.c \
+        type_c2f.c \
+        type_f2c.c \
+        win_c2f.c \
+        win_f2c.c
+endif
+
 if OMPI_PROVIDE_MPI_FILE_INTERFACE
 libmpi_c_mpi_la_SOURCES += \
-        file_c2f.c \
         file_call_errhandler.c \
         file_close.c \
         file_create_errhandler.c \
         file_delete.c \
-        file_f2c.c \
         file_get_amode.c \
         file_get_atomicity.c \
         file_get_byte_offset.c \
@@ -446,8 +450,15 @@
         file_write_ordered_end.c \
         file_write_shared.c \
         register_datarep.c
+
+if OMPI_BUILD_FORTRAN_BINDINGS
+libmpi_c_mpi_la_SOURCES += \
+        file_c2f.c \
+        file_f2c.c
 endif

+endif
+
 # Conditionally install the header files

 if WANT_INSTALL_HEADERS
Index: ompi/mpi/c/profile/Makefile.am
===================================================================
--- ompi/mpi/c/profile/Makefile.am      (revision 32669)
+++ ompi/mpi/c/profile/Makefile.am      (working copy)
@@ -16,6 +16,8 @@
 # Copyright (c) 2012-2013 Inria.  All rights reserved.
 # Copyright (c) 2013      Los Alamos National Security, LLC. All rights
 #                         reserved.
+# Copyright (c) 2014      Research Organization for Information Science
+#                         and Technology (RIST). All rights reserved.
 # $COPYRIGHT$
 # 
 # Additional copyrights may follow
@@ -87,7 +89,6 @@
         pcart_sub.c \
         pclose_port.c \
         pcomm_accept.c \
-        pcomm_c2f.c \
         pcomm_call_errhandler.c \
         pcomm_compare.c \
         pcomm_connect.c \
@@ -100,7 +101,6 @@
         pcomm_dup.c \
         pcomm_dup_with_info.c \
         pcomm_idup.c \
-        pcomm_f2c.c \
         pcomm_free.c \
         pcomm_free_keyval.c \
         pcomm_get_attr.c \
@@ -129,9 +129,7 @@
         pcomm_test_inter.c \
        pcompare_and_swap.c \
         pdims_create.c \
-        perrhandler_c2f.c \
         perrhandler_create.c \
-        perrhandler_f2c.c \
         perrhandler_free.c \
         perrhandler_get.c \
         perrhandler_set.c \
@@ -163,11 +161,9 @@
         pgraphdims_get.c \
         pgrequest_complete.c \
         pgrequest_start.c \
-        pgroup_c2f.c \
         pgroup_compare.c \
         pgroup_difference.c \
         pgroup_excl.c \
-        pgroup_f2c.c \
         pgroup_free.c \
         pgroup_incl.c \
         pgroup_intersection.c \
@@ -180,11 +176,9 @@
         pibsend.c \
        pimprobe.c \
        pimrecv.c \
-        pinfo_c2f.c \
         pinfo_create.c \
         pinfo_delete.c \
         pinfo_dup.c \
-        pinfo_f2c.c \
         pinfo_free.c \
         pinfo_get.c \
         pinfo_get_nkeys.c \
@@ -205,8 +199,6 @@
         pkeyval_create.c \
         pkeyval_free.c \
         plookup_name.c \
-        pmessage_f2c.c \
-        pmessage_c2f.c \
         pmprobe.c \
         pmrecv.c \
         pneighbor_allgather.c \
@@ -219,10 +211,8 @@
         pineighbor_alltoallv.c \
         pneighbor_alltoallw.c \
         pineighbor_alltoallw.c \
-        pop_c2f.c \
         pop_create.c \
         pop_commutative.c \
-        pop_f2c.c \
         pop_free.c \
         popen_port.c \
         ppack_external.c \
@@ -243,8 +233,6 @@
         pireduce_scatter.c \
         preduce_scatter_block.c \
         pireduce_scatter_block.c \
-        prequest_c2f.c \
-        prequest_f2c.c \
         prequest_free.c \
         prequest_get_status.c \
        prget.c \
@@ -266,8 +254,6 @@
         pssend.c \
         pstart.c \
         pstartall.c \
-        pstatus_c2f.c \
-        pstatus_f2c.c \
         pstatus_set_cancelled.c \
         pstatus_set_elements.c \
         pstatus_set_elements_x.c \
@@ -277,7 +263,6 @@
         ptest_cancelled.c \
         ptestsome.c \
         ptopo_test.c \
-        ptype_c2f.c \
         ptype_commit.c \
         ptype_contiguous.c \
         ptype_create_darray.c \
@@ -295,7 +280,6 @@
         ptype_delete_attr.c \
         ptype_dup.c \
         ptype_extent.c \
-        ptype_f2c.c \
         ptype_free.c \
         ptype_free_keyval.c \
         ptype_get_attr.c \
@@ -333,7 +317,6 @@
        pwin_allocate.c \
        pwin_allocate_shared.c \
        pwin_attach.c \
-        pwin_c2f.c \
         pwin_call_errhandler.c \
         pwin_complete.c  \
         pwin_create_errhandler.c \
@@ -342,7 +325,6 @@
        pwin_create_dynamic.c \
         pwin_delete_attr.c \
        pwin_detach.c \
-        pwin_f2c.c \
         pwin_fence.c \
        pwin_flush.c \
        pwin_flush_all.c \
@@ -370,14 +352,36 @@
        pwin_unlock_all.c \
         pwin_wait.c

+if OMPI_BUILD_FORTRAN_BINDINGS
+nodist_libmpi_c_pmpi_la_SOURCES += \
+        pcomm_c2f.c \
+        pcomm_f2c.c \
+        perrhandler_c2f.c \
+        perrhandler_f2c.c \
+        pgroup_c2f.c \
+        pgroup_f2c.c \
+        pinfo_c2f.c \
+        pinfo_f2c.c \
+        pmessage_c2f.c \
+        pmessage_f2c.c \
+        pop_c2f.c \
+        pop_f2c.c \
+        prequest_c2f.c \
+        prequest_f2c.c \
+        pstatus_c2f.c \
+        pstatus_f2c.c \
+        ptype_c2f.c \
+        ptype_f2c.c \
+        pwin_c2f.c \
+        pwin_f2c.c
+endif
+
 if OMPI_PROVIDE_MPI_FILE_INTERFACE
 nodist_libmpi_c_pmpi_la_SOURCES += \
-        pfile_c2f.c \
         pfile_call_errhandler.c \
         pfile_close.c \
         pfile_create_errhandler.c \
         pfile_delete.c \
-        pfile_f2c.c \
         pfile_get_amode.c \
         pfile_get_atomicity.c \
         pfile_get_byte_offset.c \
@@ -430,8 +434,15 @@
         pfile_write_ordered_end.c \
         pfile_write_shared.c \
         pregister_datarep.c
+
+if OMPI_BUILD_FORTRAN_BINDINGS
+nodist_libmpi_c_pmpi_la_SOURCES += \
+        pfile_c2f.c \
+        pfile_f2c.c
 endif

+endif
+
 #
 # Sym link in the sources from the real MPI directory
 #
Index: ompi/request/grequest.c
===================================================================
--- ompi/request/grequest.c     (revision 32669)
+++ ompi/request/grequest.c     (working copy)
@@ -11,6 +11,8 @@
  *                         All rights reserved.
  * Copyright (c) 2006-2012 Cisco Systems, Inc.  All rights reserved.
  * Copyright (c) 2009      Sun Microsystems, Inc.  All rights reserved.
+ * Copyright (c) 2014      Research Organization for Information Science
+ *                         and Technology (RIST). All rights reserved.
  * $COPYRIGHT$
  * 
  * Additional copyrights may follow
@@ -216,11 +218,15 @@
         if (g->greq_funcs_are_c) {
             rc = g->greq_query.c_query(g->greq_state, status);
         } else {
+#if OMPI_BUILD_FORTRAN_BINDINGS
             MPI_Fint ierr;
             MPI_Fint fstatus[sizeof(MPI_Status) / sizeof(int)];
             g->greq_query.f_query((MPI_Aint*)g->greq_state, fstatus, &ierr);
             MPI_Status_f2c(fstatus, status);
             rc = OMPI_FINT_2_INT(ierr);
+#else
+            rc = OMPI_ERROR;
+#endif
         }
     }

Index: config/ompi_setup_mpi_fortran.m4
===================================================================
--- config/ompi_setup_mpi_fortran.m4    (revision 32669)
+++ config/ompi_setup_mpi_fortran.m4    (working copy)
@@ -15,6 +15,8 @@
 # Copyright (c) 2006-2007 Los Alamos National Security, LLC.  All rights
 #                         reserved. 
 # Copyright (c) 2009      Oak Ridge National Labs.  All rights reserved.
+# Copyright (c) 2014      Research Organization for Information Science
+#                         and Technology (RIST). All rights reserved.
 # $COPYRIGHT$
 # 
 # Additional copyrights may follow
@@ -691,4 +693,10 @@
     # safe, too.
     AM_CONDITIONAL(OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS, 
                    [test $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1])
+
+    AM_CONDITIONAL(OMPI_BUILD_FORTRAN_BINDINGS,
+                   [test $OMPI_BUILD_FORTRAN_MPIFH_BINDINGS -eq 1 || \
+                    test $OMPI_BUILD_FORTRAN_USEMPI_BINDINGS -eq 1 || \
+                    test $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1])
+
 ])
Index: oshmem/runtime/oshmem_shmem_init.c
===================================================================
--- oshmem/runtime/oshmem_shmem_init.c  (revision 32669)
+++ oshmem/runtime/oshmem_shmem_init.c  (working copy)
@@ -1,6 +1,8 @@
 /*
  * Copyright (c) 2013      Mellanox Technologies, Inc.
  *                         All rights reserved.
+ * Copyright (c) 2014      Research Organization for Information Science
+ *                         and Technology (RIST). All rights reserved.
  *
  * $COPYRIGHT$
  * 
@@ -130,11 +132,22 @@
  ompi/include/mpif-common.h.
  */

+#if OMPI_BUILD_FORTRAN_BINDINGS
+#  if OMPI_FORTRAN_CAPS
 #define INST(type, upper_case, lower_case, single_u, double_u)   \
-    type lower_case; \
-type upper_case; \
-type single_u;  \
+type lower_case
+#  elif OMPI_FORTRAN_PLAIN
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
+type upper_case
+#  elif OMPI_FORTRAN_SINGLE_UNDERSCORE
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
+type single_u
+#  elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
 type double_u
+#  else
+#    error Unrecognized Fortran name mangling scheme
+#  endif

 INST(int,
      MPI_FORTRAN_BOTTOM,
@@ -171,6 +184,7 @@
      mpi_fortran_statuses_ignore,
      mpi_fortran_statuses_ignore_,
      mpi_fortran_statuses_ignore__);
+#endif /* OMPI_BUILD_FORTRAN_BINDINGS */

 /*
  * Hash tables for MPI_Type_create_f90* functions
Index: opal/include/opal_fortran_config.h.in
===================================================================
--- opal/include/opal_fortran_config.h.in       (revision 0)
+++ opal/include/opal_fortran_config.h.in       (revision 0)
@@ -0,0 +1,31 @@
+! -*- fortran -*-
+!
+! Copyright (c) 2014      Research Organization for Information Science
+!                         and Technology (RIST). All rights reserved.
+!
+! $COPYRIGHT$
+!
+! Additional copyrights may follow
+! 
+! $HEADER$
+!
+
+!     This file exists to have a Fortran-safe header file that has
+!     results from configure tests.
+
+#ifndef OMPI_FORTRAN_CONFIGURE_H
+#define OMPI_FORTRAN_CONFIGURE_H
+
+! Whether fortran symbols are all caps or not
+#define OMPI_FORTRAN_CAPS @OMPI_FORTRAN_CAPS@
+
+! Whether fortran symbols have no trailing underscore or not
+#define OMPI_FORTRAN_PLAIN @OMPI_FORTRAN_PLAIN@
+
+! Whether fortran symbols have a trailing underscore or not
+#define OMPI_FORTRAN_SINGLE_UNDERSCORE @OMPI_FORTRAN_SINGLE_UNDERSCORE@
+
+! Whether fortran symbols have a trailing double underscore or not
+#define OMPI_FORTRAN_DOUBLE_UNDERSCORE @OMPI_FORTRAN_DOUBLE_UNDERSCORE@
+
+#endif
Index: configure.ac
===================================================================
--- configure.ac        (revision 32669)
+++ configure.ac        (working copy)
@@ -180,6 +180,11 @@
 m4_ifdef([project_oshmem],
          [AC_CONFIG_HEADER([oshmem/include/shmem.h])])

+# A preprocessor header file just for Fortran.  We cannot use AC
+# CONFIG_HEADER because it adds a /* */-style comment at the top,
+# and this header file must be usable in .F90 files.  :-(
+AC_CONFIG_FILES([opal/include/opal_fortran_config.h])
+
 # override/fixup the version numbers set by AC_INIT, since on
 # developer builds, there's no good way to know what the version is
 # before running configure :(.  We only use the base version number
Index: ompi/runtime/ompi_mpi_init.c
===================================================================
--- ompi/runtime/ompi_mpi_init.c        (revision 32669)
+++ ompi/runtime/ompi_mpi_init.c        (working copy)
@@ -253,11 +257,22 @@
    ompi/include/mpif-common.h.
  */

+#if OMPI_BUILD_FORTRAN_BINDINGS
+#  if OMPI_FORTRAN_CAPS
 #define INST(type, upper_case, lower_case, single_u, double_u)   \
-type lower_case; \
-type upper_case; \
-type single_u;  \
+type lower_case
+#  elif OMPI_FORTRAN_PLAIN
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
+type upper_case
+#  elif OMPI_FORTRAN_SINGLE_UNDERSCORE
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
+type single_u
+#  elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
+#define INST(type, upper_case, lower_case, single_u, double_u)   \
 type double_u
+#  else
+#    error Unrecognized Fortran name mangling scheme
+#  endif

 INST(int, MPI_FORTRAN_BOTTOM, mpi_fortran_bottom,
      mpi_fortran_bottom_, mpi_fortran_bottom__);
@@ -277,6 +292,7 @@
      mpi_fortran_status_ignore_, mpi_fortran_status_ignore__);
 INST(int *, MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore,
       mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__);
+#endif  /* OMPI_BUILD_FORTRAN_BINDINGS */

 /*
  * Hash tables for MPI_Type_create_f90* functions
Index: ompi/mpi/fortran/configure-fortran-output.h.in
===================================================================
--- ompi/mpi/fortran/configure-fortran-output.h.in      (revision 32669)
+++ ompi/mpi/fortran/configure-fortran-output.h.in      (working copy)
@@ -3,6 +3,8 @@
 ! Copyright (c) 2006-2014 Cisco Systems, Inc.  All rights reserved.
 ! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
 !                         All rights reserved.
+! Copyright (c) 2014      Research Organization for Information Science
+!                         and Technology (RIST). All rights reserved.
 !
 ! $COPYRIGHT$
 !
@@ -108,5 +110,6 @@
 ! Include some post-processing, based on the values from above

 #include "ompi/mpi/fortran/configure-fortran-output-bottom.h"
+#include "opal/include/opal_fortran_config.h"

 #endif
Index: ompi/mpi/fortran/use-mpi-f08-desc/mpi-f08-types.f90
===================================================================
--- ompi/mpi/fortran/use-mpi-f08-desc/mpi-f08-types.f90 (revision 32669)
+++ ompi/mpi/fortran/use-mpi-f08-desc/mpi-f08-types.f90 (working copy)
@@ -3,6 +3,8 @@
 ! Copyright (c) 2009 Cisco Systems, Inc.  All rights reserved.
 ! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
 !                         All rights reserved.
+! Copyright (c) 2014      Research Organization for Information Science
+!                         and Technology (RIST). All rights reserved.
 !
 ! This file creates mappings between MPI C types (e.g., MPI_Comm) and
 ! variables (e.g., MPI_COMM_WORLD) and corresponding Fortran names
@@ -13,6 +15,7 @@
    use, intrinsic :: ISO_C_BINDING

    include "mpif-config.h"
+   include "opal/include/opal_fortran_config.h"

    !
    ! constants (these must agree with those in mpif-common.h, mpif-config.h)
@@ -151,7 +154,48 @@
 !
 ! STATUS/STATUSES_IGNORE
 !
-  type(MPI_STATUS), bind(C, name="mpi_fortran_status_ignore")   :: 
MPI_STATUS_IGNORE
+#if OMPI_FORTRAN_CAPS
+  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
+  integer, bind(C, name="MPI_FORTRAN_UNWEIGHTED")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="MPI_FORTRAN_WEIGHTS_EMPTY")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_PLAIN
+  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
+  integer, bind(C, name="mpi_fortran_unweighted")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="mpi_fortran_weights_empty")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_SINGLE_UNDERSCORE
+  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
+  integer, bind(C, name="mpi_fortran_unweighted_")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="mpi_fortran_weights_empty_")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
+  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
+  integer, bind(C, name="mpi_fortran_unweighted__")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="mpi_fortran_weights_empty__")   :: MPI_WEIGHTS_EMPTY
+#else
+#error Unrecognized Fortran name mangling scheme
+#endif

 end module mpi_f08_types
Index: ompi/mpi/fortran/base/constants.h
===================================================================
--- ompi/mpi/fortran/base/constants.h   (revision 32669)
+++ ompi/mpi/fortran/base/constants.h   (working copy)
@@ -12,6 +12,8 @@
  * Copyright (c) 2006-2012 Cisco Systems, Inc.  All rights reserved.
  * Copyright (c) 2011-2013 Inria.  All rights reserved.
  * Copyright (c) 2011-2012 Universite Bordeaux 1
+ * Copyright (c) 2014      Research Organization for Information Science
+ *                         and Technology (RIST). All rights reserved.
  * $COPYRIGHT$
  * 
  * Additional copyrights may follow
@@ -85,11 +87,21 @@
  * file.
  */

+#if OMPI_FORTRAN_CAPS
 #define DECL(type, upper_case, lower_case, single_u, double_u)   \
-OMPI_DECLSPEC extern type upper_case; \
-OMPI_DECLSPEC extern type lower_case; \
-OMPI_DECLSPEC extern type single_u; \
+OMPI_DECLSPEC extern type upper_case
+#elif OMPI_FORTRAN_PLAIN
+#define DECL(type, upper_case, lower_case, single_u, double_u)   \
+OMPI_DECLSPEC extern type lower_case
+#elif OMPI_FORTRAN_SINGLE_UNDERSCORE
+#define DECL(type, upper_case, lower_case, single_u, double_u)   \
+OMPI_DECLSPEC extern type single_u
+#elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
+#define DECL(type, upper_case, lower_case, single_u, double_u)   \
 OMPI_DECLSPEC extern type double_u
+#else
+#error Unrecognized Fortran name mangling scheme
+#endif

 /* Note that the rationale for the types of each of these variables is
    discussed in ompi/include/mpif-common.h.  Do not change the types
@@ -116,58 +128,11 @@
      mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__);

 /*
- * Create macros to do the checking.  Only check for all 4 if we have
- * weak symbols.  Otherwise, just check for the one relevant symbol.
+ * Create macros to do the checking.
+ * Just check for the one and only relevant symbol.
  */
-#if OPAL_HAVE_WEAK_SYMBOLS
+#if OMPI_FORTRAN_CAPS
 #define OMPI_IS_FORTRAN_BOTTOM(addr) \
-  (addr == (void*) &MPI_FORTRAN_BOTTOM || \
-   addr == (void*) &mpi_fortran_bottom || \
-   addr == (void*) &mpi_fortran_bottom_ || \
-   addr == (void*) &mpi_fortran_bottom__)
-#define OMPI_IS_FORTRAN_IN_PLACE(addr) \
-  (addr == (void*) &MPI_FORTRAN_IN_PLACE || \
-   addr == (void*) &mpi_fortran_in_place || \
-   addr == (void*) &mpi_fortran_in_place_ || \
-   addr == (void*) &mpi_fortran_in_place__)
-#define OMPI_IS_FORTRAN_UNWEIGHTED(addr) \
-  (addr == (void*) &MPI_FORTRAN_UNWEIGHTED || \
-   addr == (void*) &mpi_fortran_unweighted || \
-   addr == (void*) &mpi_fortran_unweighted_ || \
-   addr == (void*) &mpi_fortran_unweighted__)
-#define OMPI_IS_FORTRAN_WEIGHTS_EMPTY(addr) \
-  (addr == (void*) &MPI_FORTRAN_WEIGHTS_EMPTY || \
-   addr == (void*) &mpi_fortran_weights_empty || \
-   addr == (void*) &mpi_fortran_weights_empty_ || \
-   addr == (void*) &mpi_fortran_weights_empty__)
-#define OMPI_IS_FORTRAN_ARGV_NULL(addr) \
-  (addr == (void*) &MPI_FORTRAN_ARGV_NULL || \
-   addr == (void*) &mpi_fortran_argv_null || \
-   addr == (void*) &mpi_fortran_argv_null_ || \
-   addr == (void*) &mpi_fortran_argv_null__)
-#define OMPI_IS_FORTRAN_ARGVS_NULL(addr) \
-  (addr == (void*) &MPI_FORTRAN_ARGVS_NULL || \
-   addr == (void*) &mpi_fortran_argvs_null || \
-   addr == (void*) &mpi_fortran_argvs_null_ || \
-   addr == (void*) &mpi_fortran_argvs_null__)
-#define OMPI_IS_FORTRAN_ERRCODES_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_ERRCODES_IGNORE || \
-   addr == (void*) &mpi_fortran_errcodes_ignore || \
-   addr == (void*) &mpi_fortran_errcodes_ignore_ || \
-   addr == (void*) &mpi_fortran_errcodes_ignore__)
-#define OMPI_IS_FORTRAN_STATUS_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_STATUS_IGNORE || \
-   addr == (void*) &mpi_fortran_status_ignore || \
-   addr == (void*) &mpi_fortran_status_ignore_ || \
-   addr == (void*) &mpi_fortran_status_ignore__)
-#define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
-  (addr == (void*) &MPI_FORTRAN_STATUSES_IGNORE || \
-   addr == (void*) &mpi_fortran_statuses_ignore || \
-   addr == (void*) &mpi_fortran_statuses_ignore_ || \
-   addr == (void*) &mpi_fortran_statuses_ignore__)
-
-#elif OMPI_FORTRAN_CAPS
-#define OMPI_IS_FORTRAN_BOTTOM(addr) \
   (addr == (void*) &MPI_FORTRAN_BOTTOM)
 #define OMPI_IS_FORTRAN_IN_PLACE(addr) \
   (addr == (void*) &MPI_FORTRAN_IN_PLACE)
@@ -226,7 +191,7 @@
 #define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
    (addr == (void*) &mpi_fortran_statuses_ignore_)

-#else
+#elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
 #define OMPI_IS_FORTRAN_BOTTOM(addr) \
    (addr == (void*) &mpi_fortran_bottom__)
 #define OMPI_IS_FORTRAN_IN_PLACE(addr) \
@@ -246,8 +211,11 @@
 #define OMPI_IS_FORTRAN_STATUSES_IGNORE(addr) \
    (addr == (void*) &mpi_fortran_statuses_ignore__)

-#endif /* weak / specific symbol type */
+#else
+#error Unrecognized Fortran name mangling scheme

+#endif /* specific symbol type */
+
 /* Convert between Fortran and C MPI_BOTTOM */
 #define OMPI_F2C_BOTTOM(addr)      (OMPI_IS_FORTRAN_BOTTOM(addr) ? MPI_BOTTOM 
: (addr))
 #define OMPI_F2C_IN_PLACE(addr)    (OMPI_IS_FORTRAN_IN_PLACE(addr) ? 
MPI_IN_PLACE : (addr))
Index: ompi/mpi/fortran/use-mpi-f08/mpi-f08-types.F90
===================================================================
--- ompi/mpi/fortran/use-mpi-f08/mpi-f08-types.F90      (revision 32669)
+++ ompi/mpi/fortran/use-mpi-f08/mpi-f08-types.F90      (working copy)
@@ -3,6 +3,8 @@
 ! Copyright (c) 2009-2014 Cisco Systems, Inc.  All rights reserved.
 ! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
 !                         All rights reserved.
+! Copyright (c) 2014      Research Organization for Information Science
+!                         and Technology (RIST). All rights reserved.
 ! $COPYRIGHT$
 !
 ! This file creates mappings between MPI C types (e.g., MPI_Comm) and
@@ -164,6 +166,17 @@

 !... Special sentinel constants
 !------------------------------
+#if OMPI_FORTRAN_CAPS
+  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
+  integer, bind(C, name="MPI_FORTRAN_UNWEIGHTED")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="MPI_FORTRAN_WEIGHTS_EMPTY")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_PLAIN
   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
@@ -173,6 +186,29 @@
   integer, bind(C, name="mpi_fortran_errcodes_ignore") :: MPI_ERRCODES_IGNORE
   integer, bind(C, name="mpi_fortran_unweighted")      :: MPI_UNWEIGHTED
   integer, bind(C, name="mpi_fortran_weights_empty")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_SINGLE_UNDERSCORE
+  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
+  integer, bind(C, name="mpi_fortran_unweighted_")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="mpi_fortran_weights_empty_")   :: MPI_WEIGHTS_EMPTY
+#elif OMPI_FORTRAN_DOUBLE_UNDERSCORE
+  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
+  integer, bind(C, name="mpi_fortran_unweighted__")      :: MPI_UNWEIGHTED
+  integer, bind(C, name="mpi_fortran_weights_empty__")   :: MPI_WEIGHTS_EMPTY
+#else
+#error Unrecognized Fortran name mangling scheme
+#endif

 !... Interfaces for operators with handles
 !-----------------------------------------
Index: config/ompi_setup_mpi_fortran.m4
===================================================================
--- config/ompi_setup_mpi_fortran.m4    (revision 32669)
+++ config/ompi_setup_mpi_fortran.m4    (working copy)
@@ -86,15 +88,23 @@
     AC_DEFINE_UNQUOTED([OMPI_FORTRAN_DOUBLE_UNDERSCORE],
         [$ompi_fortran_double_underscore], 
         [Whether fortran symbols have a trailing double underscore or not])
+    OMPI_FORTRAN_DOUBLE_UNDERSCORE=$ompi_fortran_double_underscore
+    AC_SUBST(OMPI_FORTRAN_DOUBLE_UNDERSCORE)
     AC_DEFINE_UNQUOTED([OMPI_FORTRAN_SINGLE_UNDERSCORE], 
         [$ompi_fortran_single_underscore],
         [Whether fortran symbols have a trailing underscore or not])
+    OMPI_FORTRAN_SINGLE_UNDERSCORE=$ompi_fortran_single_underscore
+    AC_SUBST(OMPI_FORTRAN_SINGLE_UNDERSCORE)
     AC_DEFINE_UNQUOTED([OMPI_FORTRAN_CAPS],
         [$ompi_fortran_caps],
         [Whether fortran symbols are all caps or not])
+    OMPI_FORTRAN_CAPS=$ompi_fortran_caps
+    AC_SUBST(OMPI_FORTRAN_CAPS)
     AC_DEFINE_UNQUOTED([OMPI_FORTRAN_PLAIN], 
         [$ompi_fortran_plain],
         [Whether fortran symbols have no trailing underscore or not])
+    OMPI_FORTRAN_PLAIN=$ompi_fortran_plain
+    AC_SUBST(OMPI_FORTRAN_PLAIN)

     # Check to see if any of the MPI Fortran bindings were
     # specifically requested.  If so, and we weren't able to setup the
 ])

Reply via email to