180 lines
6.7 KiB
CMake
180 lines
6.7 KiB
CMake
# Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# 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 also distributed 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 included with MySQL.
|
|
#
|
|
# 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
|
|
|
|
MACRO(GET_CURL_VERSION)
|
|
FILE(STRINGS "${CURL_INCLUDE_DIR}/curl/curlver.h"
|
|
CURL_VERSION_NUMBERS
|
|
REGEX "^#[ ]*define[\t ]+LIBCURL_VERSION_[A-Z]+[\t ]+[0-9].*"
|
|
)
|
|
STRING(REGEX REPLACE
|
|
"^.*LIBCURL_VERSION_MAJOR[\t ]+([0-9]+).*$" "\\1"
|
|
CURL_VERSION_MAJOR "${CURL_VERSION_NUMBERS}"
|
|
)
|
|
STRING(REGEX REPLACE
|
|
"^.*LIBCURL_VERSION_MINOR[\t ]+([0-9]+).*$" "\\1"
|
|
CURL_VERSION_MINOR "${CURL_VERSION_NUMBERS}"
|
|
)
|
|
MESSAGE(STATUS "CURL version: ${CURL_VERSION_MAJOR}.${CURL_VERSION_MINOR}")
|
|
ENDMACRO()
|
|
|
|
MACRO(MYSQL_CHECK_CURL)
|
|
IF(WITH_CURL STREQUAL "system")
|
|
# FindCURL.cmake will set
|
|
# CURL_INCLUDE_DIRS - where to find curl/curl.h, etc.
|
|
# CURL_LIBRARIES - List of libraries when using curl.
|
|
# CURL_FOUND - True if curl found.
|
|
# CURL_VERSION_STRING - the version of curl found (since CMake 2.8.8)
|
|
FIND_PACKAGE(CURL)
|
|
IF(CURL_FOUND AND
|
|
CURL_LIBRARIES AND
|
|
NOT CURL_LIBRARIES MATCHES "CURL_LIBRARY-NOTFOUND" AND
|
|
NOT CURL_INCLUDE_DIRS MATCHES "CURL_INCLUDE_DIR-NOTFOUND")
|
|
SET(CURL_LIBRARY ${CURL_LIBRARIES} CACHE FILEPATH "Curl library")
|
|
SET(CURL_INCLUDE_DIR ${CURL_INCLUDE_DIRS} CACHE PATH "Curl include")
|
|
GET_CURL_VERSION()
|
|
ELSE()
|
|
SET(CURL_LIBRARY "")
|
|
SET(CURL_INCLUDE_DIR "")
|
|
ENDIF()
|
|
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
|
|
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
|
|
|
|
ELSEIF(WITH_CURL STREQUAL "bundled")
|
|
MESSAGE(FATAL_ERROR "There is no bundled CURL library.")
|
|
|
|
ELSEIF(WITH_CURL)
|
|
# Explicit path given. Normalize path for the following regex replace.
|
|
FILE(TO_CMAKE_PATH "${WITH_CURL}" WITH_CURL)
|
|
# Pushbuild adds /lib to the CURL path
|
|
STRING(REGEX REPLACE "/lib$" "" WITH_CURL "${WITH_CURL}")
|
|
LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
|
|
FIND_LIBRARY(CURL_LIBRARY
|
|
NAMES curl libcurl
|
|
PATHS ${WITH_CURL} ${WITH_CURL}/lib
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
|
|
IF(CURL_LIBRARY MATCHES "CURL_LIBRARY-NOTFOUND")
|
|
MESSAGE(FATAL_ERROR "CURL library not found under '${WITH_CURL}'")
|
|
ENDIF()
|
|
FIND_PATH(CURL_INCLUDE_DIR
|
|
NAMES curl/curl.h
|
|
PATHS ${WITH_CURL} ${WITH_CURL}/include
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
IF(CURL_INCLUDE_DIR MATCHES "CURL_INCLUDE_DIR-NOTFOUND")
|
|
MESSAGE(FATAL_ERROR "CURL include files not found under '${WITH_CURL}'")
|
|
ENDIF()
|
|
SET(WITH_CURL_PATH ${WITH_CURL} CACHE PATH "path to CURL installation")
|
|
SET(WITH_CURL_PATH ${WITH_CURL})
|
|
GET_CURL_VERSION()
|
|
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
|
|
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
|
|
|
|
ELSE()
|
|
MESSAGE(STATUS "No WITH_CURL has been set. Not using any curl library.")
|
|
SET(CURL_LIBRARY "")
|
|
SET(CURL_INCLUDE_DIR "")
|
|
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
|
|
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
|
|
MACRO(MYSQL_CHECK_CURL_DLLS)
|
|
|
|
IF (WITH_CURL_PATH AND WIN32)
|
|
|
|
MESSAGE(STATUS "WITH_CURL_PATH ${WITH_CURL_PATH}")
|
|
GET_FILENAME_COMPONENT(CURL_NAME "${CURL_LIBRARY}" NAME_WE)
|
|
FIND_FILE(HAVE_CURL_DLL
|
|
NAMES "${CURL_NAME}.dll"
|
|
PATHS "${WITH_CURL_PATH}/lib"
|
|
NO_DEFAULT_PATH
|
|
)
|
|
MESSAGE(STATUS "HAVE_CURL_DLL ${HAVE_CURL_DLL}")
|
|
IF(HAVE_CURL_DLL)
|
|
SET(CURL_LIBRARY "CURL_LIBRARY-NOTFOUND")
|
|
FIND_LIBRARY(CURL_LIBRARY
|
|
NAMES libcurl_imp.lib
|
|
PATHS ${WITH_CURL} ${WITH_CURL}/lib
|
|
NO_DEFAULT_PATH
|
|
NO_CMAKE_ENVIRONMENT_PATH
|
|
NO_SYSTEM_ENVIRONMENT_PATH
|
|
)
|
|
IF(CURL_LIBRARY MATCHES "CURL_LIBRARY-NOTFOUND")
|
|
MESSAGE(FATAL_ERROR
|
|
"CURL dll import library not found under '${WITH_CURL}'")
|
|
ENDIF()
|
|
GET_FILENAME_COMPONENT(CURL_DLL_NAME "${HAVE_CURL_DLL}" NAME)
|
|
ADD_CUSTOM_TARGET(copy_curl_dlls ALL
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${HAVE_CURL_DLL}"
|
|
"${CMAKE_BINARY_DIR}/runtime_output_directory/${CMAKE_CFG_INTDIR}/${CURL_DLL_NAME}"
|
|
)
|
|
|
|
MESSAGE(STATUS "INSTALL ${HAVE_CURL_DLL} to ${INSTALL_BINDIR}")
|
|
INSTALL(FILES "${HAVE_CURL_DLL}"
|
|
DESTINATION "${INSTALL_BINDIR}" COMPONENT SharedLibraries)
|
|
|
|
SET(ZLIB_DLL_REQUIRED 1)
|
|
FIND_OBJECT_DEPENDENCIES("${HAVE_CURL_DLL}" DEPENDENCY_LIST)
|
|
LIST(FIND DEPENDENCY_LIST "zlib1.dll" FOUNDIT)
|
|
MESSAGE(STATUS "${CURL_DLL_NAME} DEPENDENCY_LIST ${DEPENDENCY_LIST}")
|
|
IF(FOUNDIT LESS 0)
|
|
UNSET(ZLIB_DLL_REQUIRED)
|
|
ENDIF()
|
|
|
|
FIND_FILE(HAVE_ZLIB_DLL
|
|
NAMES zlib1.dll
|
|
PATHS "${WITH_CURL_PATH}/lib"
|
|
NO_DEFAULT_PATH
|
|
)
|
|
MESSAGE(STATUS "HAVE_ZLIB_DLL ${HAVE_ZLIB_DLL}")
|
|
|
|
IF(ZLIB_DLL_REQUIRED AND NOT HAVE_ZLIB_DLL)
|
|
MESSAGE(FATAL_ERROR "libcurl.dll depends on zlib1.dll")
|
|
ENDIF()
|
|
|
|
IF(ZLIB_DLL_REQUIRED AND HAVE_ZLIB_DLL)
|
|
MESSAGE(STATUS "INSTALL ${HAVE_ZLIB_DLL} to ${INSTALL_BINDIR}")
|
|
INSTALL(FILES "${HAVE_ZLIB_DLL}"
|
|
DESTINATION "${INSTALL_BINDIR}" COMPONENT SharedLibraries)
|
|
GET_FILENAME_COMPONENT(ZLIB_DLL_NAME "${HAVE_ZLIB_DLL}" NAME)
|
|
ADD_CUSTOM_TARGET(copy_zlib_dlls ALL
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${HAVE_ZLIB_DLL}"
|
|
"${CMAKE_BINARY_DIR}/runtime_output_directory/${CMAKE_CFG_INTDIR}/${ZLIB_DLL_NAME}"
|
|
)
|
|
ADD_DEPENDENCIES(copy_curl_dlls copy_zlib_dlls)
|
|
ENDIF()
|
|
ELSE()
|
|
MESSAGE(STATUS "Cannot find CURL dynamic libraries")
|
|
ENDIF()
|
|
|
|
ENDIF()
|
|
ENDMACRO()
|