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)