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 (c) 2011-2012 Cisco Systems, Inc. All rights reserved. dnl $COPYRIGHT$ dnl dnl Additional copyrights may follow dnl dnl $HEADER$ dnl # OMPI_FORTRAN_GET_VALUE_TRUE() # ------------------------------------------------------- # Determine the value of .TRUE. of this Fortran compiler. AC_DEFUN([OMPI_FORTRAN_GET_VALUE_TRUE],[ # invalidate cache if result came from a run where FORTRAN was disabled if test "$ompi_cv_fortran_true_value" = "0" ; then unset ompi_cv_fortran_true_value fi AS_VAR_PUSHDEF([fortran_true_var], [ompi_cv_fortran_true_value]) AC_CACHE_CHECK([Fortran value for .TRUE. logical type], fortran_true_var, [if test "$1" = "none" -o $OMPI_WANT_FORTRAN_BINDINGS -eq 0 -o $ompi_fortran_happy -eq 0 ; then value=77 else # # 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_f(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); } } 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 } #endif EOF cat > conftestf.f <<EOF program main logical value value=.TRUE. CALL ompi_print(value) end EOF # # Try the compilation and run. # OPAL_LOG_COMMAND([$CC $CFLAGS -I. -c conftest.c], [OPAL_LOG_COMMAND([$FC $FCFLAGS -o conftest conftest.o conftestf.f $LDFLAGS $LIBS], [happy=1], [happy=0])], [happy=0]) AS_IF([test $happy -eq 0 -a $ompi_fortran_happy -eq 1], [AC_MSG_ERROR([Could not compile Fortran .TRUE. test. Aborting.]) ]) AS_IF([test "$cross_compiling" = "yes"], [AC_MSG_ERROR([Can not determine value of .TRUE. when cross-compiling])], [OPAL_LOG_COMMAND([./conftest], [value=`sed 's/ *//' conftestval`], [AC_MSG_ERROR([Could not determine value of Fotran .TRUE.. Aborting.])])]) fi AS_VAR_SET(fortran_true_var, [$value]) unset value ]) AS_VAR_COPY([ompi_fortran_true_value], [fortran_true_var]) AC_DEFINE_UNQUOTED([OMPI_FORTRAN_VALUE_TRUE], [$ompi_fortran_true_value], [Fortran value for LOGICAL .TRUE. value]) AS_VAR_POPDEF([fortran_true_var]) unset happy ompi_print_logical_fn rm -rf conftest* ])dnl