Brad King 3b5256e19e Teach our tests about special cases for VS 11
Teach the CheckCompilerRelatedVariables test to verify MSVC11.  Update
the special cases already in the Preprocess and VSExternalInclude tests
for VS 10 to work for VS 11 too.
2011-09-23 11:07:24 -04:00

91 lines
2.0 KiB
CMake

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()
echo_var(MSVC)
echo_var(MSVC60)
echo_var(MSVC70)
echo_var(MSVC71)
echo_var(MSVC80)
echo_var(MSVC90)
echo_var(MSVC10)
echo_var(MSVC11)
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()
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()
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"
)