Warning, /utilities/keysmith/cmake/Findsodium.cmake is written in an unsupported language. File is not indexed.
0001 # 0002 # Below follows a near-verbatim copy of: 0003 # https://raw.githubusercontent.com/jedisct1/libsodium/449981cb98b4825be0cc9d41b948e97ac4e1c1d6/contrib/Findsodium.cmake 0004 # Retrieved on 2020-01-21 from: 0005 # https://raw.githubusercontent.com/jedisct1/libsodium/master/contrib/Findsodium.cmake 0006 # The original license header was replaced with SPDX licensing tag to facilitate 0007 # automated REUSE checking of Keysmith. 0008 # 0009 ################################################################################ 0010 # 0011 # SPDX-License-Identifier: CC0-1.0 0012 # SPDX-FileCopyrightText: 2016 Henrik Steffen Gaßmann <henrik@gassmann.onl> 0013 # 0014 # ############################################################################## 0015 # Tries to find the local libsodium installation. 0016 # 0017 # On Windows the sodium_DIR environment variable is used as a default hint which 0018 # can be overridden by setting the corresponding cmake variable. 0019 # 0020 # Once done the following variables will be defined: 0021 # 0022 # sodium_FOUND sodium_INCLUDE_DIR sodium_LIBRARY_DEBUG sodium_LIBRARY_RELEASE 0023 # sodium_VERSION_STRING 0024 # 0025 # Furthermore an imported "sodium" target is created. 0026 # 0027 0028 if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") 0029 set(_GCC_COMPATIBLE 1) 0030 endif() 0031 0032 # static library option 0033 if(NOT DEFINED sodium_USE_STATIC_LIBS) 0034 option(sodium_USE_STATIC_LIBS "enable to statically link against sodium" OFF) 0035 endif() 0036 if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) 0037 unset(sodium_LIBRARY CACHE) 0038 unset(sodium_LIBRARY_DEBUG CACHE) 0039 unset(sodium_LIBRARY_RELEASE CACHE) 0040 unset(sodium_DLL_DEBUG CACHE) 0041 unset(sodium_DLL_RELEASE CACHE) 0042 set(sodium_USE_STATIC_LIBS_LAST 0043 ${sodium_USE_STATIC_LIBS} 0044 CACHE INTERNAL "internal change tracking variable") 0045 endif() 0046 0047 # ############################################################################## 0048 # UNIX 0049 if(UNIX OR CMAKE_SYSTEM_NAME STREQUAL "Generic") 0050 # import pkg-config 0051 find_package(PkgConfig QUIET) 0052 if(PKG_CONFIG_FOUND) 0053 pkg_check_modules(sodium_PKG QUIET libsodium) 0054 endif() 0055 0056 if(sodium_USE_STATIC_LIBS) 0057 if(sodium_PKG_STATIC_LIBRARIES) 0058 foreach(_libname ${sodium_PKG_STATIC_LIBRARIES}) 0059 if(NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending 0060 # with .a 0061 list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a") 0062 endif() 0063 endforeach() 0064 list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES) 0065 else() 0066 # if pkgconfig for libsodium doesn't provide static lib info, then 0067 # override PKG_STATIC here.. 0068 set(sodium_PKG_STATIC_LIBRARIES libsodium.a) 0069 endif() 0070 0071 set(XPREFIX sodium_PKG_STATIC) 0072 else() 0073 if(sodium_PKG_LIBRARIES STREQUAL "") 0074 set(sodium_PKG_LIBRARIES sodium) 0075 endif() 0076 0077 set(XPREFIX sodium_PKG) 0078 endif() 0079 0080 find_path(sodium_INCLUDE_DIR sodium.h HINTS ${${XPREFIX}_INCLUDE_DIRS}) 0081 find_library(sodium_LIBRARY_DEBUG 0082 NAMES ${${XPREFIX}_LIBRARIES} 0083 HINTS ${${XPREFIX}_LIBRARY_DIRS}) 0084 find_library(sodium_LIBRARY_RELEASE 0085 NAMES ${${XPREFIX}_LIBRARIES} 0086 HINTS ${${XPREFIX}_LIBRARY_DIRS}) 0087 0088 # ############################################################################ 0089 # Windows 0090 elseif(WIN32) 0091 set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory") 0092 mark_as_advanced(sodium_DIR) 0093 0094 find_path(sodium_INCLUDE_DIR sodium.h 0095 HINTS ${sodium_DIR} 0096 PATH_SUFFIXES include) 0097 0098 if(MSVC) 0099 # detect target architecture 0100 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" [=[ 0101 #if defined _M_IX86 0102 #error ARCH_VALUE x86_32 0103 #elif defined _M_X64 0104 #error ARCH_VALUE x86_64 0105 #endif 0106 #error ARCH_VALUE unknown 0107 ]=]) 0108 try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" 0109 "${CMAKE_CURRENT_BINARY_DIR}/arch.c" 0110 OUTPUT_VARIABLE _COMPILATION_LOG) 0111 string(REGEX 0112 REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" 0113 "\\1" 0114 _TARGET_ARCH 0115 "${_COMPILATION_LOG}") 0116 0117 # construct library path 0118 if(_TARGET_ARCH STREQUAL "x86_32") 0119 string(APPEND _PLATFORM_PATH "Win32") 0120 elseif(_TARGET_ARCH STREQUAL "x86_64") 0121 string(APPEND _PLATFORM_PATH "x64") 0122 else() 0123 message( 0124 FATAL_ERROR 0125 "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake." 0126 ) 0127 endif() 0128 string(APPEND _PLATFORM_PATH "/$$CONFIG$$") 0129 0130 if(MSVC_VERSION LESS 1900) 0131 math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") 0132 else() 0133 math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") 0134 endif() 0135 string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") 0136 0137 if(sodium_USE_STATIC_LIBS) 0138 string(APPEND _PLATFORM_PATH "/static") 0139 else() 0140 string(APPEND _PLATFORM_PATH "/dynamic") 0141 endif() 0142 0143 string(REPLACE "$$CONFIG$$" 0144 "Debug" 0145 _DEBUG_PATH_SUFFIX 0146 "${_PLATFORM_PATH}") 0147 string(REPLACE "$$CONFIG$$" 0148 "Release" 0149 _RELEASE_PATH_SUFFIX 0150 "${_PLATFORM_PATH}") 0151 0152 find_library(sodium_LIBRARY_DEBUG libsodium.lib 0153 HINTS ${sodium_DIR} 0154 PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}) 0155 find_library(sodium_LIBRARY_RELEASE libsodium.lib 0156 HINTS ${sodium_DIR} 0157 PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}) 0158 if(NOT sodium_USE_STATIC_LIBS) 0159 set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES}) 0160 set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") 0161 find_library(sodium_DLL_DEBUG libsodium 0162 HINTS ${sodium_DIR} 0163 PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}) 0164 find_library(sodium_DLL_RELEASE libsodium 0165 HINTS ${sodium_DIR} 0166 PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}) 0167 set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK}) 0168 endif() 0169 0170 elseif(_GCC_COMPATIBLE) 0171 if(sodium_USE_STATIC_LIBS) 0172 find_library(sodium_LIBRARY_DEBUG libsodium.a 0173 HINTS ${sodium_DIR} 0174 PATH_SUFFIXES lib) 0175 find_library(sodium_LIBRARY_RELEASE libsodium.a 0176 HINTS ${sodium_DIR} 0177 PATH_SUFFIXES lib) 0178 else() 0179 find_library(sodium_LIBRARY_DEBUG libsodium.dll.a 0180 HINTS ${sodium_DIR} 0181 PATH_SUFFIXES lib) 0182 find_library(sodium_LIBRARY_RELEASE libsodium.dll.a 0183 HINTS ${sodium_DIR} 0184 PATH_SUFFIXES lib) 0185 0186 file(GLOB _DLL 0187 LIST_DIRECTORIES false 0188 RELATIVE "${sodium_DIR}/bin" 0189 "${sodium_DIR}/bin/libsodium*.dll") 0190 find_library(sodium_DLL_DEBUG ${_DLL} libsodium 0191 HINTS ${sodium_DIR} 0192 PATH_SUFFIXES bin) 0193 find_library(sodium_DLL_RELEASE ${_DLL} libsodium 0194 HINTS ${sodium_DIR} 0195 PATH_SUFFIXES bin) 0196 endif() 0197 else() 0198 message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") 0199 endif() 0200 0201 # ############################################################################ 0202 # unsupported 0203 else() 0204 message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") 0205 endif() 0206 0207 # ############################################################################## 0208 # common stuff 0209 0210 # extract sodium version 0211 if(sodium_INCLUDE_DIR) 0212 set(_VERSION_HEADER "${sodium_INCLUDE_DIR}/sodium/version.h") 0213 if(EXISTS "${_VERSION_HEADER}") 0214 file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) 0215 string(REGEX 0216 REPLACE ".*define[ \t]+SODIUM_VERSION_STRING[^\"]+\"([^\"]+)\".*" 0217 "\\1" 0218 sodium_VERSION_STRING 0219 "${_VERSION_HEADER_CONTENT}") 0220 set(sodium_VERSION_STRING "${sodium_VERSION_STRING}") 0221 endif() 0222 endif() 0223 0224 # communicate results 0225 include(FindPackageHandleStandardArgs) 0226 find_package_handle_standard_args(sodium 0227 REQUIRED_VARS 0228 sodium_LIBRARY_RELEASE 0229 sodium_LIBRARY_DEBUG 0230 sodium_INCLUDE_DIR 0231 VERSION_VAR 0232 sodium_VERSION_STRING) 0233 0234 # mark file paths as advanced 0235 mark_as_advanced(sodium_INCLUDE_DIR) 0236 mark_as_advanced(sodium_LIBRARY_DEBUG) 0237 mark_as_advanced(sodium_LIBRARY_RELEASE) 0238 if(WIN32) 0239 mark_as_advanced(sodium_DLL_DEBUG) 0240 mark_as_advanced(sodium_DLL_RELEASE) 0241 endif() 0242 0243 # create imported target 0244 if(sodium_USE_STATIC_LIBS) 0245 set(_LIB_TYPE STATIC) 0246 else() 0247 set(_LIB_TYPE SHARED) 0248 endif() 0249 add_library(sodium ${_LIB_TYPE} IMPORTED) 0250 0251 set_target_properties(sodium 0252 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES 0253 "${sodium_INCLUDE_DIR}" 0254 IMPORTED_LINK_INTERFACE_LANGUAGES 0255 "C") 0256 0257 if(sodium_USE_STATIC_LIBS) 0258 set_target_properties(sodium 0259 PROPERTIES INTERFACE_COMPILE_DEFINITIONS 0260 "SODIUM_STATIC" 0261 IMPORTED_LOCATION 0262 "${sodium_LIBRARY_RELEASE}" 0263 IMPORTED_LOCATION_DEBUG 0264 "${sodium_LIBRARY_DEBUG}") 0265 else() 0266 if(UNIX) 0267 set_target_properties(sodium 0268 PROPERTIES IMPORTED_LOCATION 0269 "${sodium_LIBRARY_RELEASE}" 0270 IMPORTED_LOCATION_DEBUG 0271 "${sodium_LIBRARY_DEBUG}") 0272 elseif(WIN32) 0273 set_target_properties(sodium 0274 PROPERTIES IMPORTED_IMPLIB 0275 "${sodium_LIBRARY_RELEASE}" 0276 IMPORTED_IMPLIB_DEBUG 0277 "${sodium_LIBRARY_DEBUG}") 0278 if(NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) 0279 set_target_properties(sodium 0280 PROPERTIES IMPORTED_LOCATION_DEBUG 0281 "${sodium_DLL_DEBUG}") 0282 endif() 0283 if(NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) 0284 set_target_properties(sodium 0285 PROPERTIES IMPORTED_LOCATION_RELWITHDEBINFO 0286 "${sodium_DLL_RELEASE}" 0287 IMPORTED_LOCATION_MINSIZEREL 0288 "${sodium_DLL_RELEASE}" 0289 IMPORTED_LOCATION_RELEASE 0290 "${sodium_DLL_RELEASE}") 0291 endif() 0292 endif() 0293 endif()