2019-08-31 08:27:57 +08:00
|
|
|
cmake_minimum_required(VERSION 3.5)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2020-02-29 15:46:08 +08:00
|
|
|
project(drogon)
|
2020-12-13 22:12:01 +08:00
|
|
|
|
2020-01-25 11:58:20 +08:00
|
|
|
message(STATUS "compiler: " ${CMAKE_CXX_COMPILER_ID})
|
2021-01-17 12:03:27 +08:00
|
|
|
|
2021-03-25 04:27:52 +08:00
|
|
|
# If your cross compile is failing, you should set
|
|
|
|
# CMAKE_SYSTEM_NAME in your toolchain file
|
|
|
|
if (NOT CMAKE_CROSSCOMPILING)
|
2021-03-13 19:13:54 +08:00
|
|
|
set(BUILD_PROGRAMS ON)
|
|
|
|
else ()
|
|
|
|
set(BUILD_PROGRAMS OFF)
|
|
|
|
endif ()
|
2020-12-13 22:12:01 +08:00
|
|
|
|
|
|
|
option(BUILD_CTL "Build drogon_ctl" ${BUILD_PROGRAMS})
|
|
|
|
option(BUILD_EXAMPLES "Build examples" ${BUILD_PROGRAMS})
|
2019-12-11 18:39:10 +08:00
|
|
|
option(BUILD_ORM "Build orm" ON)
|
2020-04-30 13:30:37 +08:00
|
|
|
option(COZ_PROFILING "Use coz for profiling" OFF)
|
2019-12-11 18:39:10 +08:00
|
|
|
option(BUILD_DROGON_SHARED "Build drogon as a shared lib" OFF)
|
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
include(CMakeDependentOption)
|
|
|
|
CMAKE_DEPENDENT_OPTION(BUILD_POSTGRESQL "Build with postgresql support" ON "BUILD_ORM" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(LIBPQ_BATCH_MODE "Use batch mode for libpq" ON "BUILD_POSTGRESQL" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(BUILD_MYSQL "Build with mysql support" ON "BUILD_ORM" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(BUILD_SQLITE "Build with sqlite3 support" ON "BUILD_ORM" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(BUILD_REDIS "Build with redis support" ON "BUILD_ORM" OFF)
|
|
|
|
|
2019-08-08 15:17:09 +08:00
|
|
|
set(DROGON_MAJOR_VERSION 1)
|
2021-05-15 18:15:13 +08:00
|
|
|
set(DROGON_MINOR_VERSION 6)
|
|
|
|
set(DROGON_PATCH_VERSION 0)
|
2019-08-08 15:17:09 +08:00
|
|
|
set(DROGON_VERSION
|
2021-03-24 10:32:55 +08:00
|
|
|
${DROGON_MAJOR_VERSION}.${DROGON_MINOR_VERSION}.${DROGON_PATCH_VERSION})
|
2020-09-27 22:51:09 +08:00
|
|
|
set(DROGON_VERSION_STRING "${DROGON_VERSION}")
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
# Offer the user the choice of overriding the installation directories
|
|
|
|
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
|
|
|
|
set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables")
|
2021-03-24 10:32:55 +08:00
|
|
|
set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
|
2020-02-29 15:46:08 +08:00
|
|
|
set(DEF_INSTALL_DROGON_CMAKE_DIR lib/cmake/Drogon)
|
2021-03-24 10:32:55 +08:00
|
|
|
set(INSTALL_DROGON_CMAKE_DIR ${DEF_INSTALL_DROGON_CMAKE_DIR}
|
|
|
|
CACHE PATH "Installation directory for cmake files")
|
2021-03-13 19:13:54 +08:00
|
|
|
|
2021-05-27 20:09:57 +08:00
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
|
|
# Force MSVC to use UTF-8 because that's what we use. Otherwise it uses
|
|
|
|
# the default of whatever Windows sets and causes encoding issues.
|
|
|
|
message(STATUS "You are using MSVC. Forceing to use UTF-8")
|
|
|
|
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
|
|
|
|
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
|
|
|
endif ()
|
|
|
|
|
2021-03-13 19:13:54 +08:00
|
|
|
if (BUILD_DROGON_SHARED)
|
|
|
|
set(BUILD_TRANTOR_SHARED TRUE)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
2021-04-09 10:17:28 +08:00
|
|
|
find_package(Threads)
|
2021-03-13 19:13:54 +08:00
|
|
|
# set(BUILD_EXAMPLES FALSE)
|
|
|
|
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
|
2021-03-24 10:32:55 +08:00
|
|
|
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" isSystemDir)
|
2021-03-13 19:13:54 +08:00
|
|
|
if ("${isSystemDir}" STREQUAL "-1")
|
|
|
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}")
|
|
|
|
endif ("${isSystemDir}" STREQUAL "-1")
|
|
|
|
add_library(${PROJECT_NAME} SHARED)
|
2021-04-22 13:22:13 +08:00
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
|
|
VERSION ${DROGON_VERSION}
|
|
|
|
SOVERSION ${DROGON_MAJOR_VERSION})
|
2021-04-09 10:17:28 +08:00
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
|
2021-05-17 21:45:18 +08:00
|
|
|
if (WIN32)
|
2021-05-29 15:11:41 +08:00
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Rpcrt4 ws2_32 crypt32 Advapi32)
|
2021-05-17 21:45:18 +08:00
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
|
|
|
|
# Ignore MSVC C4251 and C4275 warning of exporting std objects with no dll export
|
|
|
|
# We export class to facilitate maintenance, thus if you compile
|
|
|
|
# drogon on windows as a shared library, you will need to use
|
|
|
|
# exact same compiler for drogon and your app.
|
|
|
|
target_compile_options(${PROJECT_NAME} PUBLIC /wd4251 /wd4275)
|
|
|
|
endif ()
|
|
|
|
endif ()
|
2021-03-13 19:13:54 +08:00
|
|
|
else (BUILD_DROGON_SHARED)
|
|
|
|
add_library(${PROJECT_NAME} STATIC)
|
|
|
|
endif (BUILD_DROGON_SHARED)
|
2019-12-12 12:49:18 +08:00
|
|
|
|
2021-04-15 19:27:15 +08:00
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
|
|
|
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Werror)
|
2021-05-17 21:45:18 +08:00
|
|
|
endif ()
|
2021-04-15 19:27:15 +08:00
|
|
|
|
2021-04-09 10:17:28 +08:00
|
|
|
include(GenerateExportHeader)
|
|
|
|
generate_export_header(${PROJECT_NAME} EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/exports/drogon/exports.h)
|
|
|
|
|
2020-10-12 21:51:39 +08:00
|
|
|
include(cmake/DrogonUtilities.cmake)
|
2021-05-27 20:09:57 +08:00
|
|
|
include(cmake/ParseAndAddDrogonTests.cmake)
|
2019-07-26 22:22:12 +08:00
|
|
|
include(CheckIncludeFileCXX)
|
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
check_include_file_cxx(any HAS_ANY)
|
|
|
|
check_include_file_cxx(string_view HAS_STRING_VIEW)
|
2021-02-06 17:05:58 +08:00
|
|
|
check_include_file_cxx(coroutine HAS_COROUTINE)
|
2021-03-13 19:13:54 +08:00
|
|
|
if (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE)
|
|
|
|
set(DROGON_CXX_STANDARD 20)
|
|
|
|
elseif (HAS_ANY AND HAS_STRING_VIEW)
|
|
|
|
set(DROGON_CXX_STANDARD 17)
|
|
|
|
else ()
|
|
|
|
set(DROGON_CXX_STANDARD 14)
|
|
|
|
endif ()
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
target_include_directories(
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_NAME}
|
|
|
|
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/inc>
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/orm_lib/inc>
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/nosql_lib/redis/inc>
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/trantor>
|
2021-04-09 10:17:28 +08:00
|
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/exports>
|
2021-03-24 10:32:55 +08:00
|
|
|
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
if (WIN32)
|
|
|
|
target_include_directories(
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_NAME}
|
|
|
|
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/mman-win32>)
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (WIN32)
|
2020-01-25 11:58:20 +08:00
|
|
|
|
2019-08-08 15:17:09 +08:00
|
|
|
add_subdirectory(trantor)
|
2019-08-31 08:27:57 +08:00
|
|
|
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC trantor)
|
|
|
|
|
2021-03-13 19:13:54 +08:00
|
|
|
if (NOT WIN32)
|
|
|
|
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE dl)
|
|
|
|
endif (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
|
|
|
else (NOT WIN32)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE shlwapi)
|
|
|
|
endif (NOT WIN32)
|
|
|
|
|
|
|
|
if (DROGON_CXX_STANDARD EQUAL 14)
|
|
|
|
# With C++14, use boost to support any and string_view
|
|
|
|
message(STATUS "use c++14")
|
|
|
|
find_package(Boost 1.61.0 REQUIRED)
|
|
|
|
message(STATUS "boost include dir:" ${Boost_INCLUDE_DIR})
|
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost)
|
|
|
|
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW ${Boost_INCLUDE_DIR})
|
|
|
|
elseif (DROGON_CXX_STANDARD EQUAL 17)
|
|
|
|
message(STATUS "use c++17")
|
|
|
|
else ()
|
|
|
|
message(STATUS "use c++20")
|
|
|
|
endif ()
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2021-05-09 07:26:46 +08:00
|
|
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules/)
|
2019-03-27 19:32:09 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
# jsoncpp
|
|
|
|
find_package(Jsoncpp REQUIRED)
|
2020-03-18 19:54:48 +08:00
|
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Jsoncpp_lib)
|
2019-08-31 08:27:57 +08:00
|
|
|
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW ${JSONCPP_INCLUDE_DIRS})
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
|
|
|
|
AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD"
|
|
|
|
AND NOT WIN32)
|
2021-03-13 19:13:54 +08:00
|
|
|
find_package(UUID REQUIRED)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE UUID_lib)
|
|
|
|
|
|
|
|
try_compile(normal_uuid ${CMAKE_BINARY_DIR}/cmaketest
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_SOURCE_DIR}/cmake/tests/normal_uuid_lib_test.cc
|
|
|
|
LINK_LIBRARIES UUID_lib)
|
2021-03-13 19:13:54 +08:00
|
|
|
try_compile(ossp_uuid ${CMAKE_BINARY_DIR}/cmaketest
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_SOURCE_DIR}/cmake/tests/ossp_uuid_lib_test.cc
|
|
|
|
LINK_LIBRARIES UUID_lib)
|
2021-03-13 19:13:54 +08:00
|
|
|
if (normal_uuid)
|
|
|
|
add_definitions(-DUSE_OSSP_UUID=0)
|
|
|
|
elseif (ossp_uuid)
|
|
|
|
add_definitions(-DUSE_OSSP_UUID=1)
|
|
|
|
else ()
|
|
|
|
message(FATAL_ERROR "uuid lib error")
|
|
|
|
endif ()
|
2021-03-24 10:32:55 +08:00
|
|
|
endif (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
|
|
|
|
AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD"
|
|
|
|
AND NOT WIN32)
|
2019-08-31 08:27:57 +08:00
|
|
|
|
2020-04-04 18:15:15 +08:00
|
|
|
find_package(Brotli)
|
2021-03-13 19:13:54 +08:00
|
|
|
if (Brotli_FOUND)
|
|
|
|
message(STATUS "Brotli found")
|
|
|
|
add_definitions(-DUSE_BROTLI)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE Brotli_lib)
|
|
|
|
endif (Brotli_FOUND)
|
2020-04-04 18:15:15 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
set(DROGON_SOURCES
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/src/AOPAdvice.cc
|
|
|
|
lib/src/CacheFile.cc
|
|
|
|
lib/src/ConfigLoader.cc
|
|
|
|
lib/src/Cookie.cc
|
|
|
|
lib/src/DrClassMap.cc
|
|
|
|
lib/src/DrTemplateBase.cc
|
|
|
|
lib/src/FiltersFunction.cc
|
|
|
|
lib/src/HttpAppFrameworkImpl.cc
|
2021-03-28 10:56:23 +08:00
|
|
|
lib/src/HttpBinder.cc
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/src/HttpClientImpl.cc
|
|
|
|
lib/src/HttpControllersRouter.cc
|
|
|
|
lib/src/HttpFileImpl.cc
|
|
|
|
lib/src/HttpFileUploadRequest.cc
|
|
|
|
lib/src/HttpRequestImpl.cc
|
|
|
|
lib/src/HttpRequestParser.cc
|
|
|
|
lib/src/HttpResponseImpl.cc
|
|
|
|
lib/src/HttpResponseParser.cc
|
|
|
|
lib/src/HttpServer.cc
|
|
|
|
lib/src/HttpSimpleControllersRouter.cc
|
|
|
|
lib/src/HttpUtils.cc
|
|
|
|
lib/src/HttpViewData.cc
|
|
|
|
lib/src/IntranetIpFilter.cc
|
|
|
|
lib/src/ListenerManager.cc
|
|
|
|
lib/src/LocalHostFilter.cc
|
|
|
|
lib/src/MultiPart.cc
|
|
|
|
lib/src/NotFound.cc
|
|
|
|
lib/src/PluginsManager.cc
|
|
|
|
lib/src/SecureSSLRedirector.cc
|
2021-05-17 21:45:18 +08:00
|
|
|
lib/src/AccessLogger.cc
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/src/SessionManager.cc
|
|
|
|
lib/src/StaticFileRouter.cc
|
2021-04-29 10:13:34 +08:00
|
|
|
lib/src/TaskTimeoutFlag.cc
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/src/Utilities.cc
|
|
|
|
lib/src/WebSocketClientImpl.cc
|
|
|
|
lib/src/WebSocketConnectionImpl.cc
|
|
|
|
lib/src/WebsocketControllersRouter.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
if (NOT WIN32)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/SharedLibManager.cc)
|
|
|
|
else (NOT WIN32)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES} third_party/mman-win32/mman.c)
|
|
|
|
endif (NOT WIN32)
|
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
if (BUILD_POSTGRESQL)
|
2021-03-13 19:13:54 +08:00
|
|
|
# find postgres
|
|
|
|
find_package(pg)
|
|
|
|
if (pg_FOUND)
|
|
|
|
message(STATUS "libpq inc path:" ${PG_INCLUDE_DIRS})
|
|
|
|
message(STATUS "libpq lib:" ${PG_LIBRARIES})
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE pg_lib)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES}
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/src/postgresql_impl/PostgreSQLResultImpl.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
if (LIBPQ_BATCH_MODE)
|
|
|
|
try_compile(libpq_supports_batch ${CMAKE_BINARY_DIR}/cmaketest
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_SOURCE_DIR}/cmake/tests/test_libpq_batch_mode.cc
|
|
|
|
LINK_LIBRARIES ${PostgreSQL_LIBRARIES}
|
|
|
|
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PostgreSQL_INCLUDE_DIR}")
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (LIBPQ_BATCH_MODE)
|
|
|
|
if (libpq_supports_batch)
|
|
|
|
message(STATUS "The libpq supports batch mode")
|
|
|
|
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" ON)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES}
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/src/postgresql_impl/PgBatchConnection.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
else (libpq_supports_batch)
|
|
|
|
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" OFF)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES}
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/src/postgresql_impl/PgConnection.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (libpq_supports_batch)
|
|
|
|
endif (pg_FOUND)
|
2021-03-24 10:32:55 +08:00
|
|
|
endif (BUILD_POSTGRESQL)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
if (BUILD_MYSQL)
|
2021-03-13 19:13:54 +08:00
|
|
|
# Find mysql, only mariadb client liberary is supported
|
|
|
|
find_package(MySQL)
|
|
|
|
if (MySQL_FOUND)
|
|
|
|
message(STATUS "Ok! We find the mariadb!")
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE MySQL_lib)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES}
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/src/mysql_impl/MysqlConnection.cc
|
|
|
|
orm_lib/src/mysql_impl/MysqlResultImpl.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (MySQL_FOUND)
|
2021-03-24 10:32:55 +08:00
|
|
|
endif (BUILD_MYSQL)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
if (BUILD_SQLITE)
|
2021-03-13 19:13:54 +08:00
|
|
|
# Find sqlite3.
|
|
|
|
find_package(SQLite3)
|
|
|
|
if (SQLite3_FOUND)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE SQLite3_lib)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES}
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/src/sqlite3_impl/Sqlite3Connection.cc
|
|
|
|
orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (SQLite3_FOUND)
|
2021-03-24 10:32:55 +08:00
|
|
|
endif (BUILD_SQLITE)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
if (BUILD_REDIS)
|
|
|
|
find_package(Hiredis)
|
|
|
|
if (Hiredis_FOUND)
|
|
|
|
add_definitions(-DUSE_REDIS)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE Hiredis_lib)
|
|
|
|
set(DROGON_SOURCES
|
2021-03-24 10:32:55 +08:00
|
|
|
${DROGON_SOURCES}
|
|
|
|
nosql_lib/redis/src/RedisClientImpl.cc
|
|
|
|
nosql_lib/redis/src/RedisConnection.cc
|
|
|
|
nosql_lib/redis/src/RedisResult.cc
|
|
|
|
nosql_lib/redis/src/RedisClientLockFree.cc
|
|
|
|
nosql_lib/redis/src/RedisClientManager.cc
|
|
|
|
nosql_lib/redis/src/RedisTransactionImpl.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
endif (Hiredis_FOUND)
|
|
|
|
endif (BUILD_REDIS)
|
2018-04-27 14:38:27 +08:00
|
|
|
|
2021-04-09 10:17:28 +08:00
|
|
|
if (NOT Hiredis_FOUND)
|
|
|
|
set(DROGON_SOURCES
|
2021-05-17 21:45:18 +08:00
|
|
|
${DROGON_SOURCES}
|
|
|
|
lib/src/RedisClientSkipped.cc
|
|
|
|
lib/src/RedisResultSkipped.cc
|
|
|
|
lib/src/RedisClientManagerSkipped.cc)
|
2021-04-09 10:17:28 +08:00
|
|
|
endif (NOT Hiredis_FOUND)
|
|
|
|
|
|
|
|
if (BUILD_TESTING)
|
|
|
|
add_subdirectory(nosql_lib/redis/tests)
|
|
|
|
endif (BUILD_TESTING)
|
|
|
|
|
2021-03-24 10:32:55 +08:00
|
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB)
|
|
|
|
|
|
|
|
find_package(OpenSSL)
|
|
|
|
if (OpenSSL_FOUND)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
|
|
else (OpenSSL_FOUND)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/ssl_funcs/Md5.cc
|
|
|
|
lib/src/ssl_funcs/Sha1.cc)
|
|
|
|
endif (OpenSSL_FOUND)
|
|
|
|
|
2020-02-06 22:13:50 +08:00
|
|
|
execute_process(COMMAND "git" rev-parse HEAD
|
2021-03-24 10:32:55 +08:00
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
OUTPUT_VARIABLE GIT_SHA1
|
|
|
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
2020-02-06 22:13:50 +08:00
|
|
|
configure_file("${PROJECT_SOURCE_DIR}/cmake/templates/version.h.in"
|
2021-03-24 10:32:55 +08:00
|
|
|
"${PROJECT_SOURCE_DIR}/lib/inc/drogon/version.h" @ONLY)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
if (DROGON_CXX_STANDARD EQUAL 20)
|
|
|
|
option(USE_COROUTINE "Enable C++20 coroutine support" ON)
|
|
|
|
else (DROGON_CXX_STANDARD EQUAL 20)
|
|
|
|
option(USE_COROUTINE "Enable C++20 coroutine support" OFF)
|
|
|
|
endif (DROGON_CXX_STANDARD EQUAL 20)
|
|
|
|
|
|
|
|
if (BUILD_EXAMPLES)
|
|
|
|
add_subdirectory(examples)
|
|
|
|
endif (BUILD_EXAMPLES)
|
|
|
|
|
|
|
|
if (BUILD_CTL)
|
|
|
|
add_subdirectory(drogon_ctl)
|
|
|
|
endif (BUILD_CTL)
|
|
|
|
|
|
|
|
if (COZ_PROFILING)
|
|
|
|
find_package(coz-profiler REQUIRED)
|
|
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE -DCOZ_PROFILING=1)
|
|
|
|
# If linked will not need to be ran with `coz run --- [executable]` to run the
|
|
|
|
# profiler, but drogon_ctl currently won't build because it doesn't find debug
|
|
|
|
# information while trying to generate it's own sources
|
|
|
|
# target_link_libraries(${PROJECT_NAME} PUBLIC coz::coz)
|
|
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${COZ_INCLUDE_DIRS})
|
|
|
|
endif (COZ_PROFILING)
|
|
|
|
|
2021-04-09 10:17:28 +08:00
|
|
|
set(DROGON_SOURCES
|
2021-05-17 21:45:18 +08:00
|
|
|
${DROGON_SOURCES}
|
|
|
|
orm_lib/src/ArrayParser.cc
|
|
|
|
orm_lib/src/Criteria.cc
|
|
|
|
orm_lib/src/DbClient.cc
|
|
|
|
orm_lib/src/DbClientImpl.cc
|
|
|
|
orm_lib/src/DbClientLockFree.cc
|
|
|
|
orm_lib/src/DbConnection.cc
|
|
|
|
orm_lib/src/Exception.cc
|
|
|
|
orm_lib/src/Field.cc
|
|
|
|
orm_lib/src/Result.cc
|
|
|
|
orm_lib/src/Row.cc
|
|
|
|
orm_lib/src/SqlBinder.cc
|
|
|
|
orm_lib/src/TransactionImpl.cc
|
|
|
|
orm_lib/src/RestfulController.cc)
|
2021-04-09 10:17:28 +08:00
|
|
|
if (pg_FOUND OR MySQL_FOUND OR SQLite3_FOUND)
|
|
|
|
set(DROGON_SOURCES
|
2021-05-17 21:45:18 +08:00
|
|
|
${DROGON_SOURCES}
|
|
|
|
orm_lib/src/DbClientManager.cc)
|
2021-03-13 19:13:54 +08:00
|
|
|
else (pg_FOUND OR MySQL_FOUND OR SQLite3_FOUND)
|
|
|
|
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/DbClientManagerSkipped.cc)
|
|
|
|
endif (pg_FOUND OR MySQL_FOUND OR SQLite3_FOUND)
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
target_sources(${PROJECT_NAME} PRIVATE ${DROGON_SOURCES})
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2019-11-30 08:35:40 +08:00
|
|
|
set_target_properties(${PROJECT_NAME}
|
2021-03-24 10:32:55 +08:00
|
|
|
PROPERTIES CXX_STANDARD ${DROGON_CXX_STANDARD})
|
2019-08-31 08:27:57 +08:00
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON)
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
|
2019-10-04 22:24:34 +08:00
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES EXPORT_NAME Drogon)
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2021-03-13 19:13:54 +08:00
|
|
|
if (pg_FOUND OR MySQL_FOUND OR SQLite3_FOUND)
|
|
|
|
if (pg_FOUND)
|
|
|
|
option(USE_POSTGRESQL "Enable PostgreSQL" ON)
|
|
|
|
else (pg_FOUND)
|
|
|
|
option(USE_POSTGRESQL "Disable PostgreSQL" OFF)
|
|
|
|
endif (pg_FOUND)
|
|
|
|
|
|
|
|
if (MySQL_FOUND)
|
|
|
|
option(USE_MYSQL "Enable Mysql" ON)
|
|
|
|
else (MySQL_FOUND)
|
|
|
|
option(USE_MYSQL "DisableMysql" OFF)
|
|
|
|
endif (MySQL_FOUND)
|
|
|
|
|
|
|
|
if (SQLite3_FOUND)
|
|
|
|
option(USE_SQLITE3 "Enable Sqlite3" ON)
|
|
|
|
else (SQLite3_FOUND)
|
|
|
|
option(USE_SQLITE3 "Disable Sqlite3" OFF)
|
|
|
|
endif (SQLite3_FOUND)
|
|
|
|
endif (pg_FOUND OR MySQL_FOUND OR SQLite3_FOUND)
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2019-08-08 15:17:09 +08:00
|
|
|
set(COMPILER_COMMAND ${CMAKE_CXX_COMPILER})
|
|
|
|
set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID})
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2021-03-13 19:13:54 +08:00
|
|
|
if (CMAKE_BUILD_TYPE)
|
|
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
|
|
|
|
if (_type STREQUAL release)
|
|
|
|
set(COMPILATION_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} -std=c++")
|
|
|
|
elseif (_type STREQUAL debug)
|
|
|
|
set(COMPILATION_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} -std=c++")
|
|
|
|
else ()
|
|
|
|
set(COMPILATION_FLAGS "-std=c++")
|
|
|
|
endif ()
|
|
|
|
else (CMAKE_BUILD_TYPE)
|
2019-08-08 15:17:09 +08:00
|
|
|
set(COMPILATION_FLAGS "-std=c++")
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (CMAKE_BUILD_TYPE)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2020-03-21 12:41:15 +08:00
|
|
|
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW
|
2021-03-24 10:32:55 +08:00
|
|
|
"${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
|
2019-08-31 08:27:57 +08:00
|
|
|
list(REMOVE_DUPLICATES INCLUDE_DIRS_FOR_DYNAMIC_VIEW)
|
2019-08-08 15:17:09 +08:00
|
|
|
set(INS_STRING "")
|
2021-03-13 19:13:54 +08:00
|
|
|
foreach (loop_var ${INCLUDE_DIRS_FOR_DYNAMIC_VIEW})
|
|
|
|
set(INS_STRING "${INS_STRING} -I${loop_var}")
|
|
|
|
endforeach (loop_var)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
set(INCLUDING_DIRS ${INS_STRING})
|
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/templates/config.h.in
|
2021-03-24 10:32:55 +08:00
|
|
|
${PROJECT_BINARY_DIR}/drogon/config.h @ONLY)
|
2021-03-13 19:13:54 +08:00
|
|
|
|
|
|
|
if (BUILD_TESTING)
|
2021-05-27 20:09:57 +08:00
|
|
|
message(STATUS "Building tests")
|
|
|
|
enable_testing()
|
2021-03-13 19:13:54 +08:00
|
|
|
add_subdirectory(lib/tests)
|
|
|
|
if (pg_FOUND)
|
|
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/postgresql_impl/test)
|
|
|
|
endif (pg_FOUND)
|
|
|
|
if (MySQL_FOUND)
|
|
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/mysql_impl/test)
|
|
|
|
endif (MySQL_FOUND)
|
|
|
|
if (SQLite3_FOUND)
|
|
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/sqlite3_impl/test)
|
|
|
|
endif (SQLite3_FOUND)
|
2021-04-09 10:17:28 +08:00
|
|
|
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/tests)
|
2021-03-13 19:13:54 +08:00
|
|
|
endif (BUILD_TESTING)
|
2018-05-04 09:51:12 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
# Installation
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2019-09-26 19:33:58 +08:00
|
|
|
install(TARGETS ${PROJECT_NAME}
|
2021-03-24 10:32:55 +08:00
|
|
|
EXPORT DrogonTargets
|
2021-04-09 10:17:28 +08:00
|
|
|
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin
|
2021-03-24 10:32:55 +08:00
|
|
|
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib
|
|
|
|
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
set(DROGON_HEADERS
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/inc/drogon/Attribute.h
|
|
|
|
lib/inc/drogon/CacheMap.h
|
|
|
|
lib/inc/drogon/Cookie.h
|
|
|
|
lib/inc/drogon/DrClassMap.h
|
|
|
|
lib/inc/drogon/DrObject.h
|
|
|
|
lib/inc/drogon/DrTemplate.h
|
|
|
|
lib/inc/drogon/DrTemplateBase.h
|
|
|
|
lib/inc/drogon/HttpAppFramework.h
|
|
|
|
lib/inc/drogon/HttpBinder.h
|
|
|
|
lib/inc/drogon/HttpClient.h
|
|
|
|
lib/inc/drogon/HttpController.h
|
|
|
|
lib/inc/drogon/HttpFilter.h
|
|
|
|
lib/inc/drogon/HttpRequest.h
|
|
|
|
lib/inc/drogon/HttpResponse.h
|
|
|
|
lib/inc/drogon/HttpSimpleController.h
|
|
|
|
lib/inc/drogon/HttpTypes.h
|
|
|
|
lib/inc/drogon/HttpViewData.h
|
|
|
|
lib/inc/drogon/IntranetIpFilter.h
|
|
|
|
lib/inc/drogon/IOThreadStorage.h
|
|
|
|
lib/inc/drogon/LocalHostFilter.h
|
|
|
|
lib/inc/drogon/MultiPart.h
|
|
|
|
lib/inc/drogon/NotFound.h
|
|
|
|
lib/inc/drogon/Session.h
|
|
|
|
lib/inc/drogon/UploadFile.h
|
|
|
|
lib/inc/drogon/WebSocketClient.h
|
|
|
|
lib/inc/drogon/WebSocketConnection.h
|
|
|
|
lib/inc/drogon/WebSocketController.h
|
|
|
|
lib/inc/drogon/drogon.h
|
|
|
|
lib/inc/drogon/version.h
|
|
|
|
lib/inc/drogon/drogon_callbacks.h
|
2021-04-09 10:17:28 +08:00
|
|
|
lib/inc/drogon/PubSubService.h
|
2021-05-27 20:09:57 +08:00
|
|
|
lib/inc/drogon/drogon_test.h
|
2021-04-09 10:17:28 +08:00
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/exports/drogon/exports.h)
|
2019-08-08 15:17:09 +08:00
|
|
|
install(FILES ${DROGON_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon)
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
set(ORM_HEADERS
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/inc/drogon/orm/ArrayParser.h
|
|
|
|
orm_lib/inc/drogon/orm/Criteria.h
|
|
|
|
orm_lib/inc/drogon/orm/DbClient.h
|
|
|
|
orm_lib/inc/drogon/orm/DbTypes.h
|
|
|
|
orm_lib/inc/drogon/orm/Exception.h
|
|
|
|
orm_lib/inc/drogon/orm/Field.h
|
|
|
|
orm_lib/inc/drogon/orm/FunctionTraits.h
|
|
|
|
orm_lib/inc/drogon/orm/Mapper.h
|
2021-04-16 15:48:19 +08:00
|
|
|
orm_lib/inc/drogon/orm/CoroMapper.h
|
2021-03-24 10:32:55 +08:00
|
|
|
orm_lib/inc/drogon/orm/Result.h
|
|
|
|
orm_lib/inc/drogon/orm/ResultIterator.h
|
|
|
|
orm_lib/inc/drogon/orm/Row.h
|
|
|
|
orm_lib/inc/drogon/orm/RowIterator.h
|
|
|
|
orm_lib/inc/drogon/orm/SqlBinder.h
|
|
|
|
orm_lib/inc/drogon/orm/RestfulController.h)
|
2019-08-08 15:17:09 +08:00
|
|
|
install(FILES ${ORM_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/orm)
|
2019-07-26 22:22:12 +08:00
|
|
|
|
2021-03-13 19:13:54 +08:00
|
|
|
set(NOSQL_HEADERS nosql_lib/redis/inc/drogon/nosql/RedisClient.h
|
2021-03-24 10:32:55 +08:00
|
|
|
nosql_lib/redis/inc/drogon/nosql/RedisResult.h
|
|
|
|
nosql_lib/redis/inc/drogon/nosql/RedisException.h)
|
2021-03-13 19:13:54 +08:00
|
|
|
install(FILES ${NOSQL_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/nosql)
|
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
set(DROGON_UTIL_HEADERS
|
2021-03-24 10:32:55 +08:00
|
|
|
lib/inc/drogon/utils/FunctionTraits.h
|
|
|
|
lib/inc/drogon/utils/Utilities.h
|
|
|
|
lib/inc/drogon/utils/any.h
|
|
|
|
lib/inc/drogon/utils/string_view.h
|
|
|
|
lib/inc/drogon/utils/optional.h
|
|
|
|
lib/inc/drogon/utils/coroutine.h
|
|
|
|
lib/inc/drogon/utils/HttpConstraint.h
|
|
|
|
lib/inc/drogon/utils/OStringStream.h)
|
2019-08-08 15:17:09 +08:00
|
|
|
install(FILES ${DROGON_UTIL_HEADERS}
|
2021-03-24 10:32:55 +08:00
|
|
|
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/utils)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2019-11-30 08:35:40 +08:00
|
|
|
set(DROGON_PLUGIN_HEADERS lib/inc/drogon/plugins/Plugin.h
|
2021-05-17 21:45:18 +08:00
|
|
|
lib/inc/drogon/plugins/SecureSSLRedirector.h
|
|
|
|
lib/inc/drogon/plugins/AccessLogger.h)
|
2019-08-08 15:17:09 +08:00
|
|
|
install(FILES ${DROGON_PLUGIN_HEADERS}
|
2021-03-24 10:32:55 +08:00
|
|
|
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/plugins)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
source_group("Public API"
|
2021-03-24 10:32:55 +08:00
|
|
|
FILES
|
|
|
|
${DROGON_HEADERS}
|
|
|
|
${ORM_HEADERS}
|
|
|
|
${DROGON_UTIL_HEADERS}
|
|
|
|
${DROGON_PLUGIN_HEADERS}
|
|
|
|
${NOSQL_HEADERS})
|
2019-08-08 15:17:09 +08:00
|
|
|
|
2019-08-31 08:27:57 +08:00
|
|
|
# Export the package for use from the build-tree (this registers the build-tree
|
|
|
|
# with a global cmake-registry) export(PACKAGE Drogon)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
# ... for the install tree
|
2019-08-31 08:27:57 +08:00
|
|
|
configure_package_config_file(
|
2021-03-24 10:32:55 +08:00
|
|
|
cmake/templates/DrogonConfig.cmake.in
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake
|
|
|
|
INSTALL_DESTINATION
|
|
|
|
${INSTALL_DROGON_CMAKE_DIR})
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
# version
|
2019-08-31 08:27:57 +08:00
|
|
|
write_basic_package_version_file(
|
2021-03-24 10:32:55 +08:00
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake
|
|
|
|
VERSION ${DROGON_VERSION}
|
|
|
|
COMPATIBILITY SameMajorVersion)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
# Install the DrogonConfig.cmake and DrogonConfigVersion.cmake
|
2021-03-24 10:32:55 +08:00
|
|
|
install(FILES
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindUUID.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindJsoncpp.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindSQLite3.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindMySQL.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/Findpg.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindBrotli.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/Findcoz-profiler.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindHiredis.cmake"
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/DrogonUtilities.cmake"
|
2021-05-27 20:09:57 +08:00
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/ParseAndAddDrogonTests.cmake"
|
2021-03-24 10:32:55 +08:00
|
|
|
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
|
|
|
COMPONENT dev)
|
2019-08-08 15:17:09 +08:00
|
|
|
|
|
|
|
# Install the export set for use with the install-tree
|
2019-08-31 08:27:57 +08:00
|
|
|
install(EXPORT DrogonTargets
|
2021-03-24 10:32:55 +08:00
|
|
|
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
|
|
|
NAMESPACE Drogon::
|
|
|
|
COMPONENT dev)
|
2021-05-27 20:09:57 +08:00
|
|
|
|