FindOpenSSL: Add support for version-range

This commit is contained in:
Deniz Bahadir 2021-01-29 16:33:23 +01:00
parent c5691f03e5
commit bc00cf9300
8 changed files with 98 additions and 0 deletions

View File

@ -0,0 +1,4 @@
FindOpenSSL-version-range
-------------------------
* :module:`FindOpenSSL` module gains the capability to manage a version range.

View File

@ -7,6 +7,13 @@ FindOpenSSL
Find the OpenSSL encryption library.
This module finds an installed OpenSSL library and determines its version.
.. versionadded:: 3.19
When a version is requested, it can be specified as a simple value or as a
range. For a detailed description of version range usage and capabilities,
refer to the :command:`find_package` command.
.. versionadded:: 3.18
Support for OpenSSL 3.0.
@ -566,6 +573,7 @@ find_package_handle_standard_args(OpenSSL
OPENSSL_INCLUDE_DIR
VERSION_VAR
OPENSSL_VERSION
HANDLE_VERSION_RANGE
HANDLE_COMPONENTS
FAIL_MESSAGE
"Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"

View File

@ -239,6 +239,9 @@ add_RunCMake_test(FileAPI -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
add_RunCMake_test(FindBoost)
add_RunCMake_test(FindLua)
add_RunCMake_test(FindOpenGL)
if(CMake_TEST_FindOpenSSL)
add_RunCMake_test(FindOpenSSL)
endif()
if(CMake_TEST_UseSWIG)
add_RunCMake_test(FindSWIG)
add_RunCMake_test(UseSWIG -DCMake_TEST_FindPython=${CMake_TEST_FindPython})

View File

@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.19...3.20)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@ -0,0 +1,5 @@
include(RunCMake)
run_cmake(version)
run_cmake(version-exact)
run_cmake(version-range)

View File

@ -0,0 +1,19 @@
cmake_minimum_required (VERSION 3.19...3.20)
find_package (OpenSSL REQUIRED COMPONENTS Crypto)
# Store version without a possibly trailing letter.
string (REGEX MATCH "^([0-9.]+)" version "${OPENSSL_VERSION}")
# clean-up OpenSSL variables
unset (OPENSSL_INCLUDE_DIR)
unset (OPENSSL_CRYPTO_LIBRARY)
unset (OPENSSL_CRYPTO_LIBRARIES)
unset (OPENSSL_LIBRARIES)
unset (OPENSSL_VERSION)
unset (OPENSSL_FOUND)
find_package (OpenSSL ${version} EXACT COMPONENTS Crypto)
if (NOT OPENSSL_FOUND)
message (FATAL_ERROR "Failed to find OpenSSL with version ${version} EXACT")
endif()

View File

@ -0,0 +1,37 @@
cmake_minimum_required (VERSION 3.19...3.20)
find_package (OpenSSL REQUIRED COMPONENTS Crypto)
# Store version without a possibly trailing letter.
string (REGEX MATCH "^([0-9.]+)" version "${OPENSSL_VERSION}")
# clean-up OpenSSL variables
unset (OPENSSL_INCLUDE_DIR)
unset (OPENSSL_CRYPTO_LIBRARY)
unset (OPENSSL_CRYPTO_LIBRARIES)
unset (OPENSSL_LIBRARIES)
unset (OPENSSL_VERSION)
unset (OPENSSL_FOUND)
## Specify a range including current OpenSSL version
string (REGEX MATCH "^([0-9]+)" upper_version "${version}")
math (EXPR upper_version "${upper_version} + 1")
find_package (OpenSSL 0.9...${upper_version}.0 COMPONENTS Crypto)
if (NOT OPENSSL_FOUND)
message (FATAL_ERROR "Failed to find OpenSSL with version range 0.9...${upper_version}.0")
endif()
# clean-up OpenSSL variables
unset (OPENSSL_INCLUDE_DIR)
unset (OPENSSL_CRYPTO_LIBRARY)
unset (OPENSSL_CRYPTO_LIBRARIES)
unset (OPENSSL_LIBRARIES)
unset (OPENSSL_VERSION)
unset (OPENSSL_FOUND)
## Specify a range excluding current OpenSSL version
set (range 0.9...<${version})
find_package (OpenSSL ${range} COMPONENTS Crypto)
if (OPENSSL_FOUND)
message (FATAL_ERROR "Unexpectedly find OpenSSL with version range ${range}")
endif()

View File

@ -0,0 +1,19 @@
cmake_minimum_required (VERSION 3.19...3.20)
find_package (OpenSSL REQUIRED COMPONENTS Crypto)
# Store version without a possibly trailing letter.
string (REGEX MATCH "^([0-9.]+)" version "${OPENSSL_VERSION}")
# clean-up OpenSSL variables
unset (OPENSSL_INCLUDE_DIR)
unset (OPENSSL_CRYPTO_LIBRARY)
unset (OPENSSL_CRYPTO_LIBRARIES)
unset (OPENSSL_LIBRARIES)
unset (OPENSSL_VERSION)
unset (OPENSSL_FOUND)
find_package (OpenSSL ${version} COMPONENTS Crypto)
if (NOT OPENSSL_FOUND)
message (FATAL_ERROR "Failed to find OpenSSL with version ${version}")
endif()