summaryrefslogtreecommitdiff
path: root/cmake/Modules/FindGcryptConfig.cmake
diff options
context:
space:
mode:
authorMark Purcell <msp@debian.org>2013-07-09 15:55:55 +0100
committerMark Purcell <msp@debian.org>2013-07-09 15:55:55 +0100
commit669109e369a1be69ff7c4108eb545eff4c5c26d9 (patch)
tree73c117a2e7dd22a7a6ee315101f6357ab43386ec /cmake/Modules/FindGcryptConfig.cmake
libzrtpcpp (2.3.4-1) unstable; urgency=medium
* New upstream release - Fixes "CVE-2013-2221 CVE-2013-2222 CVE-2013-2223" (Closes: #714650) # imported from the archive
Diffstat (limited to 'cmake/Modules/FindGcryptConfig.cmake')
-rwxr-xr-xcmake/Modules/FindGcryptConfig.cmake241
1 files changed, 241 insertions, 0 deletions
diff --git a/cmake/Modules/FindGcryptConfig.cmake b/cmake/Modules/FindGcryptConfig.cmake
new file mode 100755
index 0000000..1770241
--- /dev/null
+++ b/cmake/Modules/FindGcryptConfig.cmake
@@ -0,0 +1,241 @@
+# - a gcrypt-config module for CMake
+#
+# Usage:
+# gcrypt_check(<PREFIX> [REQUIRED] <MODULE>)
+# checks if gcrypt is avialable
+#
+# When the 'REQUIRED' argument was set, macros will fail with an error
+# when gcrypt could not be found.
+#
+# It sets the following variables:
+# GCRYPT_CONFIG_FOUND ... true if libgcrypt-config works on the system
+# GCRYPT_CONFIG_EXECUTABLE ... pathname of the libgcrypt-config program
+# <PREFIX>_FOUND ... set to 1 if libgcrypt exist
+# <PREFIX>_LIBRARIES ... the libraries
+# <PREFIX>_CFLAGS ... all required cflags
+# <PREFIX>_ALGORITHMS ... the algorithms that this libgcrypt supports
+# <PREFIX>_VERSION ... gcrypt's version
+#
+# Examples:
+# gcrypt_check (GCRYPT gcrypt)
+# Check if a version of gcrypt is available, issues a warning
+# if not.
+#
+# gcrypt_check (GCRYPT REQUIRED gcrypt)
+# Check if a version of gcrypt is available and fails
+# if not.
+#
+# gcrypt_check (GCRYPT gcrypt>=1.4)
+# requires at least version 1.4 of gcrypt and defines e.g.
+# GCRYPT_VERSION=1.4.4. Issues a warning if a lower version
+# is available only.
+#
+# gcrypt_check (GCRYPT REQUIRED gcrypt>=1.4.4)
+# requires at least version 1.4.4 of gcrypt and fails if
+# only gcrypt 1.4.3 or lower is available only.
+#
+
+# Copyright (C) 2010 Werner Dittmann <werner.dittmann@t-online.de>
+#
+# Redistribution and use, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# 1. Redistributions must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# 2. The name of the author may not be used to endorse or promote
+# products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+#
+# This is a much edited and simplified variant of the original UsePkgConfig.cmake
+# from Enrico Scholz
+# Copyright (C) 2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#
+
+### Common stuff ####
+set(GCR_CONFIG_VERSION 1)
+set(GCR_CONFIG_FOUND 0)
+
+find_program(GCR_CONFIG_EXECUTABLE NAMES libgcrypt-config --version DOC "libgcrypt-config executable")
+mark_as_advanced(GCR_CONFIG_EXECUTABLE)
+
+if(GCR_CONFIG_EXECUTABLE)
+ set(GCR_CONFIG_FOUND 1)
+endif(GCR_CONFIG_EXECUTABLE)
+
+
+# Unsets the given variables
+macro(_gcrconfig_unset var)
+ set(${var} "" CACHE INTERNAL "")
+endmacro(_gcrconfig_unset)
+
+macro(_gcrconfig_set var value)
+ set(${var} ${value} CACHE INTERNAL "")
+endmacro(_gcrconfig_set)
+
+# Invokes libgcrypt-config, cleans up the result and sets variables
+macro(_gcrconfig_invoke _gcrlist _prefix _varname _regexp)
+ set(_gcrconfig_invoke_result)
+
+ execute_process(
+ COMMAND ${GCR_CONFIG_EXECUTABLE} ${ARGN}
+ OUTPUT_VARIABLE _gcrconfig_invoke_result
+ RESULT_VARIABLE _gcrconfig_failed)
+
+ if (_gcrconfig_failed)
+ set(_gcrconfig_${_varname} "")
+ _gcrconfig_unset(${_prefix}_${_varname})
+ else(_gcrconfig_failed)
+ string(REGEX REPLACE "[\r\n]" " " _gcrconfig_invoke_result "${_gcrconfig_invoke_result}")
+ string(REGEX REPLACE " +$" "" _gcrconfig_invoke_result "${_gcrconfig_invoke_result}")
+
+ if (NOT ${_regexp} STREQUAL "")
+ string(REGEX REPLACE "${_regexp}" " " _gcrconfig_invoke_result "${_gcrconfig_invoke_result}")
+ endif(NOT ${_regexp} STREQUAL "")
+
+ separate_arguments(_gcrconfig_invoke_result)
+
+ #message(STATUS " ${_varname} ... ${_gcrconfig_invoke_result}")
+ set(_gcrconfig_${_varname} ${_gcrconfig_invoke_result})
+ _gcrconfig_set(${_prefix}_${_varname} "${_gcrconfig_invoke_result}")
+ endif(_gcrconfig_failed)
+endmacro(_gcrconfig_invoke)
+
+macro(_gcrconfig_invoke_dyn _gcrlist _prefix _varname cleanup_regexp)
+ _gcrconfig_invoke("${_gcrlist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN})
+endmacro(_gcrconfig_invoke_dyn)
+
+# Splits given arguments into options and a package list
+macro(_gcrconfig_parse_options _result _is_req)
+ set(${_is_req} 0)
+
+ foreach(_gcr ${ARGN})
+ if (_gcr STREQUAL "REQUIRED")
+ set(${_is_req} 1)
+ endif (_gcr STREQUAL "REQUIRED")
+ endforeach(_gcr ${ARGN})
+
+ set(${_result} ${ARGN})
+ list(REMOVE_ITEM ${_result} "REQUIRED")
+endmacro(_gcrconfig_parse_options)
+
+###
+macro(_gcr_check_modules_internal _is_required _is_silent _prefix)
+ _gcrconfig_unset(${_prefix}_FOUND)
+ _gcrconfig_unset(${_prefix}_VERSION)
+ _gcrconfig_unset(${_prefix}_PREFIX)
+ _gcrconfig_unset(${_prefix}_LIBDIR)
+ _gcrconfig_unset(${_prefix}_LIBRARIES)
+ _gcrconfig_unset(${_prefix}_CFLAGS)
+ _gcrconfig_unset(${_prefix}_ALGORITHMS)
+
+ # create a better addressable variable of the modules and calculate its size
+ set(_gcr_check_modules_list ${ARGN})
+ list(LENGTH _gcr_check_modules_list _gcr_check_modules_cnt)
+
+ if(GCR_CONFIG_EXECUTABLE)
+ # give out status message telling checked module
+ if (NOT ${_is_silent})
+ message(STATUS "checking for module '${_gcr_check_modules_list}'")
+ endif(NOT ${_is_silent})
+
+ # iterate through module list and check whether they exist and match the required version
+ foreach (_gcr_check_modules_gcr ${_gcr_check_modules_list})
+
+ # check whether version is given
+ if (_gcr_check_modules_gcr MATCHES ".*(>=|=|<=).*")
+ string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _gcr_check_modules_gcr_name "${_gcr_check_modules_gcr}")
+ string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _gcr_check_modules_gcr_op "${_gcr_check_modules_gcr}")
+ string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _gcr_check_modules_gcr_ver "${_gcr_check_modules_gcr}")
+ else(_gcr_check_modules_gcr MATCHES ".*(>=|=|<=).*")
+ set(_gcr_check_modules_gcr_name "${_gcr_check_modules_gcr}")
+ set(_gcr_check_modules_gcr_op)
+ set(_gcr_check_modules_gcr_ver)
+ endif(_gcr_check_modules_gcr MATCHES ".*(>=|=|<=).*")
+
+ set(_gcr_check_prefix "${_prefix}")
+
+ _gcrconfig_invoke(${_gcr_check_modules_gcr_name} "${_gcr_check_prefix}" VERSION "" --version )
+# _gcrconfig_invoke(${_gcr_check_modules_gcr_name} "${_gcr_check_prefix}" PREFIX "" --prefix )
+ _gcrconfig_invoke(${_gcr_check_modules_gcr_name} "${_gcr_check_prefix}" LIBRARIES "" --libs )
+ _gcrconfig_invoke(${_gcr_check_modules_gcr_name} "${_gcr_check_prefix}" CFLAGS "" --cflags )
+ _gcrconfig_invoke(${_gcr_check_modules_gcr_name} "${_gcr_check_prefix}" ALGORITHMS "" --algorithms )
+
+ message(STATUS " found ${_gcr_check_modules_gcr}, version ${_gcrconfig_VERSION}")
+ # handle the operands
+ set(_gcr_wrong_version 0)
+ if (_gcr_check_modules_gcr_op STREQUAL ">=")
+ if(_gcr_check_modules_gcr_ver VERSION_EQUAL _gcrconfig_VERSION)
+ message(STATUS " gcrypt wrong version: required: ${_gcr_check_modules_gcr_op}${_gcr_check_modules_gcr_ver}, found: ${_gcrconfig_VERSION}")
+ set(_gcr_wrong_version 1)
+ endif()
+
+ if(_gcrconfig_VERSION VERSION_LESS _gcr_check_modules_gcr_ver )
+ message(STATUS " gcrypt wrong version: required: ${_gcr_check_modules_gcr_op}${_gcr_check_modules_gcr_ver}, found: ${_gcrconfig_VERSION}")
+ set(_gcr_wrong_version 1)
+ endif()
+ endif(_gcr_check_modules_gcr_op STREQUAL ">=")
+
+ if (_gcr_check_modules_gcr_op STREQUAL "=")
+ if(_gcr_check_modules_gcr_ver VERSION_EQUAL _gcrconfig_VERSION)
+ message(STATUS " gcrypt wrong version: required: ${_gcr_check_modules_gcr_op}${_gcr_check_modules_gcr_ver}, found: ${_gcrconfig_VERSION}")
+ set(_gcr_wrong_version 1)
+ endif()
+ endif(_gcr_check_modules_gcr_op STREQUAL "=")
+
+ if (_gcr_check_modules_gcr_op STREQUAL "<=")
+ if(_gcr_check_modules_gcr_ver VERSION_EQUAL _gcrconfig_VERSION)
+ message(STATUS " gcrypt wrong version: required: ${_gcr_check_modules_gcr_op}${_gcr_check_modules_gcr_ver}, found: ${_gcrconfig_VERSION}")
+ set(_gcr_wrong_version 1)
+ endif()
+
+ if(_gcrconfig_VERSION VERSION_GREATER _gcr_check_modules_gcr_ver)
+ message(STATUS " gcrypt wrong version: required: ${_gcr_check_modules_gcr_op}${_gcr_check_modules_gcr_ver}, found: ${_gcrconfig_VERSION}")
+ set(_gcr_wrong_version 1)
+ endif()
+ endif(_gcr_check_modules_gcr_op STREQUAL "<=")
+ if (${_is_required} AND _gcr_wrong_version)
+ message(FATAL_ERROR "")
+ endif()
+
+ endforeach(_gcr_check_modules_gcr)
+ _gcrconfig_set(${_prefix}_FOUND 1)
+
+ else(GCR_CONFIG_EXECUTABLE)
+ if (${_is_required})
+ message(FATAL_ERROR "libgcrypt-config tool not found")
+ endif (${_is_required})
+ endif(GCR_CONFIG_EXECUTABLE)
+endmacro(_gcr_check_modules_internal)
+
+###
+### User visible macro starts here
+###
+
+###
+macro(gcr_check _prefix _module0)
+ # check cached value
+ if (NOT DEFINED __gcr_config_checked_${_prefix} OR __gcr_config_checked_${_prefix} LESS ${GCR_CONFIG_VERSION} OR NOT ${_prefix}_FOUND)
+ _gcrconfig_parse_options (_gcr_modules _gcr_is_required "${_module0}" ${ARGN})
+ _gcr_check_modules_internal("${_gcr_is_required}" 0 "${_prefix}" ${_gcr_modules})
+
+ _gcrconfig_set(__gcr_config_checked_${_prefix} ${GCR_CONFIG_VERSION})
+ endif(NOT DEFINED __gcr_config_checked_${_prefix} OR __gcr_config_checked_${_prefix} LESS ${GCR_CONFIG_VERSION} OR NOT ${_prefix}_FOUND)
+endmacro(gcr_check)
+
+###
+
+### Local Variables:
+### mode: cmake
+### End: