diff options
-rw-r--r-- | docs/find-module/FindSasl2.rst | 1 | ||||
-rw-r--r-- | find-modules/FindSasl2.cmake | 114 |
2 files changed, 115 insertions, 0 deletions
diff --git a/docs/find-module/FindSasl2.rst b/docs/find-module/FindSasl2.rst new file mode 100644 index 00000000..0c4f492b --- /dev/null +++ b/docs/find-module/FindSasl2.rst @@ -0,0 +1 @@ +.. ecm-module:: ../../find-modules/FindSasl2.cmake diff --git a/find-modules/FindSasl2.cmake b/find-modules/FindSasl2.cmake new file mode 100644 index 00000000..95dd8f60 --- /dev/null +++ b/find-modules/FindSasl2.cmake @@ -0,0 +1,114 @@ +#.rst: +# FindSasl2 +# --------- +# +# Try to find the SASL2 library. +# +# This will define the following variables: +# +# ``Sasl2_FOUND`` +# System has SASL2. +# +# ``Sasl2_VERSION`` +# The version of SASL2. +# +# ``Sasl2_INCLUDE_DIRS`` +# This should be passed to target_include_directories() if +# the target is not used for linking. +# +# ``Sasl2_LIBRARIES`` +# The SASL2 library. +# This can be passed to target_link_libraries() instead of +# the ``Sasl2::Sasl2`` target +# +# If ``Sasl2_FOUND`` is TRUE, the following imported target +# will be available: +# +# ``Sasl2::Sasl2`` +# The SASL2 library +# +# Since 5.41.0. +# +#============================================================================= +# Copyright 2006, 2007 Laurent Montel <montel@kde.org> +# +# +# 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 copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. 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. +#============================================================================= + +# NOTE: libsasl2.pc doesn't export the include dir. +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Sasl2 libsasl2) + +find_path(Sasl2_INCLUDE_DIRS NAMES sasl/sasl.h) + +# libsasl2 add for windows, because the windows package of cyrus-sasl2 +# contains a libsasl2 also for msvc which is not standard conform +find_library(Sasl2_LIBRARIES + NAMES sasl2 libsasl2 + HINTS ${PC_Sasl2_LIBRARY_DIRS} +) + +set(Sasl2_VERSION "${PC_Sasl2_VERSION}") + +if(NOT Sasl2_VERSION) + if(EXISTS "${Sasl2_INCLUDE_DIRS}/sasl/sasl.h") + file(READ "${Sasl2_INCLUDE_DIRS}/sasl/sasl.h" SASL2_H_CONTENT) + string(REGEX MATCH "#define SASL_VERSION_MAJOR[ ]+[0-9]+" SASL2_VERSION_MAJOR_MATCH ${SASL2_H_CONTENT}) + string(REGEX MATCH "#define SASL_VERSION_MINOR[ ]+[0-9]+" SASL2_VERSION_MINOR_MATCH ${SASL2_H_CONTENT}) + string(REGEX MATCH "#define SASL_VERSION_STEP[ ]+[0-9]+" SASL2_VERSION_STEP_MATCH ${SASL2_H_CONTENT}) + + string(REGEX REPLACE ".*_MAJOR[ ]+(.*)" "\\1" SASL2_VERSION_MAJOR ${SASL2_VERSION_MAJOR_MATCH}) + string(REGEX REPLACE ".*_MINOR[ ]+(.*)" "\\1" SASL2_VERSION_MINOR ${SASL2_VERSION_MINOR_MATCH}) + string(REGEX REPLACE ".*_STEP[ ]+(.*)" "\\1" SASL2_VERSION_STEP ${SASL2_VERSION_STEP_MATCH}) + + set(Sasl2_VERSION "${SASL2_VERSION_MAJOR}.${SASL2_VERSION_MINOR}.${SASL2_VERSION_STEP}") + else() + # Could not find the version + set(Sasl2_VERSION "0.0.0") + endif() +endif() + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(Sasl2 + FOUND_VAR Sasl2_FOUND + REQUIRED_VARS Sasl2_LIBRARIES Sasl2_INCLUDE_DIRS + VERSION_VAR Sasl2_VERSION +) +if(Sasl2_FOUND AND NOT TARGET Sasl2::Sasl2) + add_library(Sasl2::Sasl2 UNKNOWN IMPORTED) + set_target_properties(Sasl2::Sasl2 PROPERTIES + IMPORTED_LOCATION "${Sasl2_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${Sasl2_INCLUDE_DIRS}") +endif() + +mark_as_advanced(Sasl2_LIBRARIES Sasl2_INCLUDE_DIRS Sasl2_VERSION) + +include(FeatureSummary) +set_package_properties(Sasl2 PROPERTIES + URL "https://www.cyrusimap.org/sasl/" + DESCRIPTION "The Cyrus-sasl library." +) + |