mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
Merge topic 'cmp0128_cuda'
ee1396e29eCMP0128: Add flag in OLD mode even when standard matches the defaultb2c25de8e0CMP0128: Avoid test code duplication3a089cd256CMP0128: Prefix test names with modee13dd52535XL: Detect default extensions mode for legacy compiler Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6890
This commit is contained in:
@@ -142,3 +142,9 @@ Other Changes
|
||||
This became available as of VS 16.10 (toolchain version 14.29.30037).
|
||||
|
||||
* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.03 or later.
|
||||
|
||||
3.22.2
|
||||
------
|
||||
|
||||
* The ``OLD`` behavior of :policy:`CMP0128` was fixed to add flags even when
|
||||
the specified standard matches the compiler default.
|
||||
|
||||
@@ -61,7 +61,7 @@ const char* info_language_standard_default =
|
||||
|
||||
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
|
||||
/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
|
||||
#if (defined(__clang__) || defined(__GNUC__) || \
|
||||
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
|
||||
defined(__TI_COMPILER_VERSION__)) && \
|
||||
!defined(__STRICT_ANSI__) && !defined(_MSC_VER)
|
||||
"ON"
|
||||
|
||||
@@ -67,7 +67,7 @@ const char* info_language_standard_default = "INFO" ":" "standard_default["
|
||||
|
||||
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
|
||||
/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
|
||||
#if (defined(__clang__) || defined(__GNUC__) || \
|
||||
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
|
||||
defined(__TI_COMPILER_VERSION__)) && \
|
||||
!defined(__STRICT_ANSI__) && !defined(_MSC_VER)
|
||||
"ON"
|
||||
|
||||
@@ -210,8 +210,9 @@ struct StandardLevelComputer
|
||||
|
||||
// If the standard requested is older than the compiler's default or the
|
||||
// extension mode doesn't match then we need to use a flag.
|
||||
if (stdIt < defaultStdIt ||
|
||||
(cmp0128 == cmPolicies::NEW && ext != defaultExt)) {
|
||||
if ((cmp0128 != cmPolicies::NEW && stdIt <= defaultStdIt) ||
|
||||
(cmp0128 == cmPolicies::NEW &&
|
||||
(stdIt < defaultStdIt || ext != defaultExt))) {
|
||||
auto offset = std::distance(cm::cbegin(stds), stdIt);
|
||||
return cmStrCat("CMAKE_", this->Language, stdsStrings[offset], "_", type,
|
||||
"_COMPILE_OPTION");
|
||||
|
||||
@@ -4,5 +4,4 @@ enable_language(@lang@)
|
||||
string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@)
|
||||
add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@")
|
||||
@@ -0,0 +1,2 @@
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@)
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
@@ -0,0 +1 @@
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@)
|
||||
@@ -0,0 +1,2 @@
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_default@)
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
@@ -0,0 +1,12 @@
|
||||
foreach(flag @flags@)
|
||||
string(FIND "${actual_stdout}" "${flag}" position)
|
||||
|
||||
if(NOT position EQUAL -1)
|
||||
set(found TRUE)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT found)
|
||||
set(RunCMake_TEST_FAILED "No compile flags from \"@flags@\" found for LANG_STANDARD=default.")
|
||||
endif()
|
||||
@@ -0,0 +1 @@
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
@@ -1,7 +1,5 @@
|
||||
enable_language(@lang@)
|
||||
cmake_policy(SET CMP0128 OLD)
|
||||
set(CMAKE_POLICY_WARNING_CMP0128 ON)
|
||||
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_default@)
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@")
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
enable_language(@lang@)
|
||||
cmake_policy(SET CMP0128 OLD)
|
||||
set(CMAKE_POLICY_WARNING_CMP0128 ON)
|
||||
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@)
|
||||
add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@")
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
enable_language(@lang@)
|
||||
|
||||
# Make sure the compile command is not hidden.
|
||||
string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@)
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@")
|
||||
@@ -1,9 +0,0 @@
|
||||
enable_language(@lang@)
|
||||
|
||||
# Make sure the compile command is not hidden.
|
||||
string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}")
|
||||
|
||||
set(CMAKE_@lang@_EXTENSIONS @extensions_default@)
|
||||
set(CMAKE_@lang@_STANDARD @standard_default@)
|
||||
add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@")
|
||||
@@ -35,11 +35,13 @@ elseif (cxx_std_98 IN_LIST CXX_FEATURES AND cxx_std_11 IN_LIST CXX_FEATURES)
|
||||
endif()
|
||||
|
||||
configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt" "${RunCMake_BINARY_DIR}/CMakeLists.txt" COPYONLY)
|
||||
file(READ "${RunCMake_SOURCE_DIR}/CMP0128Common.cmake" cmp0128_common)
|
||||
|
||||
function(test_build)
|
||||
set(test ${name}-${lang})
|
||||
|
||||
configure_file("${RunCMake_SOURCE_DIR}/${name}.cmake" "${RunCMake_BINARY_DIR}/${test}.cmake" @ONLY)
|
||||
file(READ "${RunCMake_SOURCE_DIR}/${name}.cmake" cmake)
|
||||
file(CONFIGURE OUTPUT "${RunCMake_BINARY_DIR}/${test}.cmake" CONTENT "${cmake}${cmp0128_common}" @ONLY)
|
||||
if(EXISTS "${RunCMake_SOURCE_DIR}/${name}-build-check.cmake")
|
||||
configure_file("${RunCMake_SOURCE_DIR}/${name}-build-check.cmake" "${RunCMake_BINARY_DIR}/${test}-build-check.cmake" @ONLY)
|
||||
endif()
|
||||
@@ -68,7 +70,24 @@ macro(mangle_flags variable)
|
||||
list(APPEND flags "${result}")
|
||||
endmacro()
|
||||
|
||||
function(test_extensions_opposite)
|
||||
function(test_cmp0128_old_same_standard)
|
||||
if(extensions_default)
|
||||
set(flag_ext "_EXT")
|
||||
endif()
|
||||
|
||||
set(flag "${${lang}${${lang}_STANDARD_DEFAULT}${flag_ext}_FLAG}")
|
||||
|
||||
if(NOT flag)
|
||||
return()
|
||||
endif()
|
||||
|
||||
mangle_flags(flag)
|
||||
|
||||
set(name CMP0128OldSameStandard)
|
||||
test_build(--verbose)
|
||||
endfunction()
|
||||
|
||||
function(test_cmp0128_new_extensions_opposite)
|
||||
if(extensions_opposite)
|
||||
set(flag_ext "_EXT")
|
||||
endif()
|
||||
@@ -83,16 +102,16 @@ function(test_extensions_opposite)
|
||||
|
||||
# Make sure we enable/disable extensions when:
|
||||
# 1. LANG_STANDARD is unset.
|
||||
set(name ExtensionsStandardUnset)
|
||||
set(name CMP0128NewExtensionsStandardUnset)
|
||||
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0128=NEW)
|
||||
test_build(--verbose)
|
||||
|
||||
# 2. LANG_STANDARD matches CMAKE_LANG_STANDARD_DEFAULT.
|
||||
set(name ExtensionsStandardDefault)
|
||||
set(name CMP0128NewExtensionsStandardDefault)
|
||||
test_build(--verbose)
|
||||
endfunction()
|
||||
|
||||
function(test_no_unnecessary_flag)
|
||||
function(test_cmp0128_new_no_unnecessary_flag)
|
||||
set(standard_flag "${${lang}${${lang}_STANDARD_DEFAULT}_FLAG}")
|
||||
set(extension_flag "${${lang}${${lang}_STANDARD_DEFAULT}_EXT_FLAG}")
|
||||
|
||||
@@ -103,7 +122,7 @@ function(test_no_unnecessary_flag)
|
||||
mangle_flags(standard_flag)
|
||||
mangle_flags(extension_flag)
|
||||
|
||||
set(name NoUnnecessaryFlag)
|
||||
set(name CMP0128NewNoUnnecessaryFlag)
|
||||
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0128=NEW)
|
||||
test_build(--verbose)
|
||||
endfunction()
|
||||
@@ -144,8 +163,9 @@ function(test_lang lang ext)
|
||||
set(extensions_opposite ON)
|
||||
endif()
|
||||
|
||||
test_extensions_opposite()
|
||||
test_no_unnecessary_flag()
|
||||
test_cmp0128_new_extensions_opposite()
|
||||
test_cmp0128_new_no_unnecessary_flag()
|
||||
test_cmp0128_old_same_standard()
|
||||
test_cmp0128_warn_match()
|
||||
test_cmp0128_warn_unset()
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user