114 lines
3.8 KiB
CMake
114 lines
3.8 KiB
CMake
# - Try to find LibCrypto include dirs and libraries
|
|
#
|
|
# Usage of this module as follows:
|
|
#
|
|
# find_package(crypto)
|
|
#
|
|
# Variables used by this module, they can change the default behaviour and need
|
|
# to be set before calling find_package:
|
|
#
|
|
# Variables defined by this module:
|
|
#
|
|
# crypto_FOUND System has libcrypto, include and library dirs found
|
|
# crypto_INCLUDE_DIR The crypto include directories.
|
|
# crypto_LIBRARY The crypto library, depending on the value of BUILD_SHARED_LIBS.
|
|
# crypto_SHARED_LIBRARY The path to libcrypto.so
|
|
# crypto_STATIC_LIBRARY The path to libcrypto.a
|
|
|
|
# the next branch exists purely for cmake compatibility with versions older than 3.15. Please do not remove it before
|
|
# we baseline on a newer version. It does not like duplicate target declarations. Work around that by checking it isn't
|
|
# defined first.
|
|
if (TARGET crypto OR TARGET AWS::crypto)
|
|
if (TARGET crypto)
|
|
set(TARGET_NAME "crypto")
|
|
else()
|
|
set(TARGET_NAME "AWS::crypto")
|
|
endif()
|
|
|
|
get_target_property(crypto_INCLUDE_DIR ${TARGET_NAME} INTERFACE_INCLUDE_DIRECTORIES)
|
|
message(STATUS "S2N found target: ${TARGET_NAME}")
|
|
message(STATUS "crypto Include Dir: ${crypto_INCLUDE_DIR}")
|
|
set(CRYPTO_FOUND true)
|
|
set(crypto_FOUND true)
|
|
else()
|
|
find_path(crypto_INCLUDE_DIR
|
|
NAMES openssl/crypto.h
|
|
HINTS
|
|
"${CMAKE_PREFIX_PATH}"
|
|
"${CMAKE_INSTALL_PREFIX}"
|
|
PATH_SUFFIXES include
|
|
)
|
|
|
|
find_library(crypto_SHARED_LIBRARY
|
|
NAMES libcrypto.so libcrypto.dylib
|
|
HINTS
|
|
"${CMAKE_PREFIX_PATH}"
|
|
"${CMAKE_INSTALL_PREFIX}"
|
|
PATH_SUFFIXES build/crypto build lib64 lib
|
|
)
|
|
|
|
find_library(crypto_STATIC_LIBRARY
|
|
NAMES libcrypto.a
|
|
HINTS
|
|
"${CMAKE_PREFIX_PATH}"
|
|
"${CMAKE_INSTALL_PREFIX}"
|
|
PATH_SUFFIXES build/crypto build lib64 lib
|
|
)
|
|
|
|
if (NOT crypto_LIBRARY)
|
|
if (BUILD_SHARED_LIBS OR S2N_USE_CRYPTO_SHARED_LIBS)
|
|
if (crypto_SHARED_LIBRARY)
|
|
set(crypto_LIBRARY ${crypto_SHARED_LIBRARY})
|
|
else()
|
|
set(crypto_LIBRARY ${crypto_STATIC_LIBRARY})
|
|
endif()
|
|
else()
|
|
if (crypto_STATIC_LIBRARY)
|
|
set(crypto_LIBRARY ${crypto_STATIC_LIBRARY})
|
|
else()
|
|
set(crypto_LIBRARY ${crypto_SHARED_LIBRARY})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(crypto DEFAULT_MSG
|
|
crypto_LIBRARY
|
|
crypto_INCLUDE_DIR
|
|
)
|
|
|
|
mark_as_advanced(
|
|
crypto_ROOT_DIR
|
|
crypto_INCLUDE_DIR
|
|
crypto_LIBRARY
|
|
crypto_SHARED_LIBRARY
|
|
crypto_STATIC_LIBRARY
|
|
)
|
|
|
|
# some versions of cmake have a super esoteric bug around capitalization differences between
|
|
# find dependency and find package, just avoid that here by checking and
|
|
# setting both.
|
|
if(CRYPTO_FOUND OR crypto_FOUND)
|
|
set(CRYPTO_FOUND true)
|
|
set(crypto_FOUND true)
|
|
|
|
message(STATUS "LibCrypto Include Dir: ${crypto_INCLUDE_DIR}")
|
|
message(STATUS "LibCrypto Shared Lib: ${crypto_SHARED_LIBRARY}")
|
|
message(STATUS "LibCrypto Static Lib: ${crypto_STATIC_LIBRARY}")
|
|
if (NOT TARGET crypto AND
|
|
(EXISTS "${crypto_LIBRARY}")
|
|
)
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
add_library(AWS::crypto UNKNOWN IMPORTED)
|
|
set_target_properties(AWS::crypto PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${crypto_INCLUDE_DIR}")
|
|
set_target_properties(AWS::crypto PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
IMPORTED_LOCATION "${crypto_LIBRARY}")
|
|
add_dependencies(AWS::crypto Threads::Threads)
|
|
endif()
|
|
endif()
|
|
|
|
endif()
|