summaryrefslogtreecommitdiffstats
path: root/cmake/Modules/FindBotan2.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/Modules/FindBotan2.cmake')
-rw-r--r--cmake/Modules/FindBotan2.cmake131
1 files changed, 131 insertions, 0 deletions
diff --git a/cmake/Modules/FindBotan2.cmake b/cmake/Modules/FindBotan2.cmake
new file mode 100644
index 0000000..2708491
--- /dev/null
+++ b/cmake/Modules/FindBotan2.cmake
@@ -0,0 +1,131 @@
+# Copyright (c) 2018-2020 Ribose Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+#.rst:
+# FindBotan2
+# -----------
+#
+# Find the botan-2 library.
+#
+# IMPORTED Targets
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines :prop_tgt:`IMPORTED` targets:
+#
+# ``Botan2::Botan2``
+# The botan-2 library, if found.
+#
+# Result variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines the following variables:
+#
+# ::
+#
+# BOTAN2_FOUND - true if the headers and library were found
+# BOTAN2_INCLUDE_DIRS - where to find headers
+# BOTAN2_LIBRARIES - list of libraries to link
+# BOTAN2_VERSION - library version that was found, if any
+
+# use pkg-config to get the directories and then use these values
+# in the find_path() and find_library() calls
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_BOTAN2 QUIET botan-2)
+
+# find the headers
+find_path(BOTAN2_INCLUDE_DIR
+ NAMES botan/version.h
+ HINTS
+ ${PC_BOTAN2_INCLUDEDIR}
+ ${PC_BOTAN2_INCLUDE_DIRS}
+ PATH_SUFFIXES botan-2
+)
+
+# find the library
+if(MSVC)
+ find_library(BOTAN2_LIBRARY
+ NAMES botan
+ HINTS
+ ${PC_BOTAN2_LIBDIR}
+ ${PC_BOTAN2_LIBRARY_DIRS}
+ )
+else()
+ find_library(BOTAN2_LIBRARY
+ NAMES botan-2 libbotan-2
+ HINTS
+ ${PC_BOTAN2_LIBDIR}
+ ${PC_BOTAN2_LIBRARY_DIRS}
+ )
+endif()
+
+# determine the version
+if(PC_BOTAN2_VERSION)
+ set(BOTAN2_VERSION ${PC_BOTAN2_VERSION})
+elseif(BOTAN2_INCLUDE_DIR AND EXISTS "${BOTAN2_INCLUDE_DIR}/botan/build.h")
+ file(STRINGS "${BOTAN2_INCLUDE_DIR}/botan/build.h" botan2_version_str
+ REGEX "^#define[\t ]+(BOTAN_VERSION_[A-Z]+)[\t ]+[0-9]+")
+
+ string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MAJOR[\t ]+([0-9]+).*"
+ "\\1" _botan2_version_major "${botan2_version_str}")
+ string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MINOR[\t ]+([0-9]+).*"
+ "\\1" _botan2_version_minor "${botan2_version_str}")
+ string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_PATCH[\t ]+([0-9]+).*"
+ "\\1" _botan2_version_patch "${botan2_version_str}")
+ set(BOTAN2_VERSION "${_botan2_version_major}.${_botan2_version_minor}.${_botan2_version_patch}"
+ CACHE INTERNAL "The version of Botan which was detected")
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Botan2
+ REQUIRED_VARS BOTAN2_LIBRARY BOTAN2_INCLUDE_DIR
+ VERSION_VAR BOTAN2_VERSION
+)
+
+if (BOTAN2_FOUND)
+ set(BOTAN2_INCLUDE_DIRS ${BOTAN2_INCLUDE_DIR} ${PC_BOTAN2_INCLUDE_DIRS})
+ set(BOTAN2_LIBRARIES ${BOTAN2_LIBRARY})
+endif()
+
+if (BOTAN2_FOUND AND NOT TARGET Botan2::Botan2)
+ # create the new library target
+ add_library(Botan2::Botan2 UNKNOWN IMPORTED)
+ # set the required include dirs for the target
+ if (BOTAN2_INCLUDE_DIRS)
+ set_target_properties(Botan2::Botan2
+ PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${BOTAN2_INCLUDE_DIRS}"
+ )
+ endif()
+ # set the required libraries for the target
+ if (EXISTS "${BOTAN2_LIBRARY}")
+ set_target_properties(Botan2::Botan2
+ PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "${BOTAN2_LIBRARY}"
+ )
+ endif()
+endif()
+
+mark_as_advanced(BOTAN2_INCLUDE_DIR BOTAN2_LIBRARY)
+