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()