| #------------------------ |
| # 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() |
| |