173 lines
5.4 KiB
CMake
173 lines
5.4 KiB
CMake
# Copyright (c) 2019, 2024, Oracle and/or its affiliates.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License, version 2.0,
|
|
# as published by the Free Software Foundation.
|
|
#
|
|
# This program is designed to work with certain software (including
|
|
# but not limited to OpenSSL) that is licensed under separate terms,
|
|
# as designated in a particular file or component or in included license
|
|
# documentation. The authors of MySQL hereby grant you an additional
|
|
# permission to link the program and your derivative works with the
|
|
# separately licensed software that they have either included with
|
|
# the program or referenced in the documentation.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License, version 2.0, for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
# cmake -DWITH_LDAP=system|</path/to/custom/installation>
|
|
# system is the default
|
|
# Custom path is only supported for LINUX_STANDALONE platforms.
|
|
|
|
INCLUDE (CheckIncludeFile)
|
|
INCLUDE (CheckIncludeFiles)
|
|
|
|
SET(WITH_LDAP_DOC "\nsystem (use the OS ldap library)")
|
|
STRING_APPEND(WITH_LDAP_DOC ", \n</path/to/custom/installation>")
|
|
|
|
STRING(REPLACE "\n" "| " WITH_LDAP_DOC_STRING "${WITH_LDAP_DOC}")
|
|
|
|
FUNCTION(WARN_MISSING_SYSTEM_LDAP OUTPUT_WARNING)
|
|
IF(NOT LDAP_FOUND AND WITH_LDAP STREQUAL "system")
|
|
MESSAGE(WARNING "Cannot find LDAP development libraries. "
|
|
"You need to install the required packages:\n"
|
|
" Debian/Ubuntu: apt install libldap-dev\n"
|
|
" RedHat/Fedora/Oracle Linux: yum install openldap-devel\n"
|
|
" SuSE: zypper install openldap2-devel\n"
|
|
)
|
|
SET(${OUTPUT_WARNING} 1 PARENT_SCOPE)
|
|
ENDIF()
|
|
ENDFUNCTION()
|
|
|
|
MACRO(FIND_SYSTEM_LDAP)
|
|
IF(WIN32)
|
|
SET(LDAP_SYSTEM_LIBRARY Wldap32 CACHE INTERNAL
|
|
"LDAP library is /c/Windows/system32/Wldap32.dll"
|
|
)
|
|
ELSE()
|
|
FIND_LIBRARY(LDAP_SYSTEM_LIBRARY
|
|
NAMES ldap_r ldap
|
|
)
|
|
FIND_LIBRARY(LBER_SYSTEM_LIBRARY
|
|
NAMES lber
|
|
)
|
|
ENDIF()
|
|
IF(LDAP_SYSTEM_LIBRARY AND (WIN32 OR LBER_SYSTEM_LIBRARY))
|
|
SET(LDAP_LIBRARY ${LDAP_SYSTEM_LIBRARY})
|
|
SET(LBER_LIBRARY ${LBER_SYSTEM_LIBRARY})
|
|
MESSAGE(STATUS "LBER_LIBRARY ${LBER_LIBRARY}")
|
|
MESSAGE(STATUS "LDAP_LIBRARY ${LDAP_LIBRARY}")
|
|
ENDIF()
|
|
|
|
IF(WIN32)
|
|
# LDAP system header is Winldap.h and is in some Windows SDK
|
|
ELSE()
|
|
CMAKE_PUSH_CHECK_STATE()
|
|
|
|
# For Solaris 11.3 we need to explicitly search here:
|
|
IF(SOLARIS)
|
|
INCLUDE_DIRECTORIES(BEFORE SYSTEM /usr/include/openldap)
|
|
SET(CMAKE_REQUIRED_INCLUDES "/usr/include/openldap")
|
|
ENDIF()
|
|
|
|
CHECK_INCLUDE_FILE(lber.h HAVE_LBER_H)
|
|
CHECK_INCLUDE_FILE(ldap.h HAVE_LDAP_H)
|
|
CMAKE_POP_CHECK_STATE()
|
|
ENDIF()
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(FIND_CUSTOM_LDAP)
|
|
FIND_PATH(LDAP_INCLUDE_DIR
|
|
NAMES ldap.h
|
|
PATHS ${WITH_LDAP_PATH}/include
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
|
|
FIND_LIBRARY(LDAP_CUSTOM_LIBRARY
|
|
NAMES ldap_r ldap
|
|
PATHS ${WITH_LDAP_PATH}/lib
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
FIND_LIBRARY(LBER_CUSTOM_LIBRARY
|
|
NAMES lber
|
|
PATHS ${WITH_LDAP_PATH}/lib
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
|
|
IF(LDAP_INCLUDE_DIR)
|
|
INCLUDE_DIRECTORIES(BEFORE SYSTEM ${LDAP_INCLUDE_DIR})
|
|
|
|
CMAKE_PUSH_CHECK_STATE()
|
|
SET(CMAKE_REQUIRED_INCLUDES ${LDAP_INCLUDE_DIR})
|
|
CHECK_INCLUDE_FILE(lber.h HAVE_LBER_H)
|
|
CHECK_INCLUDE_FILE(ldap.h HAVE_LDAP_H)
|
|
CMAKE_POP_CHECK_STATE()
|
|
ENDIF()
|
|
|
|
IF(LDAP_CUSTOM_LIBRARY AND LBER_CUSTOM_LIBRARY)
|
|
SET(LDAP_LIBRARY ${LDAP_CUSTOM_LIBRARY})
|
|
SET(LBER_LIBRARY ${LBER_CUSTOM_LIBRARY})
|
|
MESSAGE(STATUS "LDAP_LIBRARY ${LDAP_LIBRARY}")
|
|
MESSAGE(STATUS "LBER_LIBRARY ${LBER_LIBRARY}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
MACRO(MYSQL_CHECK_LDAP)
|
|
IF(NOT WITH_LDAP)
|
|
SET(WITH_LDAP "system" CACHE STRING ${WITH_LDAP_DOC_STRING} FORCE)
|
|
ENDIF()
|
|
|
|
# See if WITH_LDAP is of the form </path/to/custom/installation>
|
|
FILE(GLOB WITH_LDAP_HEADER ${WITH_LDAP}/include/ldap.h)
|
|
IF (WITH_LDAP_HEADER)
|
|
FILE(TO_CMAKE_PATH "${WITH_LDAP}" WITH_LDAP)
|
|
SET(WITH_LDAP_PATH ${WITH_LDAP})
|
|
ENDIF()
|
|
|
|
IF(WITH_LDAP STREQUAL "system")
|
|
FIND_SYSTEM_LDAP()
|
|
ELSEIF(WITH_LDAP_PATH)
|
|
IF(LINUX_STANDALONE)
|
|
FIND_CUSTOM_LDAP()
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "-DWITH_LDAP=<path> not supported on this platform")
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Could not find LDAP")
|
|
ENDIF()
|
|
|
|
IF(WIN32 AND WITH_LDAP STREQUAL "system")
|
|
SET(LDAP_FOUND 1)
|
|
ELSEIF(HAVE_LBER_H AND HAVE_LDAP_H AND LDAP_LIBRARY AND LBER_LIBRARY)
|
|
SET(LDAP_FOUND 1)
|
|
ELSE()
|
|
SET(LDAP_FOUND 0)
|
|
# FATAL_ERROR later if WITH_AUTHENTICATION_LDAP == ON
|
|
MESSAGE(WARNING "Could not find LDAP")
|
|
ENDIF()
|
|
|
|
ENDMACRO()
|
|
|
|
MACRO(MYSQL_CHECK_LDAP_DLLS)
|
|
IF(LINUX_STANDALONE AND LDAP_CUSTOM_LIBRARY)
|
|
COPY_CUSTOM_SHARED_LIBRARY("${LDAP_CUSTOM_LIBRARY}" ""
|
|
LDAP_LIBRARY ldap_target)
|
|
ENDIF()
|
|
IF(LINUX_STANDALONE AND LBER_CUSTOM_LIBRARY)
|
|
COPY_CUSTOM_SHARED_LIBRARY("${LBER_CUSTOM_LIBRARY}" ""
|
|
LBER_LIBRARY lber_target)
|
|
ENDIF()
|
|
ENDMACRO()
|