blob: 905247235248d23eeb1466adfeab6ccbfe979a01 [file] [log] [blame]
#------------------------
# Windows libraries
#------------------------
if(WIN32)
# Assign additional library requirements for Windows
set(CASS_LIBS ${CASS_LIBS} iphlpapi psapi wsock32 crypt32 ws2_32 userenv version)
endif()
#------------------------
# Libuv
#------------------------
# Setup the paths and hints for libuv
if(NOT LIBUV_ROOT_DIR)
if(EXISTS "${PROJECT_SOURCE_DIR}/lib/libuv/")
set(LIBUV_ROOT_DIR "${PROJECT_SOURCE_DIR}/lib/libuv/")
elseif(EXISTS "${PROJECT_SOURCE_DIR}/build/libs/libuv/")
set(LIBUV_ROOT_DIR "${PROJECT_SOURCE_DIR}/build/libs/libuv/")
endif()
endif()
# Ensure libuv was found
find_package(Libuv "1.0.0")
if(WIN32 AND NOT LIBUV_FOUND)
message(STATUS "Unable to Locate libuv: Third party build step will be performed")
include(ExternalProject-libuv)
elseif(NOT LIBUV_FOUND)
message(FATAL_ERROR "Unable to Locate libuv: libuv v1.0.0+ is required")
endif()
if(LIBUV_VERSION VERSION_LESS "1.0")
message(FATAL_ERROR "Libuv version ${LIBUV_VERSION} is not "
" supported. Please updgrade to libuv version 1.0 or greater in order to "
"utilize the driver.")
endif()
if(LIBUV_VERSION VERSION_LESS "1.6")
message(WARNING "Libuv version ${LIBUV_VERSION} does not support custom "
"memory allocators (version 1.6 or greater required)")
endif()
# Assign libuv include and libraries
set(CASS_INCLUDES ${CASS_INCLUDES} ${LIBUV_INCLUDE_DIRS})
set(CASS_LIBS ${CASS_LIBS} ${LIBUV_LIBRARIES})
# libuv and gtests require thread library
if(NOT WIN32)
set(CMAKE_THREAD_PREFER_PTHREAD 1)
set(THREADS_PREFER_PTHREAD_FLAG 1)
endif()
find_package(Threads REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_THREAD_LIBS_INIT}")
if(NOT WIN32 AND ${CMAKE_VERSION} VERSION_LESS "3.1.0")
# FindThreads in CMake versions < v3.1.0 do not have the THREADS_PREFER_PTHREAD_FLAG to prefer -pthread
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
endif()
#------------------------
# OpenSSL
#------------------------
if(CASS_USE_OPENSSL)
if(NOT WIN32)
set(_OPENSSL_ROOT_PATHS "${PROJECT_SOURCE_DIR}/lib/openssl/")
set(_OPENSSL_ROOT_HINTS ${OPENSSL_ROOT_DIR} $ENV{OPENSSL_ROOT_DIR})
set(_OPENSSL_ROOT_HINTS_AND_PATHS
HINTS ${_OPENSSL_ROOT_HINTS}
PATHS ${_OPENSSL_ROOT_PATHS})
else()
if(NOT DEFINED OPENSSL_ROOT_DIR)
# FindOpenSSL overrides _OPENSSL_ROOT_HINTS and _OPENSSL_ROOT_PATHS on Windows
# however it utilizes OPENSSL_ROOT_DIR when it sets these values
set(OPENSSL_ROOT_DIR "${PROJECT_SOURCE_DIR}/lib/openssl/"
"${PROJECT_SOURCE_DIR}/build/libs/openssl/")
endif()
endif()
# Discover OpenSSL and assign OpenSSL include and libraries
if(WIN32 AND OPENSSL_VERSION) # Store the current version of OpenSSL to prevent corruption
set(SAVED_OPENSSL_VERSION ${OPENSSL_VERSION})
endif()
find_package(OpenSSL)
if(WIN32 AND NOT OPENSSL_FOUND)
message(STATUS "Unable to Locate OpenSSL: Third party build step will be performed")
if(SAVED_OPENSSL_VERSION)
set(OPENSSL_VERSION ${SAVED_OPENSSL_VERSION})
endif()
include(ExternalProject-OpenSSL)
elseif(NOT OPENSSL_FOUND)
message(FATAL_ERROR "Unable to Locate OpenSSL: Ensure OpenSSL is installed in order to build the driver")
else()
set(openssl_name "OpenSSL")
if(LIBRESSL_FOUND)
set(openssl_name "LibreSSL")
endif()
message(STATUS "${openssl_name} version: v${OPENSSL_VERSION}")
endif()
set(CASS_INCLUDES ${CASS_INCLUDES} ${OPENSSL_INCLUDE_DIR})
set(CASS_LIBS ${CASS_LIBS} ${OPENSSL_LIBRARIES})
endif()
#------------------------
# ZLIB
#------------------------
if(CASS_USE_ZLIB)
if(NOT ZLIB_LIBRARY_NAME)
# Setup the root directory for zlib
set(ZLIB_ROOT "${PROJECT_SOURCE_DIR}/lib/zlib/"
"${PROJECT_SOURCE_DIR}/build/libs/zlib/")
set(ZLIB_ROOT ${ZLIB_ROOT} ${ZLIB_ROOT_DIR} $ENV{ZLIB_ROOT_DIR})
# Ensure zlib was found (assign zlib include/libraries or present warning)
find_package(ZLIB)
if(ZLIB_FOUND)
# Determine if the static library needs to be used for Windows
if(WIN32 AND CASS_USE_STATIC_LIBS)
string(REPLACE "zlib.lib" "zlibstatic.lib" ZLIB_LIBRARIES "${ZLIB_LIBRARIES}")
endif()
# Assign zlib properties
set(CASS_INCLUDES ${CASS_INCLUDES} ${ZLIB_INCLUDE_DIRS})
set(CASS_LIBS ${CASS_LIBS} ${ZLIB_LIBRARIES})
set(HAVE_ZLIB On)
else()
message(WARNING "Could not find zlib, try to set the path to zlib root folder in the system variable ZLIB_ROOT_DIR")
message(WARNING "zlib libraries will not be linked into build")
endif()
else()
# Assign zlib properties
set(CASS_INCLUDES ${CASS_INCLUDES} ${ZLIB_INCLUDE_DIRS})
set(CASS_LIBS ${CASS_LIBS} ${ZLIB_LIBRARIES})
endif()
endif()
#------------------------
# Kerberos
#------------------------
if(CASS_USE_KERBEROS)
# Discover Kerberos and assign Kerberos include and libraries
find_package(Kerberos REQUIRED)
set(CASS_INCLUDES ${CASS_INCLUDES} ${KERBEROS_INCLUDE_DIR})
set(CASS_LIBS ${CASS_LIBS} ${KERBEROS_LIBRARIES})
endif()
#------------------------
# Boost
#------------------------
if(CASS_USE_BOOST_ATOMIC)
# Allow for boost directory to be specified on the command line
if(NOT DEFINED ENV{BOOST_ROOT})
if(EXISTS "${PROJECT_SOURCE_DIR}/lib/boost/")
set(ENV{BOOST_ROOT} "${PROJECT_SOURCE_DIR}/lib/boost/")
elseif(EXISTS "${PROJECT_SOURCE_DIR}/build/libs/boost/")
set(ENV{BOOST_ROOT} "${PROJECT_SOURCE_DIR}/build/libs/boost/")
endif()
endif()
if(BOOST_ROOT_DIR)
if(EXISTS ${BOOST_ROOT_DIR})
set(ENV{BOOST_ROOT} ${BOOST_ROOT_DIR})
endif()
endif()
# Ensure Boost auto linking is disabled (defaults to auto linking on Windows)
if(WIN32)
add_definitions(-DBOOST_ALL_NO_LIB)
endif()
# Check for general Boost availability
find_package(Boost ${CASS_MINIMUM_BOOST_VERSION})
if(CASS_USE_BOOST_ATOMIC)
if(NOT Boost_INCLUDE_DIRS)
message(FATAL_ERROR "Boost headers required to build driver because of -DCASS_USE_BOOST_ATOMIC=On")
endif()
# Assign Boost include for atomics
set(CASS_INCLUDES ${CASS_INCLUDES} ${Boost_INCLUDE_DIRS})
endif()
# Determine if additional Boost definitions are required for driver/executables
if(NOT WIN32)
# Handle explicit initialization warning in atomic/details/casts
add_definitions(-Wno-missing-field-initializers)
endif()
endif()