Files
evolution/cmake/modules/FindLDAP.cmake

146 lines
5.5 KiB
CMake

# FindLDAP.cmake
#
# Searches for OpenLDAP/SunLDAP library
#
# Adds these options:
# -DWITH_OPENLDAP=ON/OFF/PATH - enable/disable OpenLDAP, eventually set prefix to find it
# -DWITH_SUNLDAP=OFF/ON/PATH - enable/disable SunLDAP, eventually set prefix to find it
# -DWITH_STATIC_LDAP=OFF/ON - enable/disable static LDAP linking
#
# The OpenLDAP has precedence over SunLDAP, if both are specified. The default is to use OpenLDAP.
#
# The output is:
# HAVE_LDAP - set to ON, if LDAP support is enabled and libraries found
# SUNLDAP - set to ON, when using SunLDAP implementation
# LDAP_CFLAGS - CFLAGS to use with target_compile_options() and similar commands
# LDAP_INCLUDE_DIRS - include directories to use with target_include_directories() and similar commands
# LDAP_LIBS - libraries to use with target_link_libraries() and similar commands
include(CheckCSourceCompiles)
include(CheckLibraryExists)
include(PrintableOptions)
add_printable_variable_path(WITH_OPENLDAP "Enable LDAP support using OpenLDAP, default ON" "ON")
add_printable_variable_path(WITH_SUNLDAP "Enable LDAP support using SunLDAP, default OFF" "OFF")
add_printable_option(WITH_STATIC_LDAP "Link LDAP statically, default OFF" OFF)
if((NOT WITH_OPENLDAP) AND (NOT WITH_SUNLDAP))
return()
endif((NOT WITH_OPENLDAP) AND (NOT WITH_SUNLDAP))
string(LENGTH "${CMAKE_BINARY_DIR}" bindirlen)
string(LENGTH "${WITH_OPENLDAP}" maxlen)
if(maxlen LESS bindirlen)
set(substr "***")
else(maxlen LESS bindirlen)
string(SUBSTRING "${WITH_OPENLDAP}" 0 ${bindirlen} substr)
endif(maxlen LESS bindirlen)
string(TOUPPER "${WITH_OPENLDAP}" optupper)
if(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
set(WITH_OPENLDAP "/usr")
endif(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
string(LENGTH "${WITH_SUNLDAP}" maxlen)
if(maxlen LESS bindirlen)
set(substr "***")
else(maxlen LESS bindirlen)
string(SUBSTRING "${WITH_SUNLDAP}" 0 ${bindirlen} substr)
endif(maxlen LESS bindirlen)
string(TOUPPER "${WITH_SUNLDAP}" optupper)
if(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
set(WITH_SUNLDAP "/usr")
endif(("${optupper}" STREQUAL "ON") OR ("${substr}" STREQUAL "${CMAKE_BINARY_DIR}"))
unset(bindirlen)
unset(maxlen)
unset(substr)
unset(optupper)
set(HAVE_LDAP ON)
set(SUNLDAP OFF)
macro(add_ldap_lib_if_provides _lib _symbol)
CHECK_LIBRARY_EXISTS(${_lib} ${_symbol} "" lib${_lib}_provides_${_symbol})
if(lib${_lib}_provides_${_symbol})
set(LDAP_LIBS "${LDAP_LIBS} -l${_lib}")
endif(lib${_lib}_provides_${_symbol})
endmacro(add_ldap_lib_if_provides)
set(LDAP_PREFIX "")
if(WITH_OPENLDAP)
set(LDAP_PREFIX "${WITH_OPENLDAP}")
else(WITH_OPENLDAP)
set(LDAP_PREFIX "${WITH_SUNLDAP}")
set(SUNLDAP ON)
endif(WITH_OPENLDAP)
set(LDAP_CFLAGS "")
set(LDAP_INCLUDE_DIRS "${LDAP_PREFIX}/include")
set(LDAP_LIBS "-L${LDAP_PREFIX}/lib${LIB_SUFFIX}")
set(CMAKE_REQUIRED_INCLUDES "${LDAP_INCLUDE_DIRS}")
set(CMAKE_REQUIRED_LIBRARIES "${LDAP_LIBS}")
if(WITH_OPENLDAP)
CHECK_C_SOURCE_COMPILES("#include \"ldap.h\"
int main(void) {
/* LDAP_VENDOR_VERSION is 0 if OpenLDAP is built from git/master */
#if !defined(LDAP_VENDOR_VERSION) || (LDAP_VENDOR_VERSION != 0 && LDAP_VENDOR_VERSION < 20000)
#error OpenLDAP version not at least 2.0
#endif
return 0; }" openldap_2_x)
if(NOT openldap_2_x)
message(FATAL_ERROR "At least 2.0 OpenLDAP version required; either use -DWITH_OPENLDAP=OFF argument to cmake command to disable LDAP support, or install OpenLDAP")
endif(NOT openldap_2_x)
else(WITH_OPENLDAP)
CHECK_C_SOURCE_COMPILES("#include \"ldap.h\"
int main(void) {
#if !defined(LDAP_VENDOR_VERSION) || LDAP_VENDOR_VERSION < 500
#error SunLDAP version not at least 2.0
#endif
return 0; }" sunldap_2_x)
if(NOT sunldap_2_x)
message(FATAL_ERROR "At least 2.0 SunLDAP version required; either use -DWITH_SUNLDAP=OFF argument to cmake command to disable LDAP support, or install SunLDAP")
endif(NOT sunldap_2_x)
endif(WITH_OPENLDAP)
add_ldap_lib_if_provides(resolv res_query)
add_ldap_lib_if_provides(resolv __res_query)
add_ldap_lib_if_provides(socket bind)
CHECK_LIBRARY_EXISTS(lber ber_get_tag "" liblber_provides_ber_get_tag)
if(liblber_provides_ber_get_tag)
if(WITH_STATIC_LDAP)
set(LDAP_LIBS "${LDAP_LIBS} ${LDAP_PREFIX}/lib${LIB_SUFFIX}/liblber.a")
# # libldap might depend on OpenSSL... We need to pull
# # in the dependency libs explicitly here since we're
# # not using libtool for the configure test.
# if test -f ${LDAP_PREFIX}/lib${LIB_SUFFIX}/libldap.la; then
# LDAP_LIBS="`. ${LDAP_PREFIX}/libPLIB_SUFFIX}/libldap.la; echo $dependency_libs` $LDAP_LIBS"
# fi
else(WITH_STATIC_LDAP)
set(LDAP_LIBS "${LDAP_LIBS} -llber")
endif(WITH_STATIC_LDAP)
endif(liblber_provides_ber_get_tag)
CHECK_LIBRARY_EXISTS(ldap ldap_open "" libldap_provides_ldap_open)
if(libldap_provides_ldap_open)
if(WITH_STATIC_LDAP)
set(LDAP_LIBS "${LDAP_LIBS} ${LDAP_PREFIX}/lib${LIB_SUFFIX}/libldap.a")
else(WITH_STATIC_LDAP)
set(LDAP_LIBS "${LDAP_LIBS} -lldap")
endif(WITH_STATIC_LDAP)
else(libldap_provides_ldap_open)
if(WITH_OPENLDAP)
message(FATAL_ERROR "Could not find OpenLDAP libraries; either use -DWITH_OPENLDAP=OFF argument to cmake command to disable LDAP support, or install OpenLDAP")
else(WITH_OPENLDAP)
message(FATAL_ERROR "Could not find SunLDAP libraries; either use -DWITH_SUNLDAP=OFF argument to cmake command to disable LDAP support, or install SunLDAP")
endif(WITH_OPENLDAP)
endif(libldap_provides_ldap_open)
unset(CMAKE_REQUIRED_INCLUDES)
unset(CMAKE_REQUIRED_LIBRARIES)
add_definitions(-DLDAP_DEPRECATED)