Bläddra i källkod

Merge branch 'backport-clang-gnulike-support' into clang-gnulike-support

Brad King 6 år sedan
förälder
incheckning
5cfc39127e

+ 7 - 0
Modules/Compiler/Clang-CXX.cmake

@@ -58,6 +58,13 @@ if("x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xGNU")
   unset(_clang_version_std17)
   unset(_clang_version_std17)
 
 
   if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
   if("x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
+    # The MSVC standard library requires C++14, and MSVC itself has no
+    # notion of operating in a mode not aware of at least that standard.
+    set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "-std=c++14")
+    set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+    set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++14")
+    set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++14")
+
     # This clang++ is missing some features because of MSVC compatibility.
     # This clang++ is missing some features because of MSVC compatibility.
     unset(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
     unset(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT)
     unset(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)
     unset(CMAKE_CXX14_STANDARD__HAS_FULL_SUPPORT)

+ 1 - 1
Tests/AliasTarget/CMakeLists.txt

@@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 98)
 # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
 # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
     CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
     CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
-  set(CMAKE_CXX_STANDARD 14)
+  set(CMAKE_CXX_STANDARD 11)
 endif()
 endif()
 
 
 add_library(foo SHARED empty.cpp)
 add_library(foo SHARED empty.cpp)

+ 0 - 5
Tests/Complex/CMakeLists.txt

@@ -446,11 +446,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
   set(CMAKE_CXX_STANDARD 11)
   set(CMAKE_CXX_STANDARD 11)
 endif()
 endif()
 
 
-if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
-    CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
-  set(CMAKE_CXX_STANDARD 14)
-endif()
-
 #
 #
 # Create the libs and the main exe
 # Create the libs and the main exe
 #
 #

+ 0 - 5
Tests/ComplexOneConfig/CMakeLists.txt

@@ -403,11 +403,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
   set(CMAKE_CXX_STANDARD 11)
   set(CMAKE_CXX_STANDARD 11)
 endif()
 endif()
 
 
-if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
-    CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
-  set(CMAKE_CXX_STANDARD 14)
-endif()
-
 #
 #
 # Create the libs and the main exe
 # Create the libs and the main exe
 #
 #

+ 1 - 3
Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt

@@ -133,9 +133,7 @@ endif()
 
 
 # for msvc the compiler version determines which c++11 features are available.
 # for msvc the compiler version determines which c++11 features are available.
 if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"
 if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"
-    OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
-    AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC"
-    AND "x${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}" STREQUAL "xMSVC" ))
+    OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC"))
   if(";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ";cxx_delegating_constructors;")
   if(";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ";cxx_delegating_constructors;")
     list(APPEND true_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
     list(APPEND true_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
     list(APPEND true_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
     list(APPEND true_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)

+ 6 - 11
Tests/Plugin/CMakeLists.txt

@@ -5,17 +5,6 @@ project(Plugin)
 # We need proper C++98 support from the compiler
 # We need proper C++98 support from the compiler
 set(CMAKE_CXX_STANDARD 98)
 set(CMAKE_CXX_STANDARD 98)
 
 
-# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
-if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
-    CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
-  set(CMAKE_CXX_STANDARD 11)
-endif()
-
-if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
-    CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
-  set(CMAKE_CXX_STANDARD 14)
-endif()
-
 # Test per-target output directory properties.
 # Test per-target output directory properties.
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Plugin_BINARY_DIR}/bin)
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Plugin_BINARY_DIR}/bin)
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${Plugin_BINARY_DIR}/lib/plugin)
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${Plugin_BINARY_DIR}/lib/plugin)
@@ -40,6 +29,12 @@ include_directories(
   ${Plugin_SOURCE_DIR}/include
   ${Plugin_SOURCE_DIR}/include
   )
   )
 
 
+# Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
+if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
+    CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
+  set(CMAKE_CXX_STANDARD 11)
+endif()
+
 # Create an executable that exports an API for use by plugins.
 # Create an executable that exports an API for use by plugins.
 add_executable(example_exe src/example_exe.cxx)
 add_executable(example_exe src/example_exe.cxx)
 set_target_properties(example_exe PROPERTIES
 set_target_properties(example_exe PROPERTIES

+ 0 - 5
Tests/RunCMake/GenerateExportHeader/GEH.cmake

@@ -51,11 +51,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
   set(CMAKE_CXX_STANDARD 11)
   set(CMAKE_CXX_STANDARD 11)
 endif()
 endif()
 
 
-if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
-    CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
-  set(CMAKE_CXX_STANDARD 14)
-endif()
-
 add_subdirectory(lib_shared_and_static)
 add_subdirectory(lib_shared_and_static)
 
 
 if(CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
 if(CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"