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