AimRT/_deps/boost-src/libs/mysql/CMakeLists.txt
2025-01-12 20:41:24 +08:00

163 lines
4.6 KiB
CMake

#
# Copyright (c) 2019-2023 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
cmake_minimum_required(VERSION 3.8...3.22)
# Boost version
if (DEFINED BOOST_SUPERPROJECT_VERSION)
set(BOOST_MYSQL_VERSION ${BOOST_SUPERPROJECT_VERSION})
else()
set(BOOST_MYSQL_VERSION 1.80.0)
endif()
# Project
project(boost_mysql VERSION ${BOOST_MYSQL_VERSION} LANGUAGES CXX)
# Determine if we're the top-level project
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
set(_IS_ROOT ON)
else()
set(_IS_ROOT OFF)
endif()
# Determine what to do with Boost dependencies.
# We've got the following use cases:
# 1. We're building the superproject, and it has called add_subdirectory() on us. BOOST_SUPERPROJECT_VERSION defined.
# 2. Someone's calling add_subdirectory() on us and doesn't want us to find_package Boost, e.g. the cmake subdir test.
# 3. We're the main project and we want to use an installed version of Boost (e.g. normal development)
set(BOOST_MYSQL_USE_FIND_PACKAGE ${_IS_ROOT})
# If we are the top-level project, enable testing
if(_IS_ROOT)
include(CTest)
# Don't run integration testing unless explicitly requested
option(BOOST_MYSQL_INTEGRATION_TESTS OFF "Whether to build and run integration tests or not")
mark_as_advanced(BOOST_MYSQL_INTEGRATION_TESTS)
# Valgrind tests and Valgrind-friendly code (e.g. mark SSL buffers as initialized)
option(BOOST_MYSQL_VALGRIND_TESTS OFF "Whether to run Valgrind tests or not (requires Valgrind)")
mark_as_advanced(BOOST_MYSQL_VALGRIND_TESTS)
# Build with coverage
option(BOOST_MYSQL_COVERAGE OFF "Whether to build using coverage")
mark_as_advanced(BOOST_MYSQL_COVERAGE)
endif()
# Includes
include(GNUInstallDirs)
# Dependencies
if (BOOST_MYSQL_USE_FIND_PACKAGE)
find_package(Boost ${BOOST_MYSQL_VERSION} REQUIRED COMPONENTS headers system)
set(_BOOST_LINK_LIBRARIES Boost::headers Boost::system)
else()
# Generated by boostdep. These should be already available (e.g. by calling add_subdirectory())
set(_BOOST_LINK_LIBRARIES
Boost::asio
Boost::assert
Boost::config
Boost::core
Boost::endian
Boost::lexical_cast
Boost::mp11
Boost::system
Boost::throw_exception
Boost::variant2
)
endif()
if(_IS_ROOT)
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)
else()
find_package(Threads)
if(NOT Threads_FOUND)
message(STATUS "Boost.MySQL has been disabled, because the required package Threads hasn't been found")
return()
endif()
find_package(OpenSSL)
if(NOT OpenSSL_FOUND)
message(STATUS "Boost.MySQL has been disabled, because the required package OpenSSL hasn't been found")
return()
endif()
endif()
#
# Interface library (header-only)
#
add_library(boost_mysql INTERFACE)
add_library(Boost::mysql ALIAS boost_mysql)
if (BOOST_SUPERPROJECT_VERSION)
target_include_directories(boost_mysql INTERFACE "${PROJECT_SOURCE_DIR}/include")
else()
target_include_directories(
boost_mysql
SYSTEM
INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
endif()
target_compile_features(boost_mysql INTERFACE cxx_std_11)
target_link_libraries(
boost_mysql
INTERFACE
${_BOOST_LINK_LIBRARIES}
Threads::Threads
OpenSSL::Crypto
OpenSSL::SSL
)
# Asio bases C++ feature detection on __cplusplus. Make MSVC
# define it correctly
if (MSVC)
target_compile_options(boost_mysql INTERFACE /Zc:__cplusplus)
endif()
# Examples and tests
if(BUILD_TESTING)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/test_utils.cmake)
# Asio static library to speed up compilation
if (BOOST_MYSQL_USE_FIND_PACKAGE)
set(_ASIO_HEADERS Boost::headers)
else()
set(_ASIO_HEADERS Boost::asio)
endif()
find_package(OpenSSL REQUIRED)
add_library(
boost_mysql_asio
STATIC
${CMAKE_CURRENT_SOURCE_DIR}/tools/asio.cpp
)
set_windows_version(boost_mysql_asio)
target_link_libraries(
boost_mysql_asio
PUBLIC
${_ASIO_HEADERS}
OpenSSL::Crypto
OpenSSL::SSL
)
target_compile_definitions(
boost_mysql_asio
PUBLIC
BOOST_ASIO_SEPARATE_COMPILATION
)
# All examples require a real server to run
if (BOOST_MYSQL_INTEGRATION_TESTS)
add_subdirectory(example)
endif()
add_subdirectory(test)
endif()