|
|
@@ -0,0 +1,85 @@
|
|
|
+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()
|
|
|
+
|
|
|
+echo_var(MSVC)
|
|
|
+echo_var(MSVC60)
|
|
|
+echo_var(MSVC70)
|
|
|
+echo_var(MSVC71)
|
|
|
+echo_var(MSVC80)
|
|
|
+echo_var(MSVC90)
|
|
|
+echo_var(MSVC10)
|
|
|
+
|
|
|
+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"
|
|
|
+ )
|