summaryrefslogtreecommitdiffstats
path: root/cmake/QtFeature.cmake
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2019-10-17 10:49:44 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2019-10-17 16:57:25 +0000
commit2fa23e46c0b79a065d92a95033bfc3ae10b707cf (patch)
treeab13778363b9719fbf6bb055608ae88fcd614642 /cmake/QtFeature.cmake
parent4df389eb4f1ae10284c03023e923ce2164d46753 (diff)
Fix C++ standard detection
We cannot use a generator expression in an if statement, it does not work. Instead, we could inspect the CMAKE_C/CXX_COMPILE_FEATURES list, but unfortunately that's not reliable. For example it detects that ICPC supports C++17 when in fact that depends on the installed libstdc++. Therefore this patch revives our own configure tests. Change-Id: Ic3bc5762fbe81837722523e3881ac16e84628519 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake/QtFeature.cmake')
-rw-r--r--cmake/QtFeature.cmake16
1 files changed, 15 insertions, 1 deletions
diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake
index 3a8a04c253..e3fb9c4232 100644
--- a/cmake/QtFeature.cmake
+++ b/cmake/QtFeature.cmake
@@ -472,7 +472,7 @@ function(qt_feature_copy_global_config_features_to_core target)
endfunction()
function(qt_config_compile_test name)
- cmake_parse_arguments(arg "" "LABEL;PROJECT_PATH" "LIBRARIES;CODE" ${ARGN})
+ cmake_parse_arguments(arg "" "LABEL;PROJECT_PATH;C_STANDARD;CXX_STANDARD" "LIBRARIES;CODE" ${ARGN})
if(arg_PROJECT_PATH)
message(STATUS "Performing Test ${arg_LABEL}")
@@ -499,10 +499,24 @@ function(qt_config_compile_test name)
endforeach()
if(NOT DEFINED HAVE_${name})
+ set(_save_CMAKE_C_STANDARD "${CMAKE_C_STANDARD}")
+ set(_save_CMAKE_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
+
+ if(arg_C_STANDARD)
+ set(CMAKE_C_STANDARD "${arg_C_STANDARD}")
+ endif()
+
+ if(arg_CXX_STANDARD)
+ set(CMAKE_CXX_STANDARD "${arg_CXX_STANDARD}")
+ endif()
+
set(_save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
set(CMAKE_REQUIRED_LIBRARIES "${arg_LIBRARIES}")
check_cxx_source_compiles("${arg_UNPARSED_ARGUMENTS} ${arg_CODE}" HAVE_${name})
set(CMAKE_REQUIRED_LIBRARIES "${_save_CMAKE_REQUIRED_LIBRARIES}")
+
+ set(CMAKE_C_STANDARD "${_save_CMAKE_C_STANDARD}")
+ set(CMAKE_CXX_STANDARD "${_save_CMAKE_CXX_STANDARD}")
endif()
endif()