aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/modules/Check64BitFormat.cmake
blob: 3cad33d6451a28c5d93cda95e83de163b72cf5b3 (plain)
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
###################################################################
#
#  Copyright (c) 2006 Frederic Heem, <frederic.heem@telsey.it>
#  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
#   notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
#   notice, this list of conditions and the following disclaimer in
#   the documentation and/or other materials provided with the
#   distribution.
#
# * Neither the name of the Telsey nor the names of its
#   contributors may be used to endorse or promote products derived
#   from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
###################################################################
# - Check the 64 bit formats.
# CHECK_64BIT_FORMAT(FORMAT VARIABLE)
# - macro which checks if the 64 bit format is accepted
#  FORMAT - the format, e.g ll, L, q or I64
#  VARIABLE - variable to store the format if it is a valdid format
#
# Example of use in a CMakeLists.txt
#
# include(Check64BitFormat)
# 
# check_64bit_format(ll FORMAT_64BIT)
# check_64bit_format(L FORMAT_64BIT)
# check_64bit_format(q FORMAT_64BIT)
# check_64bit_format(I64 FORMAT_64BIT)
# 
# if(NOT FORMAT_64BIT)
#   message(FATAL " 64 bit format missing")
# endif(NOT FORMAT_64BIT)
# 
# set(PRIX64 "${FORMAT_64BIT}X")
# set(PRIx64 "${FORMAT_64BIT}x")
# set(PRId64 "${FORMAT_64BIT}d")
# set(PRIo64 "${FORMAT_64BIT}o")
# set(PRIu64 "${FORMAT_64BIT}u")



MACRO(CHECK_64BIT_FORMAT FORMAT VARIABLE)
  IF(NOT ${VARIABLE})
    SET(FORMAT ${FORMAT})
#CONFIGURE_FILE("${CMAKE_ROOT}/Modules/Check64BitFormat.c.in"
    CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/modules/Check64BitFormat.c.in"
      "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/Check64BitFormat.c" IMMEDIATE @ONLY)

    TRY_RUN(RUN_RESULT_VAR COMPILE_RESULT_VAR
      ${CMAKE_BINARY_DIR}
      ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/Check64BitFormat.c
      OUTPUT_VARIABLE OUTPUT)
    
    IF(${RUN_RESULT_VAR} STREQUAL "0")
      SET(${VARIABLE} 1 CACHE INTERNAL "Have format ${FORMAT}")
      MESSAGE(STATUS "Looking for 64bit format ${FORMAT} - found")
      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
        "Determining if the format ${FORMAT} runs passed with the following output:\n"
        "${OUTPUT}\n\n")
      SET(${VARIABLE} ${FORMAT})
    ELSE(${RUN_RESULT_VAR} STREQUAL "0")
      MESSAGE(STATUS "Looking for 64bit format ${FORMAT} - not found")
      SET(${VARIABLE} "" CACHE INTERNAL "Have format ${FORMAT}")
      FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
        "Determining if the format ${FORMAT} runs with the following output:\n"
        "${OUTPUT}\n\n")
    ENDIF(${RUN_RESULT_VAR} STREQUAL "0")
  ENDIF(NOT ${VARIABLE})
ENDMACRO(CHECK_64BIT_FORMAT)