File: f77_get_value_true.cmake

package info (click to toggle)
openmpi 1.6.5-9.1%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 91,628 kB
  • ctags: 44,305
  • sloc: ansic: 408,966; cpp: 44,454; sh: 27,828; makefile: 10,486; asm: 3,882; python: 1,239; lex: 805; perl: 549; csh: 253; fortran: 232; f90: 126; tcl: 12
file content (128 lines) | stat: -rw-r--r-- 5,427 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Copyright (c) 2010      High Performance Computing Center Stuttgart, 
#                         University of Stuttgart.  All rights reserved.
#
# $COPYRIGHT$
# 
# Additional copyrights may follow
# 
# $HEADER$
#


# OMPI_F77_GET_VALUE_TRUE()
# -------------------------------------------------------
# Determine the value of .TRUE. of this Fortran compiler.
MACRO(OMPI_F77_GET_VALUE_TRUE)

    IF(OMPI_WANT_F77_BINDINGS AND NOT DEFINED FORTRAN_VALUE_CHECK_DONE)

        MESSAGE(STATUS "Check Fortran value for .TRUE. logical type...")

        OMPI_F77_MAKE_C_FUNCTION(ompi_print_logical_fn print)

        FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_c.c 
            "#include <stdio.h>\n"
            "#include <stdlib.h>\n"
            "\n"
            "#ifdef __cplusplus\n"
            "extern \"C\" {\n"
            "#endif\n"
            "\n"
            "void ${ompi_print_logical_fn}(${ompi_fortran_logical_t} * logical);\n"
            "\n"
            "void ${ompi_print_logical_fn}(${ompi_fortran_logical_t} * logical)\n"
            "{\n"
            "    FILE *f=fopen(\"fortran_true_value\", \"w\");\n"
            "    if (!f) exit(1);\n"
            "\n"
            "    if( ${SIZEOF_INT} >= sizeof(${ompi_fortran_logical_t}) ) {\n"
            "        fprintf(f, \"%d\\n\", (int)*logical);\n"
            "    } else if (${SIZEOF_LONG} >= sizeof(${ompi_fortran_logical_t}) ) {\n"
            "	fprintf(f, \"%ld\\n\", (long) *logical);\n"
            "#ifdef HAVE_LONG_LONG\n"
            "    } else if (${SIZEOF_LONG_LONG} >= sizeof(${ompi_fortran_logical_t}) ) {\n"
            "        fprintf(f, \"%lld\\n\", (long long) *logical);\n"
            "#endif\n"
            "    } else {\n"
            "        exit(1);\n"
            "    }\n"
            "}\n"
            "\n"
            "#ifdef __cplusplus\n"
            "}\n"
            "#endif\n")

        FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/conftest_f.f
            "\tprogram main\n"
            "\tlogical value\n"
            "\tvalue=.TRUE.\n"
            "\tCALL print(value)\n"
            "\tend\n")

        IF(NOT "${C_COMPILER_INCLUDE}" STREQUAL "")
          SET(EXECUTE_OPT "${OMPI_C_INCLUDE_DIR}${C_COMPILER_INCLUDE}")
        ENDIF(NOT "${C_COMPILER_INCLUDE}" STREQUAL "")

        EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} ${OMPI_C_OPTION_COMPILE} conftest_c.c ${EXECUTE_OPT} ${OMPI_C_OUTPUT_OBJ}conftest_c.obj
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
            OUTPUT_VARIABLE OUTPUT
            RESULT_VARIABLE RESULT
            ERROR_VARIABLE ERROR)

        IF(RESULT)
            MESSAGE(STATUS "${OUTPUT}\n${ERROR}")
            MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE..  Aborting.")
        ENDIF(RESULT)

        EXECUTE_PROCESS(COMMAND ${F77} ${F77_OPTION_COMPILE} conftest_f.f ${F77_OUTPUT_OBJ}conftest_f.obj
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
            OUTPUT_VARIABLE OUTPUT
            RESULT_VARIABLE RESULT
            ERROR_VARIABLE ERROR)

        IF(RESULT)
            MESSAGE(STATUS "${OUTPUT}\n${ERROR}")
            MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE..  Aborting.")
        ENDIF(RESULT)

        EXECUTE_PROCESS(COMMAND ${F77} conftest_f.obj conftest_c.obj ${F77_OUTPUT_EXE}conftest.exe
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
            OUTPUT_VARIABLE OUTPUT
            RESULT_VARIABLE RESULT
            ERROR_VARIABLE ERROR)

        IF(RESULT)
            MESSAGE(STATUS "${OUTPUT}\n${ERROR}")
            MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE..  Aborting.")
        ENDIF(RESULT)

        EXECUTE_PROCESS(COMMAND conftest.exe
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
            OUTPUT_VARIABLE OUTPUT
            RESULT_VARIABLE RESULT
            ERROR_VARIABLE ERROR)

        IF(RESULT)
            UNSET(FORTRAN_VALUE_CHECK_DONE CACHE)
            MESSAGE(STATUS "${OUTPUT}\n${ERROR}")
            MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE..  Aborting.")
        ELSE(RESULT)
            IF(EXISTS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_true_value)
              FILE(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_true_value OUTPUT_VALUE)
              MESSAGE(STATUS "Check Fortran value for .TRUE. logical type...${OUTPUT_VALUE}")
              SET(OMPI_FORTRAN_VALUE_TRUE ${OUTPUT_VALUE} CACHE INTERNAL "Fortran value true")
              SET(FORTRAN_VALUE_CHECK_DONE TRUE CACHE INTERNAL "Fortran value true check done")
            ELSE(EXISTS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_true_value)
              UNSET(FORTRAN_VALUE_CHECK_DONE CACHE)
              MESSAGE(FATAL_ERROR "Could not determine value of Fortran .TRUE..  Aborting.")
            ENDIF(EXISTS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/fortran_true_value)
        ENDIF(RESULT)

    ELSEIF(NOT OMPI_WANT_F77_BINDINGS)
        SET(OMPI_FORTRAN_VALUE_TRUE 0)
        UNSET(FORTRAN_VALUE_CHECK_DONE CACHE)
    ENDIF(OMPI_WANT_F77_BINDINGS AND NOT DEFINED FORTRAN_VALUE_CHECK_DONE)

    OMPI_DEF_VAR(OMPI_FORTRAN_VALUE_TRUE "Fortran value for .TRUE. logical type" 0 1)

ENDMACRO(OMPI_F77_GET_VALUE_TRUE)