From 75e3a8e811b290cb9921887f2b086377af90880f Mon Sep 17 00:00:00 2001 From: Konstantin Podsvirov Date: Fri, 7 Aug 2015 14:13:33 +0300 Subject: [PATCH] FindOpenSSL: Provide imported targets OpenSSL::{SSL,Crypto} --- Modules/FindOpenSSL.cmake | 73 +++++++++++++++++++++++++++ Tests/CMakeLists.txt | 4 ++ Tests/FindOpenSSL/CMakeLists.txt | 9 ++++ Tests/FindOpenSSL/rand/CMakeLists.txt | 14 +++++ Tests/FindOpenSSL/rand/main.cc | 22 ++++++++ 5 files changed, 122 insertions(+) create mode 100644 Tests/FindOpenSSL/CMakeLists.txt create mode 100644 Tests/FindOpenSSL/rand/CMakeLists.txt create mode 100644 Tests/FindOpenSSL/rand/main.cc diff --git a/Modules/FindOpenSSL.cmake b/Modules/FindOpenSSL.cmake index a334354df..434ef5815 100644 --- a/Modules/FindOpenSSL.cmake +++ b/Modules/FindOpenSSL.cmake @@ -4,6 +4,16 @@ # # Find the OpenSSL encryption library. # +# Imported Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following :prop_tgt:`IMPORTED` targets: +# +# ``OpenSSL::SSL`` +# The OpenSSL ``ssl`` library, if found. +# ``OpenSSL::Crypto`` +# The OpenSSL ``crypto`` library, if found. +# # Result Variables # ^^^^^^^^^^^^^^^^ # @@ -341,3 +351,66 @@ else () endif () mark_as_advanced(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES) + +if(OPENSSL_FOUND) + if(NOT TARGET OpenSSL::Crypto AND + (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR + EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR + EXISTS "${LIB_EAY_LIBRARY_RELEASE}") + ) + add_library(OpenSSL::Crypto UNKNOWN IMPORTED) + set_target_properties(OpenSSL::Crypto PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") + if(EXISTS "${OPENSSL_CRYPTO_LIBRARY}") + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}") + endif() + if(EXISTS "${LIB_EAY_LIBRARY_DEBUG}") + set_property(TARGET OpenSSL::Crypto APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${LIB_EAY_LIBRARY_DEBUG}") + endif() + if(EXISTS "${LIB_EAY_LIBRARY_RELEASE}") + set_property(TARGET OpenSSL::Crypto APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${LIB_EAY_LIBRARY_RELEASE}") + endif() + endif() + if(NOT TARGET OpenSSL::SSL AND + (EXISTS "${OPENSSL_SSL_LIBRARY}" OR + EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR + EXISTS "${SSL_EAY_LIBRARY_RELEASE}") + ) + add_library(OpenSSL::SSL UNKNOWN IMPORTED) + set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") + if(EXISTS "${OPENSSL_SSL_LIBRARY}") + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}") + endif() + if(EXISTS "${SSL_EAY_LIBRARY_DEBUG}") + set_property(TARGET OpenSSL::SSL APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${SSL_EAY_LIBRARY_DEBUG}") + endif() + if(EXISTS "${SSL_EAY_LIBRARY_RELEASE}") + set_property(TARGET OpenSSL::SSL APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${SSL_EAY_LIBRARY_RELEASE}") + endif() + if(TARGET OpenSSL::Crypto) + set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_LINK_LIBRARIES OpenSSL::Crypto) + endif() + endif() +endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 5781a9ec1..35b29bf6e 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1333,6 +1333,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release add_subdirectory(FindJsonCpp) endif() + if(CMake_TEST_FindOpenSSL) + add_subdirectory(FindOpenSSL) + endif() + # Matlab module if(CMake_TEST_FindMatlab) ADD_TEST_MACRO(FindMatlab.basic_checks ${CMAKE_CTEST_COMMAND} -C $) diff --git a/Tests/FindOpenSSL/CMakeLists.txt b/Tests/FindOpenSSL/CMakeLists.txt new file mode 100644 index 000000000..66b3fb299 --- /dev/null +++ b/Tests/FindOpenSSL/CMakeLists.txt @@ -0,0 +1,9 @@ +add_test(NAME FindOpenSSL.rand COMMAND ${CMAKE_CTEST_COMMAND} + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindOpenSSL/rand" + "${CMake_BINARY_DIR}/Tests/FindOpenSSL/rand" + ${build_generator_args} + --build-project FindOpenSSL_rand + --build-options ${build_options} + --test-command ${CMAKE_CTEST_COMMAND} -V + ) diff --git a/Tests/FindOpenSSL/rand/CMakeLists.txt b/Tests/FindOpenSSL/rand/CMakeLists.txt new file mode 100644 index 000000000..520d5d203 --- /dev/null +++ b/Tests/FindOpenSSL/rand/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.0) +project(FindOpenSSL_rand CXX) +include(CTest) + +find_package(OpenSSL REQUIRED) + +add_executable(tstopensslrand_tgt main.cc) +target_link_libraries(tstopensslrand_tgt OpenSSL::SSL) +add_test(NAME tstopensslrand_tgt COMMAND tstopensslrand_tgt) + +add_executable(tstopensslrand_var main.cc) +target_link_libraries(tstopensslrand_var ${OPENSSL_LIBRARIES}) +target_include_directories(tstopensslrand_var PRIVATE ${OPENSSL_INCLUDE_DIR}) +add_test(NAME tstopensslrand_var COMMAND tstopensslrand_var) diff --git a/Tests/FindOpenSSL/rand/main.cc b/Tests/FindOpenSSL/rand/main.cc new file mode 100644 index 000000000..a5d1ac097 --- /dev/null +++ b/Tests/FindOpenSSL/rand/main.cc @@ -0,0 +1,22 @@ +#include + +int main() +{ + // return value + int retval = 1; + + // bytes buffer + unsigned char buf[1024]; + + // random bytes + int rezval = RAND_bytes(buf, sizeof(buf)); /* 1 succes, 0 otherwise */ + + // check result + if(rezval == 1) + { + retval = 0; + } + + // return code + return retval; +}