Merge topic 'optimize-static-library-deps'
2e42651dff Add option to optimize link dependencies for static libraries
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5103
diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml
index 1c97377..9ad8fc7 100644
--- a/.gitlab/os-linux.yml
+++ b/.gitlab/os-linux.yml
@@ -99,12 +99,14 @@
.linux_builder_tags:
tags:
+ - cmake
- build
- docker
- linux
.linux_builder_tags_qt:
tags:
+ - cmake
- build
- docker
- linux
@@ -112,6 +114,7 @@
.linux_builder_tags_cuda:
tags:
+ - cmake
- cuda-rt
- docker
- linux
diff --git a/Help/release/3.18.rst b/Help/release/3.18.rst
index 93694f6..f199244 100644
--- a/Help/release/3.18.rst
+++ b/Help/release/3.18.rst
@@ -264,6 +264,10 @@
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize colors.
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+ is now aware of the availability of C11 features in MSVC 19.27 and above,
+ including support for the ``c_restrict`` feature and the ``-std:c11`` flag.
+
Deprecated and Removed Features
===============================
@@ -347,3 +351,6 @@
``OFF`` because this feature can break existing projects that have
identically named header files in different include directories.
This restores compatibility with behavior of CMake 3.15 and below.
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+ was updated for MSVC 19.27 as mentioned above.
diff --git a/Modules/Compiler/MSVC-C-FeatureTests.cmake b/Modules/Compiler/MSVC-C-FeatureTests.cmake
index 3f09be2..862bff3 100644
--- a/Modules/Compiler/MSVC-C-FeatureTests.cmake
+++ b/Modules/Compiler/MSVC-C-FeatureTests.cmake
@@ -2,7 +2,8 @@
# Not yet supported:
#set(_cmake_feature_test_c_static_assert "")
-#set(_cmake_feature_test_c_restrict "")
+
+set(_cmake_feature_test_c_restrict "_MSC_VER >= 1927")
set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
diff --git a/Modules/Compiler/MSVC-C.cmake b/Modules/Compiler/MSVC-C.cmake
index bca9764..a05e6a0 100644
--- a/Modules/Compiler/MSVC-C.cmake
+++ b/Modules/Compiler/MSVC-C.cmake
@@ -1,15 +1,31 @@
-# MSVC has no specific options to set C language standards, but set them as
-# empty strings anyways so the feature test infrastructure can at least check
-# to see if they are defined.
-set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
-set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
-set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+# file Copyright.txt or https://cmake.org/licensing for details.
-# There is no meaningful default for this
-set(CMAKE_C_STANDARD_DEFAULT "")
+include(Compiler/CMakeCommonCompilerMacros)
+
+if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std:c11")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std:c11")
+
+ __compiler_check_default_language_standard(C 19.27 99)
+else()
+ # MSVC has no specific options to set C language standards, but set them as
+ # empty strings anyways so the feature test infrastructure can at least check
+ # to see if they are defined.
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+ # There is no meaningful default for this
+ set(CMAKE_C_STANDARD_DEFAULT "")
+endif()
set(CMAKE_C_CLANG_TIDY_DRIVER_MODE "cl")
@@ -31,6 +47,10 @@
list(APPEND CMAKE_C_COMPILE_FEATURES c_variadic_macros)
list(APPEND CMAKE_C99_COMPILE_FEATURES c_variadic_macros)
endif()
+ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.27)
+ list(APPEND CMAKE_C_COMPILE_FEATURES c_restrict)
+ list(APPEND CMAKE_C99_COMPILE_FEATURES c_restrict)
+ endif()
set(_result 0) # expected by cmake_determine_compile_features
endmacro()
diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake
index 9b65f39..a927a5d 100644
--- a/Modules/FindPython/Support.cmake
+++ b/Modules/FindPython/Support.cmake
@@ -486,7 +486,7 @@
endif()
elseif (NAME STREQUAL "SOABI")
execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c
- "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))\nexcept Exception:\n import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))"
+ "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '',sysconfig.get_config_var('SO') or '']))\nexcept Exception:\n import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '',sysconfig.get_config_var('SO') or '']))"
RESULT_VARIABLE _result
OUTPUT_VARIABLE _soabi
ERROR_QUIET
@@ -522,7 +522,7 @@
endif()
endif()
- if (config_flag STREQUAL "ABIFLAGS")
+ if (NAME STREQUAL "ABIFLAGS" OR NAME STREQUAL "SOABI")
set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
return()
endif()
@@ -1768,9 +1768,7 @@
unset (${_PYTHON_PREFIX}_SITEARCH)
endif()
- if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3")
- _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
- endif()
+ _python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
# store properties in the cache to speed-up future searches
set (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
@@ -2841,8 +2839,7 @@
${_PYTHON_PREFIX}_PyPy_VERSION "${${_PYTHON_PREFIX}_PyPy_VERSION}")
endif()
- if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_GREATER_EQUAL "3"
- AND NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
+ if (NOT DEFINED ${_PYTHON_PREFIX}_SOABI)
_python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
endif()
@@ -3092,11 +3089,6 @@
function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY "STATIC;SHARED;MODULE;WITH_SOABI" "" "")
- if (prefix STREQUAL "Python2" AND PYTHON_ADD_LIBRARY_WITH_SOABI)
- message (AUTHOR_WARNING "FindPython2: Option `WITH_SOABI` is not supported for Python2 and will be ignored.")
- unset (PYTHON_ADD_LIBRARY_WITH_SOABI)
- endif()
-
if (PYTHON_ADD_LIBRARY_STATIC)
set (type STATIC)
elseif (PYTHON_ADD_LIBRARY_SHARED)
diff --git a/Modules/FindRuby.cmake b/Modules/FindRuby.cmake
index 3b8122e..0559a69 100644
--- a/Modules/FindRuby.cmake
+++ b/Modules/FindRuby.cmake
@@ -48,10 +48,21 @@
Ruby patch version.
-Also:
+The following variables are also provided for compatibility reasons,
+don't use them in new code:
+``RUBY_EXECUTABLE``
+ same as Ruby_EXECUTABLE.
+``RUBY_INCLUDE_DIRS``
+ same as Ruby_INCLUDE_DIRS.
``RUBY_INCLUDE_PATH``
- same as Ruby_INCLUDE_DIRS, only provided for compatibility reasons, don't use it
+ same as Ruby_INCLUDE_DIRS.
+``RUBY_LIBRARY``
+ same as Ruby_LIBRARY.
+``RUBY_VERSION``
+ same as Ruby_VERSION.
+``RUBY_FOUND``
+ same as Ruby_FOUND.
Hints
^^^^^
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index c82a659..4e526d5 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 18)
-set(CMake_VERSION_PATCH 20200811)
+set(CMake_VERSION_PATCH 20200813)
#set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0)
diff --git a/Tests/FindPython/SOABI/CMakeLists.txt b/Tests/FindPython/SOABI/CMakeLists.txt
index 4a6aea3..36daa9f 100644
--- a/Tests/FindPython/SOABI/CMakeLists.txt
+++ b/Tests/FindPython/SOABI/CMakeLists.txt
@@ -20,3 +20,19 @@
message(FATAL_ERROR "Module suffix do not include Python3_SOABI")
endif()
endif()
+
+
+find_package(Python2 COMPONENTS ${CMake_TEST_FindPython_COMPONENT})
+if(NOT DEFINED Python2_SOABI)
+ message(FATAL_ERROR "Python2_SOABI for ${CMake_TEST_FindPython_COMPONENT} not found")
+endif()
+
+if (Python2_Development_FOUND AND Python2_SOABI)
+ Python2_add_library (spam2 MODULE WITH_SOABI ../spam.c)
+ target_compile_definitions (spam2 PRIVATE PYTHON2)
+
+ get_property (suffix TARGET spam2 PROPERTY SUFFIX)
+ if (NOT suffix MATCHES "^.${Python2_SOABI}")
+ message(FATAL_ERROR "Module suffix do not include Python2_SOABI")
+ endif()
+endif()