summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeCUDACompiler.cmake.in1
-rw-r--r--Modules/CMakeCUDACompilerABI.cu33
-rw-r--r--Modules/CMakeDetermineCUDACompiler.cmake18
-rw-r--r--Modules/CMakeDetermineCompilerABI.cmake8
-rw-r--r--Modules/CMakeDetermineCompilerId.cmake2
-rw-r--r--Modules/CMakeFindBinUtils.cmake7
-rw-r--r--Modules/CMakeTestCUDACompiler.cmake45
-rw-r--r--Modules/CUDA/architectures.cmake60
-rw-r--r--Modules/Compiler/AppleClang-CXX.cmake10
-rw-r--r--Modules/ExternalProject.cmake10
-rw-r--r--Modules/FindMatlab.cmake1
-rw-r--r--Modules/FindPostgreSQL.cmake2
-rw-r--r--Modules/FindPython/Support.cmake35
-rw-r--r--Modules/FindX11.cmake34
-rw-r--r--Modules/FindZLIB.cmake24
15 files changed, 264 insertions, 26 deletions
diff --git a/Modules/CMakeCUDACompiler.cmake.in b/Modules/CMakeCUDACompiler.cmake.in
index 9f2e213..57d595a 100644
--- a/Modules/CMakeCUDACompiler.cmake.in
+++ b/Modules/CMakeCUDACompiler.cmake.in
@@ -55,6 +55,7 @@ set(CMAKE_CUDA_COMPILER_LIBRARY_ROOT "@CMAKE_CUDA_COMPILER_LIBRARY_ROOT@")
set(CMAKE_CUDA_ARCHITECTURES_ALL "@CMAKE_CUDA_ARCHITECTURES_ALL@")
set(CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR "@CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR@")
+set(CMAKE_CUDA_ARCHITECTURES_NATIVE "@CMAKE_CUDA_ARCHITECTURES_NATIVE@")
set(CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES "@CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES@")
diff --git a/Modules/CMakeCUDACompilerABI.cu b/Modules/CMakeCUDACompilerABI.cu
index 449a079..8463e86 100644
--- a/Modules/CMakeCUDACompilerABI.cu
+++ b/Modules/CMakeCUDACompilerABI.cu
@@ -2,6 +2,10 @@
# error "A C or C++ compiler has been selected for CUDA"
#endif
+#include <cstdio>
+
+#include <cuda_runtime.h>
+
#include "CMakeCompilerABI.h"
int main(int argc, char* argv[])
@@ -13,6 +17,31 @@ int main(int argc, char* argv[])
#if defined(ABI_ID)
require += info_abi[argc];
#endif
- (void)argv;
- return require;
+ static_cast<void>(argv);
+
+ int count = 0;
+ if (cudaGetDeviceCount(&count) != cudaSuccess || count == 0) {
+ std::fprintf(stderr, "No CUDA devices found.\n");
+ return -1;
+ }
+
+ int found = 0;
+ const char* sep = "";
+ for (int device = 0; device < count; ++device) {
+ cudaDeviceProp prop;
+ if (cudaGetDeviceProperties(&prop, device) == cudaSuccess) {
+ std::printf("%s%d%d", sep, prop.major, prop.minor);
+ sep = ";";
+ found = 1;
+ }
+ }
+
+ if (!found) {
+ std::fprintf(stderr, "No CUDA architecture detected from any devices.\n");
+ // Convince the compiler that the non-zero return value depends
+ // on the info strings so they are not optimized out.
+ return require ? -1 : 1;
+ }
+
+ return 0;
}
diff --git a/Modules/CMakeDetermineCUDACompiler.cmake b/Modules/CMakeDetermineCUDACompiler.cmake
index 2649441..f68c4b2 100644
--- a/Modules/CMakeDetermineCUDACompiler.cmake
+++ b/Modules/CMakeDetermineCUDACompiler.cmake
@@ -249,7 +249,8 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
set(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION "${CMAKE_MATCH_1}")
endif()
- # Make the all and all-major architecture information available.
+ # Make the all, all-major, and native architecture information available.
+ # FIXME(#23161): Defer architecture detection until compiler testing.
include(${CMAKE_ROOT}/Modules/CUDA/architectures.cmake)
endif()
@@ -272,6 +273,7 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
endif()
endif()
+ # FIXME(#23161): Defer architecture testing until compiler testing.
if(DEFINED CMAKE_CUDA_ARCHITECTURES)
if(CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
# For sufficiently new NVCC we can just use the all and all-major flags.
@@ -289,6 +291,17 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR})
endif()
endif()
+ elseif(CMAKE_CUDA_ARCHITECTURES STREQUAL "native")
+ # For sufficiently new NVCC we can just use the 'native' value directly.
+ # For VS we don't test since we can't find nvcc this early (see #23161).
+ if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.6)
+ string(APPEND nvcc_test_flags " -arch=${CMAKE_CUDA_ARCHITECTURES}")
+ set(architectures_tested "${CMAKE_CUDA_ARCHITECTURES}")
+ elseif(CMAKE_GENERATOR MATCHES "Visual Studio")
+ set(architectures_tested "${CMAKE_CUDA_ARCHITECTURES}")
+ else()
+ set(architectures_test ${_CUDA_ARCHITECTURES_NATIVE})
+ endif()
elseif(CMAKE_CUDA_ARCHITECTURES OR "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
# Explicit architectures. Test them during detection.
set(architectures_explicit TRUE)
@@ -346,6 +359,7 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
# We now know the version, so make the architecture variables available.
set(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION ${CMAKE_CUDA_COMPILER_VERSION})
+ # FIXME(#23161): Defer architecture detection until compiler testing.
include(${CMAKE_ROOT}/Modules/CUDA/architectures.cmake)
endif()
@@ -633,7 +647,7 @@ if("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
message(FATAL_ERROR "Failed to detect a default CUDA architecture.\n\nCompiler output:\n${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
endif()
endif()
-elseif(CMAKE_CUDA_ARCHITECTURES AND NOT "${architectures_tested}" MATCHES "^(all|all-major)$")
+elseif(CMAKE_CUDA_ARCHITECTURES AND NOT "${architectures_tested}" MATCHES "^(all|all-major|native)$")
# Sort since order mustn't matter.
list(SORT architectures_detected)
list(SORT architectures_tested)
diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake
index 8191d81..82a6d21 100644
--- a/Modules/CMakeDetermineCompilerABI.cmake
+++ b/Modules/CMakeDetermineCompilerABI.cmake
@@ -26,6 +26,14 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
if(DEFINED CMAKE_${lang}_VERBOSE_COMPILE_FLAG)
set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_COMPILE_FLAG}")
endif()
+ if(lang STREQUAL "CUDA")
+ if(CMAKE_CUDA_ARCHITECTURES STREQUAL "native")
+ # We are about to detect the native architectures, so we do
+ # not yet know them. Use all architectures during detection.
+ set(CMAKE_CUDA_ARCHITECTURES "all")
+ endif()
+ set(CMAKE_CUDA_RUNTIME_LIBRARY "Static")
+ endif()
if(NOT "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC")
# Avoid adding our own platform standard libraries for compilers
# from which we might detect implicit link libraries.
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index 5670509..0317f34 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -495,7 +495,7 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
set(cuda_target "<TargetMachinePlatform>64</TargetMachinePlatform>")
endif()
- if(CMAKE_CUDA_ARCHITECTURES AND NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
+ if(CMAKE_CUDA_ARCHITECTURES AND NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major|native)$")
foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
string(REGEX MATCH "[0-9]+" arch_name "${arch}")
string(APPEND cuda_codegen "compute_${arch_name},sm_${arch_name};")
diff --git a/Modules/CMakeFindBinUtils.cmake b/Modules/CMakeFindBinUtils.cmake
index 16d3106..a6bd0d1 100644
--- a/Modules/CMakeFindBinUtils.cmake
+++ b/Modules/CMakeFindBinUtils.cmake
@@ -173,8 +173,13 @@ else()
else()
list(PREPEND _CMAKE_LINKER_NAMES "ld.lld")
endif()
- if(NOT APPLE)
+ if(APPLE)
# llvm-ar does not generate a symbol table that the Apple ld64 linker accepts.
+ # FIXME(#23333): We still need to consider 'llvm-ar' as a fallback because
+ # the 'APPLE' definition may be based on the host in this context, and a
+ # cross-compiling toolchain may not have 'ar'.
+ list(APPEND _CMAKE_AR_NAMES "llvm-ar")
+ else()
list(PREPEND _CMAKE_AR_NAMES "llvm-ar")
endif()
list(PREPEND _CMAKE_RANLIB_NAMES "llvm-ranlib")
diff --git a/Modules/CMakeTestCUDACompiler.cmake b/Modules/CMakeTestCUDACompiler.cmake
index 25a3653..ea07482 100644
--- a/Modules/CMakeTestCUDACompiler.cmake
+++ b/Modules/CMakeTestCUDACompiler.cmake
@@ -21,6 +21,51 @@ if(CMAKE_CUDA_ABI_COMPILED)
# The compiler worked so skip dedicated test below.
set(CMAKE_CUDA_COMPILER_WORKS TRUE)
message(STATUS "Check for working CUDA compiler: ${CMAKE_CUDA_COMPILER} - skipped")
+
+ # Run the test binary to detect the native architectures.
+ execute_process(COMMAND "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCompilerABI_CUDA.bin"
+ RESULT_VARIABLE _CUDA_ARCHS_RESULT
+ OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
+ ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(_CUDA_ARCHS_RESULT EQUAL 0)
+ if("$ENV{CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP}")
+ # Undocumented hook used by CMake's CI.
+ # Clamp native architecture to version range supported by this CUDA.
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL 0 _CUDA_ARCH_MIN)
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL -1 _CUDA_ARCH_MAX)
+ set(CMAKE_CUDA_ARCHITECTURES_NATIVE "")
+ foreach(_CUDA_ARCH IN LISTS _CUDA_ARCHS_OUTPUT)
+ if(_CUDA_ARCH LESS _CUDA_ARCH_MIN)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MIN}")
+ endif()
+ if(_CUDA_ARCH GREATER _CUDA_ARCH_MAX)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MAX}")
+ endif()
+ list(APPEND CMAKE_CUDA_ARCHITECTURES_NATIVE ${_CUDA_ARCH})
+ endforeach()
+ unset(_CUDA_ARCH)
+ unset(_CUDA_ARCH_MIN)
+ unset(_CUDA_ARCH_MAX)
+ else()
+ set(CMAKE_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ endif()
+ list(REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_NATIVE)
+ else()
+ if(NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")
+ set(_CUDA_ARCHS_STATUS " (${_CUDA_ARCHS_RESULT})")
+ else()
+ set(_CUDA_ARCHS_STATUS "")
+ endif()
+ string(REPLACE "\n" "\n " _CUDA_ARCHS_OUTPUT " ${_CUDA_ARCHS_OUTPUT}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Detecting the CUDA native architecture(s) failed with "
+ "the following output:\n${_CUDA_ARCHS_OUTPUT}\n\n")
+ endif()
+ unset(_CUDA_ARCHS_EXE)
+ unset(_CUDA_ARCHS_RESULT)
+ unset(_CUDA_ARCHS_OUTPUT)
endif()
# This file is used by EnableLanguage in cmGlobalGenerator to
diff --git a/Modules/CUDA/architectures.cmake b/Modules/CUDA/architectures.cmake
index fa3a5a1..9b1f2b5 100644
--- a/Modules/CUDA/architectures.cmake
+++ b/Modules/CUDA/architectures.cmake
@@ -44,3 +44,63 @@ if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4
AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang"))
list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87)
endif()
+
+# FIXME(#23161): Detect architectures early since we test them during
+# compiler detection. We already have code to detect them later during
+# compiler testing, so we should not need to do this here.
+if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
+ set(_CUDA_ARCHS_EXE "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCUDACompilerArchs.bin")
+ execute_process(
+ COMMAND "${_CUDA_NVCC_EXECUTABLE}" -o "${_CUDA_ARCHS_EXE}" --cudart=static "${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu"
+ RESULT_VARIABLE _CUDA_ARCHS_RESULT
+ OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
+ ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
+ )
+ if(_CUDA_ARCHS_RESULT EQUAL 0)
+ execute_process(
+ COMMAND "${_CUDA_ARCHS_EXE}"
+ RESULT_VARIABLE _CUDA_ARCHS_RESULT
+ OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
+ ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ endif()
+ if(_CUDA_ARCHS_RESULT EQUAL 0)
+ if("$ENV{CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP}")
+ # Undocumented hook used by CMake's CI.
+ # Clamp native architecture to version range supported by this CUDA.
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL 0 _CUDA_ARCH_MIN)
+ list(GET CMAKE_CUDA_ARCHITECTURES_ALL -1 _CUDA_ARCH_MAX)
+ set(_CUDA_ARCHITECTURES_NATIVE "")
+ foreach(_CUDA_ARCH IN LISTS _CUDA_ARCHS_OUTPUT)
+ if(_CUDA_ARCH LESS _CUDA_ARCH_MIN)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MIN}")
+ endif()
+ if(_CUDA_ARCH GREATER _CUDA_ARCH_MAX)
+ set(_CUDA_ARCH "${_CUDA_ARCH_MAX}")
+ endif()
+ list(APPEND _CUDA_ARCHITECTURES_NATIVE ${_CUDA_ARCH})
+ endforeach()
+ unset(_CUDA_ARCH)
+ unset(_CUDA_ARCH_MIN)
+ unset(_CUDA_ARCH_MAX)
+ else()
+ set(_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
+ endif()
+ list(REMOVE_DUPLICATES _CUDA_ARCHITECTURES_NATIVE)
+ else()
+ if (NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")
+ set(_CUDA_ARCHS_STATUS " (${_CUDA_ARCHS_RESULT})")
+ else()
+ set(_CUDA_ARCHS_STATUS "")
+ endif()
+ string(REPLACE "\n" "\n " _CUDA_ARCHS_OUTPUT " ${_CUDA_ARCHS_OUTPUT}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Detecting the CUDA native architecture(s) failed with "
+ "the following output:\n${_CUDA_ARCHS_OUTPUT}\n\n")
+ set(_CUDA_ARCHS_OUTPUT "")
+ endif()
+ unset(_CUDA_ARCHS_EXE)
+ unset(_CUDA_ARCHS_RESULT)
+ unset(_CUDA_ARCHS_OUTPUT)
+endif()
diff --git a/Modules/Compiler/AppleClang-CXX.cmake b/Modules/Compiler/AppleClang-CXX.cmake
index 28be1df..7c97969 100644
--- a/Modules/Compiler/AppleClang-CXX.cmake
+++ b/Modules/Compiler/AppleClang-CXX.cmake
@@ -47,9 +47,17 @@ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
set(CMAKE_CXX11_STANDARD__HAS_FULL_SUPPORT ON)
endif()
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
+ set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++20")
+ set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++20")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
endif()
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0)
+ set(CMAKE_CXX23_STANDARD_COMPILE_OPTION "-std=c++2b")
+ set(CMAKE_CXX23_EXTENSION_COMPILE_OPTION "-std=gnu++2b")
+endif()
+
__compiler_check_default_language_standard(CXX 4.0 98)
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index 292333d..42cb7a0 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -811,11 +811,11 @@ External Project Definition
**Miscellaneous Options:**
``LIST_SEPARATOR <sep>``
- For any of the various ``..._COMMAND`` options, replace ``;`` with
- ``<sep>`` in the specified command lines. This can be useful where list
- variables may be given in commands where they should end up as
- space-separated arguments (``<sep>`` would be a single space character
- string in this case).
+ For any of the various ``..._COMMAND`` options, and ``CMAKE_ARGS``,
+ replace ``;`` with ``<sep>`` in the specified command lines.
+ This can be useful where list variables may be given in commands where
+ they should end up as space-separated arguments (``<sep>`` would be a
+ single space character string in this case).
``COMMAND <cmd>...``
Any of the other ``..._COMMAND`` options can have additional commands
diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake
index 3c7efbc..17c1fa1 100644
--- a/Modules/FindMatlab.cmake
+++ b/Modules/FindMatlab.cmake
@@ -288,6 +288,7 @@ if(NOT MATLAB_ADDITIONAL_VERSIONS)
endif()
set(MATLAB_VERSIONS_MAPPING
+ "R2022a=9.12"
"R2021b=9.11"
"R2021a=9.10"
"R2020b=9.9"
diff --git a/Modules/FindPostgreSQL.cmake b/Modules/FindPostgreSQL.cmake
index 147071a..25c5c09 100644
--- a/Modules/FindPostgreSQL.cmake
+++ b/Modules/FindPostgreSQL.cmake
@@ -53,7 +53,7 @@ is set regardless of the presence of the ``Server`` component in find_package ca
# In Windows the default installation of PostgreSQL uses that as part of the path.
# E.g C:\Program Files\PostgreSQL\8.4.
# Currently, the following version numbers are known to this module:
-# "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
+# "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
#
# To use this variable just do something like this:
# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake
index b7a0ef6..afe9743 100644
--- a/Modules/FindPython/Support.cmake
+++ b/Modules/FindPython/Support.cmake
@@ -280,26 +280,26 @@ function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
if (CMAKE_LIBRARY_ARCHITECTURE)
set (suffixes "${abi}")
if (suffixes)
- list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+ list (TRANSFORM suffixes PREPEND "lib/python${version}/config-${version}")
list (TRANSFORM suffixes APPEND "-${CMAKE_LIBRARY_ARCHITECTURE}")
else()
- set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}-${CMAKE_LIBRARY_ARCHITECTURE}")
+ set (suffixes "lib/python${version}/config-${version}-${CMAKE_LIBRARY_ARCHITECTURE}")
endif()
list (APPEND path_suffixes ${suffixes})
endif()
set (suffixes "${abi}")
if (suffixes)
- list (TRANSFORM suffixes PREPEND "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+ list (TRANSFORM suffixes PREPEND "lib/python${version}/config-${version}")
else()
- set (suffixes "lib/python${_PGPS_VERSION}/config-${_PGPS_VERSION}")
+ set (suffixes "lib/python${version}/config-${version}")
endif()
list (APPEND path_suffixes ${suffixes})
elseif (_PGPS_INCLUDE)
set (suffixes "${abi}")
if (suffixes)
- list (TRANSFORM suffixes PREPEND "include/python${_PGPS_VERSION}")
+ list (TRANSFORM suffixes PREPEND "include/python${version}")
else()
- set (suffixes "include/python${_PGPS_VERSION}")
+ set (suffixes "include/python${version}")
endif()
list (APPEND path_suffixes ${suffixes} include)
endif()
@@ -318,6 +318,9 @@ function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
elseif (_PGPS_LIBRARY)
list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES})
elseif (_PGPS_INCLUDE)
+ foreach (version IN LISTS _PGPS_VERSION)
+ list (APPEND path_suffixes lib/pypy${version}/include pypy${version}/include)
+ endforeach()
list (APPEND path_suffixes ${_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES})
endif()
endif()
@@ -587,7 +590,13 @@ function (_PYTHON_GET_VERSION)
set (${_PGV_PREFIX}ABI "${CMAKE_MATCH_3}" PARENT_SCOPE)
elseif (library_name MATCHES "pypy(3)?-c")
set (version "${CMAKE_MATCH_1}")
- if (version EQUAL "3")
+ # try to pick-up a more precise version from the path
+ get_filename_component (library_dir "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY)
+ if (library_dir MATCHES "/pypy([23])\\.([0-9]+)/")
+ set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
+ set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
+ set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
+ elseif (version EQUAL "3")
set (${_PGV_PREFIX}VERSION_MAJOR "3" PARENT_SCOPE)
set (${_PGV_PREFIX}VERSION "3" PARENT_SCOPE)
else()
@@ -1265,7 +1274,7 @@ if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR EQUAL "3")
# special name for runtime part
list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy3-c)
endif()
- set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy3)
+ set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy3/include pypy3/include)
else()
set (_${_PYTHON_PREFIX}_PYPY_NAMES pypy)
set (_${_PYTHON_PREFIX}_PYPY_LIB_NAMES pypy-c)
@@ -1273,8 +1282,9 @@ else()
# special name for runtime part
list (APPEND _${_PYTHON_PREFIX}_PYPY_LIB_NAMES libpypy-c)
endif()
- set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy)
+ set (_${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES lib/pypy/include pypy/include)
endif()
+list (APPEND _${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES libexec/include)
set (_${_PYTHON_PREFIX}_PYPY_EXECUTABLE_PATH_SUFFIXES bin)
set (_${_PYTHON_PREFIX}_PYPY_LIBRARY_PATH_SUFFIXES lib libs bin)
list (APPEND _${_PYTHON_PREFIX}_PYPY_INCLUDE_PATH_SUFFIXES include)
@@ -1303,7 +1313,7 @@ foreach (_${_PYTHON_PREFIX}_IMPLEMENTATION IN LISTS _${_PYTHON_PREFIX}_FIND_IMPL
if (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "CPython")
list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "Python.h")
elseif (_${_PYTHON_PREFIX}_IMPLEMENTATION STREQUAL "PyPy")
- list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "PyPy.h")
+ list (APPEND _${_PYTHON_PREFIX}_INCLUDE_NAMES "PyPy.h" "pypy_decl.h")
endif()
endforeach()
@@ -2921,6 +2931,11 @@ if (("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
# update versioning
set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
+ elseif (_${_PYTHON_PREFIX}_VERSION VERSION_EQUAL _${_PYTHON_PREFIX}_INC_VERSION_MAJOR)
+ # library specify only major version, use include file for full version information
+ set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
+ set (_${_PYTHON_PREFIX}_VERSION_MINOR ${_${_PYTHON_PREFIX}_INC_VERSION_MINOR})
+ set (_${_PYTHON_PREFIX}_VERSION_PATCH ${_${_PYTHON_PREFIX}_INC_VERSION_PATCH})
endif()
else()
set (_${_PYTHON_PREFIX}_VERSION ${_${_PYTHON_PREFIX}_INC_VERSION})
diff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake
index 5a9d2a0..8e5a5f1 100644
--- a/Modules/FindX11.cmake
+++ b/Modules/FindX11.cmake
@@ -34,6 +34,8 @@ and also the following more fine grained variables and targets:
X11_xcb_randr_INCLUDE_PATH, X11_xcb_randr_LIB, X11_xcb_randr_FOUND, X11::xcb_randr
X11_xcb_util_INCLUDE_PATH, X11_xcb_util_LIB, X11_xcb_util_FOUND, X11::xcb_util
X11_xcb_xfixes_INCLUDE_PATH, X11_xcb_xfixes_LIB, X11_xcb_xfixes_FOUND, X11::xcb_xfixes
+ X11_xcb_xtest_INCLUDE_PATH, X11_xcb_xtest_LIB, X11_xcb_xtest_FOUND, X11::xcb_xtest
+ X11_xcb_keysyms_INCLUDE_PATH, X11_xcb_keysyms_LIB,X11_xcb_keysyms_FOUND,X11::xcb_keysyms
X11_xcb_xkb_INCLUDE_PATH, X11_xcb_xkb_LIB, X11_xcb_xkb_FOUND, X11::xcb_xkb
X11_Xcomposite_INCLUDE_PATH, X11_Xcomposite_LIB, X11_Xcomposite_FOUND, X11::Xcomposite
X11_Xcursor_INCLUDE_PATH, X11_Xcursor_LIB, X11_Xcursor_FOUND, X11::Xcursor
@@ -84,7 +86,7 @@ and also the following more fine grained variables and targets:
Added the ``Xaw``, ``xcb_util``, and ``xcb_xfixes`` libraries.
.. versionadded:: 3.24
- Added the ``xcb_randr`` library.
+ Added the ``xcb_randr``, ``xcb_xtext``, and ``xcb_keysyms`` libraries.
#]=======================================================================]
@@ -134,6 +136,8 @@ if (UNIX)
find_path(X11_xcb_randr_INCLUDE_PATH xcb/randr.h ${X11_INC_SEARCH_PATH})
find_path(X11_xcb_util_INCLUDE_PATH xcb/xcb_aux.h ${X11_INC_SEARCH_PATH})
find_path(X11_xcb_xfixes_INCLUDE_PATH xcb/xfixes.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_xcb_xtest_INCLUDE_PATH xcb/xtest.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_xcb_keysyms_INCLUDE_PATH xcb/xcb_keysyms.h ${X11_INC_SEARCH_PATH})
find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h ${X11_INC_SEARCH_PATH})
find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h ${X11_INC_SEARCH_PATH})
find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h ${X11_INC_SEARCH_PATH})
@@ -188,6 +192,8 @@ if (UNIX)
find_library(X11_xcb_randr_LIB xcb-randr ${X11_LIB_SEARCH_PATH})
find_library(X11_xcb_util_LIB xcb-util ${X11_LIB_SEARCH_PATH})
find_library(X11_xcb_xfixes_LIB xcb-xfixes ${X11_LIB_SEARCH_PATH})
+ find_library(X11_xcb_xtest_LIB xcb-xtest ${X11_LIB_SEARCH_PATH})
+ find_library(X11_xcb_keysyms_LIB xcb-keysyms ${X11_LIB_SEARCH_PATH})
find_library(X11_xcb_xkb_LIB xcb-xkb ${X11_LIB_SEARCH_PATH})
find_library(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH})
find_library(X11_Xcursor_LIB Xcursor ${X11_LIB_SEARCH_PATH})
@@ -299,6 +305,14 @@ if (UNIX)
set(X11_xcb_xfixes_FOUND TRUE)
endif ()
+ if (X11_xcb_xtest_LIB)
+ set(X11_xcb_xtest_FOUND TRUE)
+ endif ()
+
+ if (X11_xcb_keysyms_LIB)
+ set(X11_xcb_keysyms_FOUND TRUE)
+ endif ()
+
if (X11_xcb_xkb_LIB)
set(X11_xcb_xkb_FOUND TRUE)
endif ()
@@ -631,6 +645,20 @@ if (UNIX)
INTERFACE_LINK_LIBRARIES "X11::xcb")
endif ()
+ if (X11_xcb_xtest_FOUND AND NOT TARGET X11::xcb_xtest)
+ add_library(X11::xcb_xtest UNKNOWN IMPORTED)
+ set_target_properties(X11::xcb_xtest PROPERTIES
+ IMPORTED_LOCATION "${X11_xcb_xtest_LIB}"
+ INTERFACE_LINK_LIBRARIES "X11::xcb")
+ endif ()
+
+ if (X11_xcb_keysyms_FOUND AND NOT TARGET X11::xcb_keysyms)
+ add_library(X11::xcb_keysyms UNKNOWN IMPORTED)
+ set_target_properties(X11::xcb_keysyms PROPERTIES
+ IMPORTED_LOCATION "${X11_xcb_keysyms_LIB}"
+ INTERFACE_LINK_LIBRARIES "X11::xcb")
+ endif ()
+
if (X11_xcb_xkb_FOUND AND NOT TARGET X11::xcb_xkb)
add_library(X11::xcb_xkb UNKNOWN IMPORTED)
set_target_properties(X11::xcb_xkb PROPERTIES
@@ -853,6 +881,10 @@ if (UNIX)
X11_xcb_util_INCLUDE_PATH
X11_xcb_xfixes_LIB
X11_xcb_xfixes_INCLUDE_PATH
+ X11_xcb_xtest_LIB
+ X11_xcb_xtest_INCLUDE_PATH
+ X11_xcb_keysyms_LIB
+ X11_xcb_keysyms_INCLUDE_PATH
X11_xcb_xkb_LIB
X11_X11_xcb_LIB
X11_X11_xcb_INCLUDE_PATH
diff --git a/Modules/FindZLIB.cmake b/Modules/FindZLIB.cmake
index 5778b03..4af842a 100644
--- a/Modules/FindZLIB.cmake
+++ b/Modules/FindZLIB.cmake
@@ -53,6 +53,11 @@ Hints
A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this
module where to look.
+
+.. versionadded:: 3.24
+ Set ``ZLIB_USE_STATIC_LIBS`` to ``ON`` to look for static libraries.
+ Default is ``OFF``.
+
#]=======================================================================]
set(_ZLIB_SEARCHES)
@@ -72,8 +77,8 @@ set(_ZLIB_SEARCH_NORMAL
unset(_ZLIB_x86)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
-set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic)
-set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd)
+set(ZLIB_NAMES z zlib zdll zlib1 zlibstatic zlibstat zlibvc)
+set(ZLIB_NAMES_DEBUG zd zlibd zdlld zlibd1 zlib1d zlibstaticd zlibstatd zlibvcd)
# Try each search configuration.
foreach(search ${_ZLIB_SEARCHES})
@@ -82,11 +87,26 @@ endforeach()
# Allow ZLIB_LIBRARY to be set manually, as the location of the zlib library
if(NOT ZLIB_LIBRARY)
+ # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
+ if(ZLIB_USE_STATIC_LIBS)
+ set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+ if(WIN32)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+ else()
+ set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+ endif()
+ endif()
+
foreach(search ${_ZLIB_SEARCHES})
find_library(ZLIB_LIBRARY_RELEASE NAMES ${ZLIB_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
find_library(ZLIB_LIBRARY_DEBUG NAMES ${ZLIB_NAMES_DEBUG} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
+ # Restore the original find library ordering
+ if(ZLIB_USE_STATIC_LIBS)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
+ endif()
+
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
select_library_configurations(ZLIB)
endif()