1# original file from obs-studio: 2# https://github.com/obsproject/obs-studio 3# /cmake/Modules/FindMbedTLS.cmake 4# 5# Once done these will be defined: 6# 7# LIBMBEDTLS_FOUND 8# LIBMBEDTLS_INCLUDE_DIRS 9# LIBMBEDTLS_LIBRARIES 10# 11# For use in OBS: 12# 13# MBEDTLS_INCLUDE_DIR 14 15find_package(PkgConfig QUIET) 16if (PKG_CONFIG_FOUND) 17 pkg_check_modules(_MBEDTLS QUIET mbedtls) 18endif() 19 20if(CMAKE_SIZEOF_VOID_P EQUAL 8) 21 set(_lib_suffix 64) 22else() 23 set(_lib_suffix 32) 24endif() 25 26# If we're on MacOS or Linux, please try to statically-link mbedtls. 27if(STATIC_MBEDTLS AND (APPLE OR UNIX)) 28 set(_MBEDTLS_LIBRARIES libmbedtls.a) 29 set(_MBEDCRYPTO_LIBRARIES libmbedcrypto.a) 30 set(_MBEDX509_LIBRARIES libmbedx509.a) 31endif() 32 33find_path(MBEDTLS_INCLUDE_DIR 34 NAMES mbedtls/ssl.h 35 HINTS 36 ${MBEDTLS_PREFIX} 37 PATHS 38 /usr/include /usr/local/include /opt/local/include /sw/include 39 PATH_SUFFIXES 40 include) 41 42find_library(MBEDTLS_LIB 43 NAMES ${_MBEDTLS_LIBRARIES} mbedtls libmbedtls 44 HINTS 45 ${MBEDTLS_PREFIX} 46 PATHS 47 /usr/lib /usr/local/lib /opt/local/lib /sw/lib 48 PATH_SUFFIXES 49 lib${_lib_suffix} lib 50 libs${_lib_suffix} libs 51 bin${_lib_suffix} bin 52 ../lib${_lib_suffix} ../lib 53 ../libs${_lib_suffix} ../libs 54 ../bin${_lib_suffix} ../bin) 55 56find_library(MBEDCRYPTO_LIB 57 NAMES ${_MBEDCRYPTO_LIBRARIES} mbedcrypto libmbedcrypto 58 HINTS 59 ${MBEDTLS_PREFIX} 60 PATHS 61 /usr/lib /usr/local/lib /opt/local/lib /sw/lib 62 PATH_SUFFIXES 63 lib${_lib_suffix} lib 64 libs${_lib_suffix} libs 65 bin${_lib_suffix} bin 66 ../lib${_lib_suffix} ../lib 67 ../libs${_lib_suffix} ../libs 68 ../bin${_lib_suffix} ../bin) 69 70find_library(MBEDX509_LIB 71 NAMES ${_MBEDX509_LIBRARIES} mbedx509 libmbedx509 72 HINTS 73 ${MBEDTLS_PREFIX} 74 PATHS 75 /usr/lib /usr/local/lib /opt/local/lib /sw/lib 76 PATH_SUFFIXES 77 lib${_lib_suffix} lib 78 libs${_lib_suffix} libs 79 bin${_lib_suffix} bin 80 ../lib${_lib_suffix} ../lib 81 ../libs${_lib_suffix} ../libs 82 ../bin${_lib_suffix} ../bin) 83 84# Sometimes mbedtls is split between three libs, and sometimes it isn't. 85# If it isn't, let's check if the symbols we need are all in MBEDTLS_LIB. 86if(MBEDTLS_LIB AND NOT MBEDCRYPTO_LIB AND NOT MBEDX509_LIB) 87 set(CMAKE_REQUIRED_LIBRARIES ${MBEDTLS_LIB}) 88 set(CMAKE_REQUIRED_INCLUDES ${MBEDTLS_INCLUDE_DIR}) 89 check_symbol_exists(mbedtls_x509_crt_init "mbedtls/x509_crt.h" MBEDTLS_INCLUDES_X509) 90 check_symbol_exists(mbedtls_sha256_init "mbedtls/sha256.h" MBEDTLS_INCLUDES_CRYPTO) 91 unset(CMAKE_REQUIRED_INCLUDES) 92 unset(CMAKE_REQUIRED_LIBRARIES) 93endif() 94 95# If we find all three libraries, then go ahead. 96if(MBEDTLS_LIB AND MBEDCRYPTO_LIB AND MBEDX509_LIB) 97 set(LIBMBEDTLS_INCLUDE_DIRS ${MBEDTLS_INCLUDE_DIR}) 98 set(LIBMBEDTLS_LIBRARIES ${MBEDTLS_LIB} ${MBEDCRYPTO_LIB} ${MBEDX509_LIB}) 99 set(MBEDTLS_INCLUDE_DIRS ${LIBMBEDTLS_INCLUDE_DIRS}) 100 set(MBEDTLS_LIBRARIES ${LIBMBEDTLS_LIBRARIES}) 101 102# Otherwise, if we find MBEDTLS_LIB, and it has both CRYPTO and x509 103# within the single lib (i.e. a windows build environment), then also 104# feel free to go ahead. 105elseif(MBEDTLS_LIB AND MBEDTLS_INCLUDES_CRYPTO AND MBEDTLS_INCLUDES_X509) 106 set(LIBMBEDTLS_INCLUDE_DIRS ${MBEDTLS_INCLUDE_DIR}) 107 set(LIBMBEDTLS_LIBRARIES ${MBEDTLS_LIB}) 108 set(MBEDTLS_INCLUDE_DIRS ${LIBMBEDTLS_INCLUDE_DIRS}) 109 set(MBEDTLS_LIBRARIES ${LIBMBEDTLS_LIBRARIES}) 110endif() 111 112# Now we've accounted for the 3-vs-1 library case: 113include(FindPackageHandleStandardArgs) 114find_package_handle_standard_args(MbedTLS DEFAULT_MSG MBEDTLS_LIBRARIES MBEDTLS_INCLUDE_DIRS) 115mark_as_advanced(MBEDTLS_INCLUDE_DIR MBEDTLS_LIBRARIES MBEDTLS_INCLUDE_DIRS) 116