dnl -*- shell-script -*- dnl dnl Copyright (c) 2004-2005 The Trustees of Indiana University. dnl All rights reserved. dnl Copyright (c) 2004-2005 The Trustees of the University of Tennessee. dnl All rights 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$ dnl dnl Additional copyrights may follow dnl dnl $HEADER$ dnl # OMPI_F77_GET_VALUE_TRUE() # ------------------------------------------------------- # Determine the value of .TRUE. of this Fortran compiler. AC_DEFUN([OMPI_F77_GET_VALUE_TRUE],[ # invalidate cache if result came from a run where F77 was disabled if test "$ompi_cv_f77_true_value" = "0" ; then unset ompi_cv_f77_true_value fi AC_CACHE_CHECK([Fortran value for .TRUE. logical type], [ompi_cv_f77_true_value], [if test "$1" = "none" -o "$OMPI_WANT_F77_BINDINGS" = "0" ; then ompi_cv_f77_true_value=0 else OMPI_F77_MAKE_C_FUNCTION([ompi_print_logical_fn], [print]) # # C module # We really need the confdefs.h Header file for # the ompi_fortran_logical_t definition # if test \! -f confdefs.h ; then AC_MSG_WARN([*** Problem running configure test!]) AC_MSG_WARN([*** Cannot find confdefs.h file for config test]) AC_MSG_WARN([*** See config.log for details.]) AC_MSG_ERROR([*** Cannot continue.]) fi cat > conftest.c <<EOF #include <stdio.h> #include <stdlib.h> #include "confdefs.h" #ifdef __cplusplus extern "C" { #endif void $ompi_print_logical_fn(ompi_fortran_logical_t * logical); void $ompi_print_logical_fn(ompi_fortran_logical_t * logical) { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); if( SIZEOF_INT >= sizeof(ompi_fortran_logical_t) ) { fprintf(f, "%d\n", (int)*logical); } else if (SIZEOF_LONG >= sizeof(ompi_fortran_logical_t) ) { fprintf(f, "%ld\n", (long) *logical); #ifdef HAVE_LONG_LONG } else if (SIZEOF_LONG_LONG >= sizeof(ompi_fortran_logical_t) ) { fprintf(f, "%lld\n", (long long) *logical); #endif } else { exit(1); } } #ifdef __cplusplus } #endif EOF cat > conftestf.f <<EOF program main logical value value=.TRUE. CALL print(value) end EOF # # Try the compilation and run. # OMPI_LOG_COMMAND([$CC $CFLAGS -I. -c conftest.c], [OMPI_LOG_COMMAND([$F77 $FFLAGS -o conftest conftest.o conftestf.f $LDFLAGS $LIBS], [happy=1], [happy=0])], [happy=0]) if test "$happy" = "0" ; then AC_MSG_ERROR([Could not determine value of Fortran .TRUE.. Aborting.]) fi AS_IF([test "$cross_compiling" = "yes"], [AC_MSG_ERROR([Can not determine value of .TRUE. when cross-compiling])], [OMPI_LOG_COMMAND([./conftest], [ompi_cv_f77_true_value=`sed 's/ *//' conftestval`], [AC_MSG_ERROR([Could not determine value of Fotran .TRUE.. Aborting.])])]) fi]) AC_DEFINE_UNQUOTED([OMPI_FORTRAN_VALUE_TRUE], [$ompi_cv_f77_true_value], [Fortran value for LOGICAL .TRUE. value]) unset happy ompi_print_logical_fn rm -rf conftest* ])dnl