diff --git a/CMakeLists.txt b/CMakeLists.txt index 389c317a4..3f864c55b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,22 @@ +# Enforce some CMake policies +cmake_minimum_required(VERSION 2.8.12) +if (POLICY CMP0054) + # FIXME: This is horrible. With the old behaviour, + # quoted strings like "MSVC" in if() conditionals + # get implicitly dereferenced. The NEW behaviour + # doesn't do this but CMP0054 was only introduced + # in CMake 3.1 and we support lower versions as the + # minimum. We could set NEW here but it would be very + # confusing to use NEW for some builds and OLD for others + # which could lead to some subtle bugs. Instead when the + # minimum version is 3.1 change this policy to NEW and remove + # the hacks in place to work around it. + cmake_policy(SET CMP0054 OLD) +endif() + # This overrides the default flags for the different CMAKE_BUILD_TYPEs set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/compiler_flags_override.cmake") project(Z3 C CXX) -cmake_minimum_required(VERSION 2.8.12) ################################################################################ # Project version @@ -210,7 +225,8 @@ endif() if ("${TARGET_ARCHITECTURE}" STREQUAL "x86_64") if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) set(SSE_FLAGS "-mfpmath=sse" "-msse" "-msse2") - elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") + # FIXME: Remove "x.." when CMP0054 is set to NEW + elseif ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") set(SSE_FLAGS "/arch:SSE2") else() message(FATAL_ERROR "Unknown compiler ${CMAKE_CXX_COMPILER_ID}") diff --git a/cmake/compiler_flags_override.cmake b/cmake/compiler_flags_override.cmake index cb1f8dbc1..d78b90601 100644 --- a/cmake/compiler_flags_override.cmake +++ b/cmake/compiler_flags_override.cmake @@ -17,8 +17,8 @@ if (("${CMAKE_${_lang}_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_${_lang}_COMP set(CMAKE_${_lang}_FLAGS_MINSIZEREL_INIT "-Os") set(CMAKE_${_lang}_FLAGS_RELEASE_INIT "-O3") set(CMAKE_${_lang}_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") -elseif ("${CMAKE_${_lang}_COMPILER_ID}" MATCHES "MSVC") - # Not tested! + # FIXME: Remove "x.." when CMP0054 is set to NEW +elseif ("x${CMAKE_${_lang}_COMPILER_ID}" STREQUAL "xMSVC") set(CMAKE_${_lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_${_lang}_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1") set(CMAKE_${_lang}_FLAGS_RELEASE_INIT "/MT /O2 /Ob2") diff --git a/cmake/compiler_warnings.cmake b/cmake/compiler_warnings.cmake index e9910c2e4..c214e4464 100644 --- a/cmake/compiler_warnings.cmake +++ b/cmake/compiler_warnings.cmake @@ -12,7 +12,8 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") list(APPEND WARNING_FLAGS_TO_CHECK ${GCC_AND_CLANG_WARNINGS}) list(APPEND WARNING_FLAGS_TO_CHECK ${CLANG_ONLY_WARNINGS}) -elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") + # FIXME: Remove "x.." when CMP0054 is set to NEW +elseif ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") list(APPEND WARNING_FLAGS_TO_CHECK ${MSVC_WARNINGS}) else() message(AUTHOR_WARNING "Unknown compiler") @@ -27,7 +28,8 @@ option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF) if (WARNINGS_AS_ERRORS) if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")) list(APPEND Z3_COMPONENT_CXX_FLAGS "-Werror") - elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") + # FIXME: Remove "x.." when CMP0054 is set to NEW + elseif ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") list(APPEND Z3_COMPONENT_CXX_FLAGS "/WX") else() message(AUTHOR_WARNING "Unknown compiler")