summaryrefslogtreecommitdiffstats
path: root/Tests/CheckCompilerRelatedVariables/CMakeLists.txt
blob: 87b7f1acdb24466143130baa982dc4e166d187a6 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
cmake_minimum_required(VERSION 2.8)
project(CheckCompilerRelatedVariables)


function(echo_var var)
  if(DEFINED ${var})
    message("${var}='${${var}}' is defined")
  else()
    message("${var}='${${var}}' is NOT defined")
  endif()
endfunction()


#
# Check that the correct number of MSVC** variables are defined...
#
set(msvc_total 0)

if(DEFINED MSVC60)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC70)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC71)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC80)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC90)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC10)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC11)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC12)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()
if(DEFINED MSVC14)
  math(EXPR msvc_total "${msvc_total} + 1")
endif()

echo_var(MSVC)
echo_var(MSVC60)
echo_var(MSVC70)
echo_var(MSVC71)
echo_var(MSVC80)
echo_var(MSVC90)
echo_var(MSVC10)
echo_var(MSVC11)
echo_var(MSVC12)
echo_var(MSVC14)
echo_var(MSVC_IDE)

if(MSVC)
  #
  # MSVC is set in cl.cmake when cl is the compiler...
  #
  # Exactly one of the numbered variables should also be set
  # indicating which version of the cl compiler / Visual Studio
  # is in use...
  #
  if(msvc_total EQUAL 1)
    message("test passes: exactly one MSVC** variable is defined...")
  else()
    message(FATAL_ERROR "error: ${msvc_total} MSVC** variables are defined -- exactly 1 expected")
  endif()
  if(NOT DEFINED MSVC_IDE)
    message(FATAL_ERROR "MSVC_IDE not defined but should be!")
  elseif("${CMAKE_GENERATOR}" MATCHES "Visual Studio" AND NOT MSVC_IDE)
    message(FATAL_ERROR "MSVC_IDE is not true but should be (${CMAKE_GENERATOR})!")
  elseif(NOT "${CMAKE_GENERATOR}" MATCHES "Visual Studio" AND MSVC_IDE)
    message(FATAL_ERROR "MSVC_IDE is true but should not be (${CMAKE_GENERATOR})!")
  endif()
else()
  #
  # The compiler is something other than cl... None of the MSVC** variables
  # should be defined...
  #
  if(msvc_total EQUAL 0)
    message("test passes: no MSVC** variables are defined on non-MSVC build...")
  else()
    message(FATAL_ERROR "error: ${msvc_total} MSVC** variables are defined -- exactly 0 expected")
  endif()
  if(DEFINED MSVC_IDE)
    message(FATAL_ERROR "MSVC_IDE is defined but should not be!")
  endif()
endif()


#
# This is a no-op executable... If this test is going to fail, it fails during
# the configure step while cmake is configuring this CMakeLists.txt file...
#

file(WRITE
  "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  "int main() { return 0; }
"
  )

add_executable(
  CheckCompilerRelatedVariables
  "${CMAKE_CURRENT_BINARY_DIR}/main.cxx"
  )