#[=======================================================================[.rst:
FindNettle
----------

Find the Nettle library.

Imported targets
^^^^^^^^^^^^^^^^

This module defines the following :prop_tgt:`IMPORTED` targets:

``Nettle::Nettle``
  The Nettle library, if found.
``Nettle::Hogweed``
  The Hogweed library, if found.

Result variables
^^^^^^^^^^^^^^^^

This module will set the following variables in your project:

``Nettle_FOUND``
  If false, do not try to use Nettle.
``NETTLE_INCLUDE_DIR``
  where to find Nettle headers.
``NETTLE_LIBRARIES``
  the libraries needed to use Nettle.
``NETTLE_VERSION``
  the version of the Nettle library found

#]=======================================================================]

find_path(NETTLE_INCLUDE_DIR nettle/version.h
  HINTS
  "${NETTLE_DIR}"
  "${NETTLE_DIR}/include"
)

find_library(NETTLE_LIBRARY NAMES nettle libnettle
  HINTS
  "${NETTLE_DIR}"
  "${NETTLE_DIR}/lib"
)

find_library(HOGWEED_LIBRARY NAMES hogweed libhogweed
  HINTS
  "${NETTLE_DIR}"
  "${NETTLE_DIR}/lib"
)

set(NETTLE_LIBRARIES "")

# May need gmp library on Unix.
if (UNIX)
  find_library(NETTLE_GMP_LIBRARY gmp)

  if (NETTLE_GMP_LIBRARY)
    list(APPEND NETTLE_LIBRARIES "${NETTLE_GMP_LIBRARY}")
  endif ()
endif ()

if (NETTLE_INCLUDE_DIR AND NETTLE_LIBRARY AND HOGWEED_LIBRARY)
  if (NOT TARGET Nettle::Nettle)
    add_library(Nettle::Nettle UNKNOWN IMPORTED)
    set_target_properties(Nettle::Nettle PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${NETTLE_INCLUDE_DIR}"
      INTERFACE_LINK_LIBRARIES "${NETTLE_LIBRARIES}"
      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
      IMPORTED_LOCATION "${NETTLE_LIBRARY}"
      )
  endif ()
  if (NOT TARGET Nettle::Hogweed)
    add_library(Nettle::Hogweed UNKNOWN IMPORTED)
    set_target_properties(Nettle::Hogweed PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${NETTLE_INCLUDE_DIR}"
      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
      IMPORTED_LOCATION "${HOGWEED_LIBRARY}"
      )
  endif ()

  if (NOT NETTLE_VERSION AND NETTLE_INCLUDE_DIR)
    file(STRINGS "${NETTLE_INCLUDE_DIR}/nettle/version.h" NETTLE_VER_H REGEX "^#define NETTLE_VERSION_(MAJOR|MINOR) ")
    string(REGEX REPLACE "^.*_MAJOR ([0-9]+).*_MINOR ([0-9]+).*$" "\\1.\\2" NETTLE_VERSION "${NETTLE_VER_H}")
  endif ()
endif()

list(APPEND NETTLE_LIBRARIES "${NETTLE_LIBRARY}" "${HOGWEED_LIBRARY}")

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Nettle
  REQUIRED_VARS NETTLE_LIBRARIES NETTLE_INCLUDE_DIR
  VERSION_VAR NETTLE_VERSION
  )

mark_as_advanced(NETTLE_INCLUDE_DIR NETTLE_LIBRARIES NETTLE_LIBRARY HOGWEED_LIBRARY)