146 lines
5.5 KiB
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)
|