Improve FindNettle.cmake and move it to cmake/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 759fce4..6b6931f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.0.2)
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
project(libzip
VERSION 1.7.1.1
@@ -35,7 +35,7 @@
set(COMMONCRYPTO_FOUND FALSE)
endif()
if(ENABLE_GNUTLS)
- include(FindNettle)
+ include(FindNettle 3.0)
include(FindGnuTLS)
else()
set(GNUTLS_FOUND FALSE)
diff --git a/FindNettle.cmake b/FindNettle.cmake
deleted file mode 100644
index 1f66610..0000000
--- a/FindNettle.cmake
+++ /dev/null
@@ -1,23 +0,0 @@
-# - Find Nettle
-# Find the Nettle include directory and library
-#
-# NETTLE_INCLUDE_DIR - where to find <nettle/sha.h>, etc.
-# NETTLE_LIBRARIES - List of libraries when using libnettle.
-# NETTLE_FOUND - True if libnettle found.
-
-IF (NETTLE_INCLUDE_DIR)
- # Already in cache, be silent
- SET(NETTLE_FIND_QUIETLY TRUE)
-ENDIF (NETTLE_INCLUDE_DIR)
-
-FIND_PATH(NETTLE_INCLUDE_DIR nettle/md5.h nettle/ripemd160.h nettle/sha.h)
-FIND_LIBRARY(NETTLE_LIBRARY NAMES nettle libnettle)
-
-# handle the QUIETLY and REQUIRED arguments and set NETTLE_FOUND to TRUE if
-# all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETTLE DEFAULT_MSG NETTLE_LIBRARY NETTLE_INCLUDE_DIR)
-
-IF(NETTLE_FOUND)
- SET(NETTLE_LIBRARIES ${NETTLE_LIBRARY})
-ENDIF(NETTLE_FOUND)
diff --git a/cmake/FindNettle.cmake b/cmake/FindNettle.cmake
new file mode 100644
index 0000000..00a3654
--- /dev/null
+++ b/cmake/FindNettle.cmake
@@ -0,0 +1,92 @@
+# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+# file LICENSE.
+
+#[=======================================================================[.rst:
+FindNettle
+-------
+
+Finds the Nettle library.
+
+Imported Targets
+^^^^^^^^^^^^^^^^
+
+This module provides the following imported targets, if found:
+
+``Nettle::Nettle``
+ The Nettle library
+
+Result Variables
+^^^^^^^^^^^^^^^^
+
+This will define the following variables:
+
+``Nettle_FOUND``
+ True if the system has the Nettle library.
+``Nettle_VERSION``
+ The version of the Nettle library which was found.
+``Nettle_INCLUDE_DIRS``
+ Include directories needed to use Nettle.
+``Nettle_LIBRARIES``
+ Libraries needed to link to Nettle.
+
+Cache Variables
+^^^^^^^^^^^^^^^
+
+The following cache variables may also be set:
+
+``Nettle_INCLUDE_DIR``
+ The directory containing ``foo.h``.
+``Nettle_LIBRARY``
+ The path to the Nettle library.
+
+#]=======================================================================]
+
+find_package(PkgConfig)
+pkg_check_modules(PC_Nettle QUIET nettle)
+
+find_path(Nettle_INCLUDE_DIR
+ NAMES nettle/aes.h nettle/md5.h nettle/pbkdf2.h nettle/ripemd160.h nettle/sha.h
+ PATHS ${PC_Nettle_INCLUDE_DIRS}
+ PATH_SUFFIXES Nettle
+)
+find_library(Nettle_LIBRARY
+ NAMES nettle
+ PATHS ${PC_Nettle_LIBRARY_DIRS}
+)
+
+#TODO
+#If you have a good way of getting the version (from a header file, for example), you can use that information to set Nettle_VERSION (although note that find modules have traditionally used Nettle_VERSION_STRING, so you may want to set both). Otherwise, attempt to use the information from pkg-config
+# nettle/version.h defines NETTLE_VERSION_MAJOR and NETTLE_VERSION_MINOR
+set(Nettle_VERSION ${PC_Nettle_VERSION})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Nettle
+ FOUND_VAR Nettle_FOUND
+ REQUIRED_VARS
+ Nettle_LIBRARY
+ Nettle_INCLUDE_DIR
+ VERSION_VAR Nettle_VERSION
+)
+
+if(Nettle_FOUND)
+ set(Nettle_LIBRARIES ${Nettle_LIBRARY})
+ set(Nettle_INCLUDE_DIRS ${Nettle_INCLUDE_DIR})
+ set(Nettle_DEFINITIONS ${PC_Nettle_CFLAGS_OTHER})
+endif()
+
+if(Nettle_FOUND AND NOT TARGET Nettle::Nettle)
+ add_library(Nettle::Nettle UNKNOWN IMPORTED)
+ set_target_properties(Nettle::Nettle PROPERTIES
+ IMPORTED_LOCATION "${Nettle_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${PC_Nettle_CFLAGS_OTHER}"
+ INTERFACE_INCLUDE_DIRECTORIES "${Nettle_INCLUDE_DIR}"
+ )
+endif()
+
+mark_as_advanced(
+ Nettle_INCLUDE_DIR
+ Nettle_LIBRARY
+)
+
+# compatibility variables
+set(Nettle_VERSION_STRING ${Nettle_VERSION})
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 0f0f077..41d4e97 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -153,8 +153,7 @@
target_link_libraries(zip PRIVATE bcrypt)
elseif(HAVE_GNUTLS)
target_sources(zip PRIVATE zip_crypto_gnutls.c)
- target_include_directories(zip PRIVATE ${NETTLE_INCLUDE_DIR})
- target_link_libraries(zip PRIVATE GnuTLS::GnuTLS ${NETTLE_LIBRARY})
+ target_link_libraries(zip PRIVATE GnuTLS::GnuTLS Nettle::Nettle)
elseif(HAVE_OPENSSL)
target_sources(zip PRIVATE zip_crypto_openssl.c)
target_link_libraries(zip PRIVATE OpenSSL::Crypto)