Fix the case where there is no Fortran compiler found. Possibly fix
the case where we have a really ancient Fortran compiler that does not support ISO_C_BINDING, but need to test to be sure that the new configury works. This commit was SVN r26290.
Этот коммит содержится в:
родитель
da2cd96bc5
Коммит
b9640a582a
@ -52,7 +52,6 @@ AC_DEFUN([OMPI_INTL_PTHREAD_TRY_LINK_FORTRAN], [
|
|||||||
#
|
#
|
||||||
# Make sure that we can run a small application in Fortran, with
|
# Make sure that we can run a small application in Fortran, with
|
||||||
# pthreads living in a C object file
|
# pthreads living in a C object file
|
||||||
OMPI_FORTRAN_MAKE_C_FUNCTION([ompi_ac_thread_fn], [pthreadtest])
|
|
||||||
|
|
||||||
# Fortran module
|
# Fortran module
|
||||||
cat > conftestf.f <<EOF
|
cat > conftestf.f <<EOF
|
||||||
@ -76,7 +75,7 @@ $ompi_conftest_h
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void $ompi_ac_thread_fn()
|
void pthreadtest_f(void)
|
||||||
{
|
{
|
||||||
pthread_t th;
|
pthread_t th;
|
||||||
pthread_create(&th, NULL, NULL, NULL);
|
pthread_create(&th, NULL, NULL, NULL);
|
||||||
@ -86,6 +85,19 @@ void $ompi_ac_thread_fn()
|
|||||||
pthread_create(0,0,0,0);
|
pthread_create(0,0,0,0);
|
||||||
pthread_cleanup_pop(0);
|
pthread_cleanup_pop(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pthreadtest(void)
|
||||||
|
{ return pthreadtest_f(); }
|
||||||
|
|
||||||
|
void pthreadtest_(void)
|
||||||
|
{ return pthreadtest_f(); }
|
||||||
|
|
||||||
|
void pthreadtest__(void)
|
||||||
|
{ return pthreadtest_f(); }
|
||||||
|
|
||||||
|
void PTHREADTEST(void)
|
||||||
|
{ return pthreadtest_f(); }
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -225,7 +237,7 @@ AC_DEFUN([OMPI_INTL_POSIX_THREADS_PLAIN_FC], [
|
|||||||
#
|
#
|
||||||
# Fortran compiler
|
# Fortran compiler
|
||||||
#
|
#
|
||||||
if test "$ompi_pthread_fortran_success" = "0" -a "$OMPI_WANT_FORTRAN_BINDINGS" = "1"; then
|
if test "$ompi_pthread_fortran_success" = "0" -a "$OMPI_WANT_FORTRAN_BINDINGS" = "1" -a $ompi_fortran_happy -eq 1; then
|
||||||
AC_MSG_CHECKING([if Fortran compiler and POSIX threads work as is])
|
AC_MSG_CHECKING([if Fortran compiler and POSIX threads work as is])
|
||||||
if test "$HAVE_POSIX_THREADS" = "1" ; then
|
if test "$HAVE_POSIX_THREADS" = "1" ; then
|
||||||
run_this_test=1
|
run_this_test=1
|
||||||
|
@ -22,19 +22,17 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_LOGICAL_ARRAY],[
|
|||||||
|
|
||||||
AC_CACHE_CHECK([for correct handling of Fortran logical arrays],
|
AC_CACHE_CHECK([for correct handling of Fortran logical arrays],
|
||||||
logical_array_var,
|
logical_array_var,
|
||||||
[if test "$1" = "none" -o $OMPI_WANT_FORTRAN_BINDINGS -eq 0; then
|
[if test "$1" = "none" -o $OMPI_WANT_FORTRAN_BINDINGS -eq 0 -o $ompi_fortran_happy -eq 0; then
|
||||||
value=skipped
|
value=skipped
|
||||||
else
|
else
|
||||||
OMPI_FORTRAN_MAKE_C_FUNCTION([ompi_check_logical_fn], [check])
|
|
||||||
|
|
||||||
# Fortran module
|
# Fortran module
|
||||||
cat > conftestf.f <<EOF
|
cat > conftestf.f <<EOF
|
||||||
program check_logical_array
|
program check_logical_array
|
||||||
external check
|
external ompi_check
|
||||||
logical l(2)
|
logical l(2)
|
||||||
l(1)=.FALSE.
|
l(1)=.FALSE.
|
||||||
l(2)=.TRUE.
|
l(2)=.TRUE.
|
||||||
CALL check(l)
|
CALL ompi_check(l)
|
||||||
end
|
end
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -56,9 +54,7 @@ EOF
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void $ompi_check_logical_fn(ompi_fortran_logical_t * logical);
|
void ompi_check_f(ompi_fortran_logical_t * logical)
|
||||||
|
|
||||||
void $ompi_check_logical_fn(ompi_fortran_logical_t * logical)
|
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
FILE *f=fopen("conftestval", "w");
|
FILE *f=fopen("conftestval", "w");
|
||||||
@ -69,6 +65,19 @@ void $ompi_check_logical_fn(ompi_fortran_logical_t * logical)
|
|||||||
result = 1;
|
result = 1;
|
||||||
fprintf(f, "%d\n", result);
|
fprintf(f, "%d\n", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ompi_check(ompi_fortran_logical_t * logical)
|
||||||
|
{ ompi_check_f(logical); }
|
||||||
|
|
||||||
|
void ompi_check_(ompi_fortran_logical_t * logical)
|
||||||
|
{ ompi_check_f(logical); }
|
||||||
|
|
||||||
|
void ompi_check__(ompi_fortran_logical_t * logical)
|
||||||
|
{ ompi_check_f(logical); }
|
||||||
|
|
||||||
|
void OMPI_CHECK(ompi_fortran_logical_t * logical)
|
||||||
|
{ ompi_check_f(logical); }
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,8 +18,8 @@ dnl
|
|||||||
dnl $HEADER$
|
dnl $HEADER$
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
# OMPI_FORTRAN_GET_KIND_VALUE(kind, variable to set)
|
# OMPI_FORTRAN_GET_KIND_VALUE(kind, decimal range, variable to set)
|
||||||
# --------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
AC_DEFUN([OMPI_FORTRAN_GET_KIND_VALUE],[
|
AC_DEFUN([OMPI_FORTRAN_GET_KIND_VALUE],[
|
||||||
# Use of m4_translit suggested by Eric Blake:
|
# Use of m4_translit suggested by Eric Blake:
|
||||||
# http://lists.gnu.org/archive/html/bug-autoconf/2010-10/msg00016.html
|
# http://lists.gnu.org/archive/html/bug-autoconf/2010-10/msg00016.html
|
||||||
@ -28,7 +28,7 @@ AC_DEFUN([OMPI_FORTRAN_GET_KIND_VALUE],[
|
|||||||
|
|
||||||
rm -f conftest.out
|
rm -f conftest.out
|
||||||
AC_CACHE_CHECK([KIND value of Fortran $1], kind_value_var,
|
AC_CACHE_CHECK([KIND value of Fortran $1], kind_value_var,
|
||||||
[if test $OMPI_WANT_FORTRAN_BINDINGS -eq 0 ; then
|
[if test $OMPI_WANT_FORTRAN_BINDINGS -eq 0 -o $ompi_fortran_happy -eq 0; then
|
||||||
value=skipped
|
value=skipped
|
||||||
else
|
else
|
||||||
AC_LANG_PUSH([Fortran])
|
AC_LANG_PUSH([Fortran])
|
||||||
@ -40,6 +40,14 @@ AC_DEFUN([OMPI_FORTRAN_GET_KIND_VALUE],[
|
|||||||
close(7)
|
close(7)
|
||||||
]]), [value=`cat conftest.out | awk '{print [$]1}'`], [value=no], [value=cross])
|
]]), [value=`cat conftest.out | awk '{print [$]1}'`], [value=no], [value=cross])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If the compiler is ancient enough to not support the
|
||||||
|
# ISO_C_BINDING stuff, then we have to fall back to older
|
||||||
|
# tests. Yuck.
|
||||||
|
AS_IF([test "$value" = "no"],
|
||||||
|
[AC_MSG_RESULT([ISO_C_BINDING not supported -- fallback])
|
||||||
|
_OMPI_FORTRAN_SELECTED_INT_KIND($2, value)])
|
||||||
|
|
||||||
AS_IF([test "$value" = "no"],
|
AS_IF([test "$value" = "no"],
|
||||||
[AC_MSG_WARN([Could not determine KIND value of $1])
|
[AC_MSG_WARN([Could not determine KIND value of $1])
|
||||||
AC_MSG_WARN([See config.log for more details])
|
AC_MSG_WARN([See config.log for more details])
|
||||||
@ -53,6 +61,33 @@ AC_DEFUN([OMPI_FORTRAN_GET_KIND_VALUE],[
|
|||||||
unset value
|
unset value
|
||||||
])
|
])
|
||||||
|
|
||||||
AS_VAR_COPY([$2], [kind_value_var])
|
AS_VAR_COPY([$3], [kind_value_var])
|
||||||
AS_VAR_POPDEF([kind_value_var])
|
AS_VAR_POPDEF([kind_value_var])
|
||||||
])dnl
|
])dnl
|
||||||
|
|
||||||
|
# _OMPI_FORTRAN_SELECTED_INT_KIND(decimal range, variable to set)
|
||||||
|
# -----------------------------------------------------------------
|
||||||
|
AC_DEFUN([_OMPI_FORTRAN_SELECTED_INT_KIND],[
|
||||||
|
AS_VAR_PUSHDEF([type_var], [ompi_cv_fortran_int_kind_$1])
|
||||||
|
|
||||||
|
if test "$OMPI_WANT_F90_BINDINGS" -eq 1 -a $ompi_fortran_happy -eq 1; then
|
||||||
|
AC_CACHE_CHECK([Fortran value of selected_int_kind($1)],
|
||||||
|
type_var,
|
||||||
|
[AC_LANG_PUSH([Fortran])
|
||||||
|
AC_RUN_IFELSE(AC_LANG_PROGRAM(, [[
|
||||||
|
open(8, file="conftest.out")
|
||||||
|
write(8, fmt="(I5)") selected_int_kind($1)
|
||||||
|
close(8)
|
||||||
|
]]), [value=`cat conftest.out | awk '{print [$]1}'`], [value=no], [value=cross])
|
||||||
|
|
||||||
|
AC_LANG_POP([Fortran])])
|
||||||
|
|
||||||
|
# All analysis of $value is done in the upper-level / calling
|
||||||
|
# macro
|
||||||
|
|
||||||
|
AS_VAR_COPY([$3], [type_var])
|
||||||
|
else
|
||||||
|
$3=skipped
|
||||||
|
fi
|
||||||
|
AS_VAR_POPDEF([type_var])dnl
|
||||||
|
])
|
||||||
|
@ -31,11 +31,9 @@ AC_DEFUN([OMPI_FORTRAN_GET_VALUE_TRUE],[
|
|||||||
|
|
||||||
AC_CACHE_CHECK([Fortran value for .TRUE. logical type],
|
AC_CACHE_CHECK([Fortran value for .TRUE. logical type],
|
||||||
fortran_true_var,
|
fortran_true_var,
|
||||||
[if test "$1" = "none" -o $OMPI_WANT_FORTRAN_BINDINGS -eq 0 ; then
|
[if test "$1" = "none" -o $OMPI_WANT_FORTRAN_BINDINGS -eq 0 -o $ompi_fortran_happy -eq 0 ; then
|
||||||
value=77
|
value=77
|
||||||
else
|
else
|
||||||
OMPI_FORTRAN_MAKE_C_FUNCTION([ompi_print_logical_fn], [print])
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# C module
|
# C module
|
||||||
# We really need the confdefs.h Header file for
|
# We really need the confdefs.h Header file for
|
||||||
@ -57,9 +55,7 @@ AC_DEFUN([OMPI_FORTRAN_GET_VALUE_TRUE],[
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void $ompi_print_logical_fn(ompi_fortran_logical_t * logical);
|
void ompi_print_f(ompi_fortran_logical_t * logical)
|
||||||
|
|
||||||
void $ompi_print_logical_fn(ompi_fortran_logical_t * logical)
|
|
||||||
{
|
{
|
||||||
FILE *f=fopen("conftestval", "w");
|
FILE *f=fopen("conftestval", "w");
|
||||||
if (!f) exit(1);
|
if (!f) exit(1);
|
||||||
@ -77,16 +73,27 @@ void $ompi_print_logical_fn(ompi_fortran_logical_t * logical)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ompi_print(ompi_fortran_logical_t *logical)
|
||||||
|
{ ompi_print_f(logical); }
|
||||||
|
|
||||||
|
void ompi_print_(ompi_fortran_logical_t *logical)
|
||||||
|
{ ompi_print_f(logical); }
|
||||||
|
|
||||||
|
void ompi_print__(ompi_fortran_logical_t *logical)
|
||||||
|
{ ompi_print_f(logical); }
|
||||||
|
|
||||||
|
void OMPI_PRINT(ompi_fortran_logical_t *logical)
|
||||||
|
{ ompi_print_f(logical); }
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat > conftestf.f <<EOF
|
cat > conftestf.f <<EOF
|
||||||
program main
|
program main
|
||||||
logical value
|
logical value
|
||||||
value=.TRUE.
|
value=.TRUE.
|
||||||
CALL print(value)
|
CALL ompi_print(value)
|
||||||
end
|
end
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -98,9 +105,9 @@ EOF
|
|||||||
[happy=1], [happy=0])],
|
[happy=1], [happy=0])],
|
||||||
[happy=0])
|
[happy=0])
|
||||||
|
|
||||||
if test "$happy" = "0" ; then
|
AS_IF([test $happy -eq 0 -a $ompi_fortran_happy -eq 1],
|
||||||
AC_MSG_ERROR([Could not determine value of Fortran .TRUE.. Aborting.])
|
[AC_MSG_ERROR([Could not compile Fortran .TRUE. test. Aborting.])
|
||||||
fi
|
])
|
||||||
|
|
||||||
AS_IF([test "$cross_compiling" = "yes"],
|
AS_IF([test "$cross_compiling" = "yes"],
|
||||||
[AC_MSG_ERROR([Can not determine value of .TRUE. when cross-compiling])],
|
[AC_MSG_ERROR([Can not determine value of .TRUE. when cross-compiling])],
|
||||||
|
@ -238,9 +238,9 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[
|
|||||||
# the Fortran/C interop C_INTxx_T KIND values). So figure out
|
# the Fortran/C interop C_INTxx_T KIND values). So figure out
|
||||||
# those KIND values here and just substitue them in via
|
# those KIND values here and just substitue them in via
|
||||||
# AC_DEFINE's. Kinda gross, but there you are. :-\
|
# AC_DEFINE's. Kinda gross, but there you are. :-\
|
||||||
OMPI_FORTRAN_GET_KIND_VALUE([C_INT16_T], [OMPI_FORTRAN_C_INT16_T_KIND])
|
OMPI_FORTRAN_GET_KIND_VALUE([C_INT16_T], 9, [OMPI_FORTRAN_C_INT16_T_KIND])
|
||||||
OMPI_FORTRAN_GET_KIND_VALUE([C_INT32_T], [OMPI_FORTRAN_C_INT32_T_KIND])
|
OMPI_FORTRAN_GET_KIND_VALUE([C_INT32_T], 18, [OMPI_FORTRAN_C_INT32_T_KIND])
|
||||||
OMPI_FORTRAN_GET_KIND_VALUE([C_INT64_T], [OMPI_FORTRAN_C_INT64_T_KIND])
|
OMPI_FORTRAN_GET_KIND_VALUE([C_INT64_T], 19, [OMPI_FORTRAN_C_INT64_T_KIND])
|
||||||
|
|
||||||
# Get the kind value for Fortran MPI_INTEGER_KIND (corresponding
|
# Get the kind value for Fortran MPI_INTEGER_KIND (corresponding
|
||||||
# to whatever is the same size as a F77 INTEGER -- for the
|
# to whatever is the same size as a F77 INTEGER -- for the
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user