find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(libsodium libsodium) endif() if(NOT libsodium_FOUND) find_library(libsodium_LIBRARIES NAMES sodium) find_path(libsodium_INCLUDE_DIRS NAMES sodium.h sodium/version.h PATH_SUFFIXES include) if(libsodium_INCLUDE_DIRS) set(libsodium_VERSION ${libsodium_INCLUDE_DIRS}/sodium/version.h) if(NOT EXISTS ${libsodium_VERSION}) message(FATAL_ERROR "Missing file: ${libsodium_VERSION}") endif() endif() file(STRINGS ${libsodium_VERSION} libsodium_VERSION_LINE REGEX "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"[0-9\.]+\"$") set(libsodium_expr "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"([0-9]+)\.([0-9]+)\.([0-9]+)\"$") string(REGEX REPLACE ${libsodium_expr} "\\1" libsodium_VERSION_MAJOR "${libsodium_VERSION_LINE}") string(REGEX REPLACE ${libsodium_expr} "\\2" libsodium_VERSION_MINOR "${libsodium_VERSION_LINE}") string(REGEX REPLACE ${libsodium_expr} "\\3" libsodium_VERSION_PATCH "${libsodium_VERSION_LINE}") set(libsodium_VERSION_STRING ${libsodium_VERSION_MAJOR}.${libsodium_VERSION_MINOR}.${libsodium_VERSION_PATCH}) unset(libsodium_VERSION_MAJOR_LINE) unset(libsodium_VERSION_MINOR_LINE) unset(libsodium_VERSION_PATCH_LINE) unset(libsodium_VERSION_MAJOR) unset(libsodium_VERSION_MINOR) unset(libsodium_VERSION_PATCH) unset(libsodium_expr) if (libsodium_LIBRARIES STREQUAL "libsodium_LIBRARIES-NOTFOUND") message(FATAL_ERROR "libsodium not found") elseif (libsodium_INCLUDE_DIRS STREQUAL "libsodium_INCLUDE_DIRS-NOTFOUND") message(FATAL_ERROR "libsodium headers not found") endif() set(libsodium_LINK_LIBRARIES ${libsodium_LIBRARIES}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(libsodium REQUIRED_VARS libsodium_LINK_LIBRARIES libsodium_INCLUDE_DIRS VERSION_VAR libsodium_VERSION_STRING ) if(NOT TARGET libsodium) add_library(libsodium INTERFACE IMPORTED) set_target_properties(libsodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${libsodium_INCLUDE_DIRS} INTERFACE_LINK_LIBRARIES ${libsodium_LINK_LIBRARIES}) endif()