mirror of
https://github.com/drogonframework/drogon.git
synced 2025-09-16 00:00:48 -04:00
Modify the CMakeLists to modern cmake style (#229)
This commit is contained in:
parent
a0b68fb3c9
commit
aa26e9a903
517
CMakeLists.txt
517
CMakeLists.txt
@ -1,28 +1,36 @@
|
||||
cmake_minimum_required (VERSION 3.2)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
project (DROGON CXX)
|
||||
project(drogon CXX)
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC)
|
||||
|
||||
set(DROGON_MAJOR_VERSION 1)
|
||||
set(DROGON_MINOR_VERSION 0)
|
||||
set(DROGON_PATCH_VERSION 0)
|
||||
set(DROGON_VERSION
|
||||
${DROGON_MAJOR_VERSION}.${DROGON_MINOR_VERSION}.${DROGON_PATCH_VERSION})
|
||||
${DROGON_MAJOR_VERSION}.${DROGON_MINOR_VERSION}.${DROGON_PATCH_VERSION})
|
||||
set(PRE_RELEASE_STRING "beta6")
|
||||
|
||||
# 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")
|
||||
set(INSTALL_INCLUDE_DIR include CACHE PATH
|
||||
"Installation directory for header files")
|
||||
set(INSTALL_INCLUDE_DIR
|
||||
include
|
||||
CACHE PATH "Installation directory for header files")
|
||||
if(WIN32 AND NOT CYGWIN)
|
||||
set(DEF_INSTALL_DROGON_CMAKE_DIR cmake)
|
||||
else()
|
||||
set(DEF_INSTALL_DROGON_CMAKE_DIR lib/cmake/Drogon)
|
||||
endif()
|
||||
set(INSTALL_DROGON_CMAKE_DIR ${DEF_INSTALL_DROGON_CMAKE_DIR} CACHE PATH
|
||||
"Installation directory for cmake files")
|
||||
set(INSTALL_DROGON_CMAKE_DIR
|
||||
${DEF_INSTALL_DROGON_CMAKE_DIR}
|
||||
CACHE PATH "Installation directory for cmake files")
|
||||
# Make relative paths absolute (needed later on)
|
||||
foreach(p LIB BIN INCLUDE DROGON_CMAKE)
|
||||
foreach(p
|
||||
LIB
|
||||
BIN
|
||||
INCLUDE
|
||||
DROGON_CMAKE)
|
||||
set(var INSTALL_${p}_DIR)
|
||||
if(NOT IS_ABSOLUTE "${${var}}")
|
||||
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
||||
@ -31,193 +39,210 @@ endforeach()
|
||||
|
||||
include(CheckIncludeFileCXX)
|
||||
|
||||
CHECK_INCLUDE_FILE_CXX(any HAS_ANY)
|
||||
CHECK_INCLUDE_FILE_CXX(string_view HAS_STRING_VIEW)
|
||||
check_include_file_cxx(any HAS_ANY)
|
||||
check_include_file_cxx(string_view HAS_STRING_VIEW)
|
||||
if(HAS_ANY AND HAS_STRING_VIEW)
|
||||
set(DROGON_CXX_STANDARD 17)
|
||||
set(DROGON_CXX_STANDARD 17)
|
||||
else()
|
||||
set(DROGON_CXX_STANDARD 14)
|
||||
set(DROGON_CXX_STANDARD 14)
|
||||
endif()
|
||||
|
||||
target_include_directories(
|
||||
${PROJECT_NAME}
|
||||
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/inc>
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/orm_lib/inc>
|
||||
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>)
|
||||
|
||||
# set the include list for dynamic view compiling
|
||||
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW
|
||||
${PROJECT_SOURCE_DIR}/lib/inc
|
||||
${PROJECT_SOURCE_DIR}/orm_lib/inc
|
||||
${PROJECT_SOURCE_DIR}/trantor
|
||||
${INSTALL_INCLUDE_DIR})
|
||||
add_subdirectory(trantor)
|
||||
set(Trantor_DIR ${PROJECT_BINARY_DIR}/trantor)
|
||||
find_package(Trantor CONFIG REQUIRED NO_DEFAULT_PATH)
|
||||
message(STATUS "trantor inc:" ${TRANTOR_INCLUDE_DIRS})
|
||||
include_directories(${TRANTOR_INCLUDE_DIRS})
|
||||
link_libraries(${TRANTOR_LIBRARIES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC trantor)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE dl)
|
||||
|
||||
if(DROGON_CXX_STANDARD LESS 17)
|
||||
#With C++14, use boost to support any and string_view
|
||||
message(STATUS "use c++14")
|
||||
find_package(Boost 1.61.0 REQUIRED)
|
||||
include_directories(${Boost_INCLUDE_DIRS})
|
||||
# With C++14, use boost to support any and string_view
|
||||
message(STATUS "use c++14")
|
||||
find_package(Boost 1.61.0 REQUIRED)
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${Boost_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW ${Boost_INCLUDE_DIRS})
|
||||
else()
|
||||
message(STATUS "use c++17")
|
||||
message(STATUS "use c++17")
|
||||
endif()
|
||||
|
||||
include_directories(${PROJECT_SOURCE_DIR}/lib/inc
|
||||
${PROJECT_SOURCE_DIR}/orm_lib/inc
|
||||
${PROJECT_BINARY_DIR})
|
||||
|
||||
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules/)
|
||||
|
||||
#jsoncpp
|
||||
find_package (Jsoncpp REQUIRED)
|
||||
include_directories(${JSONCPP_INCLUDE_DIRS})
|
||||
link_libraries(${JSONCPP_LIBRARIES})
|
||||
# jsoncpp
|
||||
find_package(Jsoncpp REQUIRED)
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${JSONCPP_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${JSONCPP_LIBRARIES})
|
||||
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW ${JSONCPP_INCLUDE_DIRS})
|
||||
message(STATUS "jsoncpp inc path:" ${JSONCPP_INCLUDE_DIRS})
|
||||
|
||||
#message(STATUS ${JSONCPP_LIBRARIES})
|
||||
# message(STATUS ${JSONCPP_LIBRARIES})
|
||||
if(NOT EXISTS ${JSONCPP_INCLUDE_DIRS}/json/version.h)
|
||||
message(FATAL_ERROR "Error: jsoncpp lib is too old.....stop")
|
||||
message(FATAL_ERROR "Error: jsoncpp lib is too old.....stop")
|
||||
endif()
|
||||
|
||||
exec_program(cat ARGS "${JSONCPP_INCLUDE_DIRS}/json/version.h |grep JSONCPP_VERSION_STRING|sed s'/.*define/define/'|awk '{printf $3}'|sed s'/\"//g'" OUTPUT_VARIABLE jsoncpp_ver)
|
||||
exec_program(
|
||||
cat
|
||||
ARGS
|
||||
"${JSONCPP_INCLUDE_DIRS}/json/version.h |grep JSONCPP_VERSION_STRING|sed s'/.*define/define/'|awk '{printf $3}'|sed s'/\"//g'"
|
||||
OUTPUT_VARIABLE
|
||||
jsoncpp_ver)
|
||||
message(STATUS "jsoncpp verson:" ${jsoncpp_ver})
|
||||
if(jsoncpp_ver LESS 1.7)
|
||||
message(FATAL_ERROR "jsoncpp lib is too old,please get new version from https://github.com/open-source-parsers/jsoncpp")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"jsoncpp lib is too old,please get new version from https://github.com/open-source-parsers/jsoncpp"
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package (UUID REQUIRED)
|
||||
include_directories(${UUID_INCLUDE_DIR})
|
||||
link_libraries(${UUID_LIBRARIES})
|
||||
find_package(UUID REQUIRED)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${UUID_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${UUID_LIBRARIES})
|
||||
|
||||
find_package(ZLIB REQUIRED)
|
||||
include_directories(${ZLIB_INCLUDE_DIR})
|
||||
link_libraries(${ZLIB_LIBRARIES})
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${ZLIB_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${ZLIB_LIBRARIES})
|
||||
|
||||
set(DROGON_SOURCES 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
|
||||
lib/src/HttpClientImpl.cc
|
||||
lib/src/HttpControllersRouter.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/SessionManager.cc
|
||||
lib/src/SharedLibManager.cc
|
||||
lib/src/StaticFileRouter.cc
|
||||
lib/src/Utilities.cc
|
||||
lib/src/WebSocketClientImpl.cc
|
||||
lib/src/WebSocketConnectionImpl.cc
|
||||
lib/src/WebsocketControllersRouter.cc)
|
||||
set(DROGON_SOURCES
|
||||
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
|
||||
lib/src/HttpClientImpl.cc
|
||||
lib/src/HttpControllersRouter.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/SessionManager.cc
|
||||
lib/src/SharedLibManager.cc
|
||||
lib/src/StaticFileRouter.cc
|
||||
lib/src/Utilities.cc
|
||||
lib/src/WebSocketClientImpl.cc
|
||||
lib/src/WebSocketConnectionImpl.cc
|
||||
lib/src/WebsocketControllersRouter.cc)
|
||||
|
||||
find_package (OpenSSL)
|
||||
find_package(OpenSSL)
|
||||
if(OpenSSL_FOUND)
|
||||
include_directories(${OPENSSL_INCLUDE_DIR})
|
||||
link_libraries(${OPENSSL_LIBRARIES})
|
||||
message(STATUS "openssl inc path:" ${OPENSSL_INCLUDE_DIR})
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES})
|
||||
else()
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/ssl_funcs/Md5.cc
|
||||
lib/src/ssl_funcs/Sha1.cc)
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/ssl_funcs/Md5.cc
|
||||
lib/src/ssl_funcs/Sha1.cc)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
|
||||
if(NOT BUILD_ORM)
|
||||
set(BUILD_ORM TRUE CACHE BOOL INTERNAL)
|
||||
set(BUILD_ORM TRUE CACHE BOOL INTERNAL)
|
||||
endif()
|
||||
|
||||
if(NOT LIBPQ_BATCH_MODE)
|
||||
set(LIBPQ_BATCH_MODE TRUE CACHE BOOL INTERNAL)
|
||||
set(LIBPQ_BATCH_MODE TRUE CACHE BOOL INTERNAL)
|
||||
endif()
|
||||
|
||||
if(BUILD_ORM)
|
||||
|
||||
#find postgres
|
||||
find_package(PostgreSQL)
|
||||
if(PostgreSQL_FOUND)
|
||||
message(STATUS "libpq inc path:" ${PostgreSQL_INCLUDE_DIR})
|
||||
message(STATUS "libpq lib:" ${PostgreSQL_LIBRARIES})
|
||||
include_directories(${PostgreSQL_INCLUDE_DIR})
|
||||
link_libraries(${PostgreSQL_LIBRARIES})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/postgresql_impl/PostgreSQLResultImpl.cc)
|
||||
if(LIBPQ_BATCH_MODE)
|
||||
try_compile(libpq_supports_batch
|
||||
${CMAKE_BINARY_DIR}/cmaketest
|
||||
${PROJECT_SOURCE_DIR}/cmake/tests/test_libpq_batch_mode.cc
|
||||
LINK_LIBRARIES ${PostgreSQL_LIBRARIES}
|
||||
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PostgreSQL_INCLUDE_DIR}")
|
||||
endif()
|
||||
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}
|
||||
orm_lib/src/postgresql_impl/PgBatchConnection.cc)
|
||||
else()
|
||||
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" OFF)
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/postgresql_impl/PgConnection.cc)
|
||||
endif()
|
||||
# find postgres
|
||||
find_package(PostgreSQL)
|
||||
if(PostgreSQL_FOUND)
|
||||
message(STATUS "libpq inc path:" ${PostgreSQL_INCLUDE_DIR})
|
||||
message(STATUS "libpq lib:" ${PostgreSQL_LIBRARIES})
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PRIVATE ${PostgreSQL_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${PostgreSQL_LIBRARIES})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/postgresql_impl/PostgreSQLResultImpl.cc)
|
||||
if(LIBPQ_BATCH_MODE)
|
||||
try_compile(libpq_supports_batch ${CMAKE_BINARY_DIR}/cmaketest
|
||||
${PROJECT_SOURCE_DIR}/cmake/tests/test_libpq_batch_mode.cc
|
||||
LINK_LIBRARIES ${PostgreSQL_LIBRARIES}
|
||||
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PostgreSQL_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
#Find mysql, only mariadb client liberary is supported
|
||||
find_package(MySQL)
|
||||
if(MYSQL_FOUND)
|
||||
message(STATUS "inc:" ${MYSQL_INCLUDE_DIR})
|
||||
message(STATUS "libs:" ${MYSQL_CLIENT_LIBS})
|
||||
message(STATUS "version:" ${MYSQL_VERSION_STRING})
|
||||
if(MYSQL_VERSION_STRING STREQUAL "")
|
||||
set(MYSQL_FOUND false)
|
||||
message(STATUS "The mysql in your system is not the mariadb, so we can't use it in drogon")
|
||||
else()
|
||||
message(STATUS "Ok! We find the mariadb!")
|
||||
include_directories(${MYSQL_INCLUDE_DIR})
|
||||
link_libraries(${MYSQL_CLIENT_LIBS})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/mysql_impl/MysqlConnection.cc
|
||||
orm_lib/src/mysql_impl/MysqlResultImpl.cc)
|
||||
endif()
|
||||
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}
|
||||
orm_lib/src/postgresql_impl/PgBatchConnection.cc)
|
||||
else()
|
||||
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" OFF)
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/postgresql_impl/PgConnection.cc)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#Find sqlite3.
|
||||
find_package (SQLite3)
|
||||
if (SQLITE3_FOUND)
|
||||
message(STATUS "SQLite3 inc:" ${SQLITE3_INCLUDE_DIRS})
|
||||
include_directories(${SQLITE3_INCLUDE_DIRS})
|
||||
link_libraries(${SQLITE3_LIBRARIES})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/sqlite3_impl/Sqlite3Connection.cc
|
||||
orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.cc)
|
||||
# Find mysql, only mariadb client liberary is supported
|
||||
find_package(MySQL)
|
||||
if(MYSQL_FOUND)
|
||||
message(STATUS "inc:" ${MYSQL_INCLUDE_DIR})
|
||||
message(STATUS "libs:" ${MYSQL_CLIENT_LIBS})
|
||||
message(STATUS "version:" ${MYSQL_VERSION_STRING})
|
||||
if(MYSQL_VERSION_STRING STREQUAL "")
|
||||
set(MYSQL_FOUND false)
|
||||
message(
|
||||
STATUS
|
||||
"The mysql in your system is not the mariadb, so we can't use it in drogon"
|
||||
)
|
||||
else()
|
||||
message(STATUS "Ok! We find the mariadb!")
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${MYSQL_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${MYSQL_CLIENT_LIBS})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/mysql_impl/MysqlConnection.cc
|
||||
orm_lib/src/mysql_impl/MysqlResultImpl.cc)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Find sqlite3.
|
||||
find_package(SQLite3)
|
||||
if(SQLITE3_FOUND)
|
||||
message(STATUS "SQLite3 inc:" ${SQLITE3_INCLUDE_DIRS})
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${SQLITE3_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${SQLITE3_LIBRARIES})
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES}
|
||||
orm_lib/src/sqlite3_impl/Sqlite3Connection.cc
|
||||
orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.cc)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_custom_target(makeVersion)
|
||||
add_custom_command(TARGET makeVersion
|
||||
COMMAND ${PROJECT_SOURCE_DIR}/get_version.sh
|
||||
ARGS ${PROJECT_SOURCE_DIR}/lib/inc/drogon/version.h
|
||||
${DROGON_MAJOR_VERSION}
|
||||
${DROGON_MINOR_VERSION}
|
||||
${DROGON_PATCH_VERSION}
|
||||
${PRE_RELEASE_STRING}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
VERBATIM )
|
||||
COMMAND ${PROJECT_SOURCE_DIR}/get_version.sh
|
||||
ARGS
|
||||
${PROJECT_SOURCE_DIR}/lib/inc/drogon/version.h
|
||||
${DROGON_MAJOR_VERSION}
|
||||
${DROGON_MINOR_VERSION}
|
||||
${DROGON_PATCH_VERSION}
|
||||
${PRE_RELEASE_STRING}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
VERBATIM)
|
||||
|
||||
if(NOT BUILD_EXAMPLES)
|
||||
set(BUILD_EXAMPLES TRUE CACHE BOOL INTERNAL)
|
||||
endif()
|
||||
|
||||
if(BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_CTL)
|
||||
@ -225,105 +250,105 @@ if(NOT BUILD_CTL)
|
||||
endif()
|
||||
|
||||
if(BUILD_CTL)
|
||||
add_subdirectory(drogon_ctl)
|
||||
add_subdirectory(drogon_ctl)
|
||||
endif()
|
||||
|
||||
if(PostgreSQL_FOUND OR MYSQL_FOUND OR SQLITE3_FOUND)
|
||||
set(DROGON_SOURCES ${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/DbClientManager.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)
|
||||
set(DROGON_SOURCES
|
||||
${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/DbClientManager.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)
|
||||
else()
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/DbClientManagerSkipped.cc)
|
||||
set(DROGON_SOURCES ${DROGON_SOURCES} lib/src/DbClientManagerSkipped.cc)
|
||||
endif()
|
||||
|
||||
add_library(drogon STATIC ${DROGON_SOURCES})
|
||||
target_sources(${PROJECT_NAME} PRIVATE ${DROGON_SOURCES})
|
||||
|
||||
set_property(TARGET drogon PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET drogon PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET drogon PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
|
||||
|
||||
add_dependencies(drogon makeVersion)
|
||||
|
||||
if(PostgreSQL_FOUND OR MYSQL_FOUND OR SQLITE3_FOUND)
|
||||
if(PostgreSQL_FOUND)
|
||||
OPTION(USE_POSTGRESQL "Enable PostgreSQL" ON)
|
||||
else()
|
||||
OPTION(USE_POSTGRESQL "Disable PostgreSQL" OFF)
|
||||
endif()
|
||||
if(PostgreSQL_FOUND)
|
||||
option(USE_POSTGRESQL "Enable PostgreSQL" ON)
|
||||
else()
|
||||
option(USE_POSTGRESQL "Disable PostgreSQL" OFF)
|
||||
endif()
|
||||
|
||||
if(MYSQL_FOUND)
|
||||
OPTION(USE_MYSQL "Enable Mysql" ON)
|
||||
else()
|
||||
OPTION(USE_MYSQL "DisableMysql" OFF)
|
||||
endif()
|
||||
if(MYSQL_FOUND)
|
||||
option(USE_MYSQL "Enable Mysql" ON)
|
||||
else()
|
||||
option(USE_MYSQL "DisableMysql" OFF)
|
||||
endif()
|
||||
|
||||
if(SQLITE3_FOUND)
|
||||
OPTION(USE_SQLITE3 "Enable Sqlite3" ON)
|
||||
else()
|
||||
OPTION(USE_SQLITE3 "Disable Sqlite3" OFF)
|
||||
endif()
|
||||
if(SQLITE3_FOUND)
|
||||
option(USE_SQLITE3 "Enable Sqlite3" ON)
|
||||
else()
|
||||
option(USE_SQLITE3 "Disable Sqlite3" OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(COMPILER_COMMAND ${CMAKE_CXX_COMPILER})
|
||||
set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID})
|
||||
|
||||
|
||||
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()
|
||||
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()
|
||||
set(COMPILATION_FLAGS "-std=c++")
|
||||
endif()
|
||||
|
||||
get_target_property(INS drogon INCLUDE_DIRECTORIES)
|
||||
list(APPEND INS "${INSTALL_INCLUDE_DIR}")
|
||||
list(REMOVE_DUPLICATES INS)
|
||||
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW "${INSTALL_INCLUDE_DIR}")
|
||||
list(REMOVE_DUPLICATES INCLUDE_DIRS_FOR_DYNAMIC_VIEW)
|
||||
set(INS_STRING "")
|
||||
foreach(loop_var ${INS})
|
||||
set(INS_STRING "${INS_STRING} -I${loop_var}")
|
||||
foreach(loop_var ${INCLUDE_DIRS_FOR_DYNAMIC_VIEW})
|
||||
set(INS_STRING "${INS_STRING} -I${loop_var}")
|
||||
endforeach(loop_var)
|
||||
|
||||
set(INCLUDING_DIRS ${INS_STRING})
|
||||
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/templates/config.h.in
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/templates/config.h.in
|
||||
${PROJECT_BINARY_DIR}/drogon/config.h @ONLY)
|
||||
|
||||
if (MAKETEST STREQUAL YES)
|
||||
add_subdirectory(lib/tests)
|
||||
if(PostgreSQL_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/postgresql_impl/test)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/tests)
|
||||
endif()
|
||||
if(MYSQL_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/mysql_impl/test)
|
||||
endif()
|
||||
if(SQLITE3_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/sqlite3_impl/test)
|
||||
endif()
|
||||
endif ()
|
||||
if(MAKETEST STREQUAL YES)
|
||||
add_subdirectory(lib/tests)
|
||||
if(PostgreSQL_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/postgresql_impl/test)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/tests)
|
||||
endif()
|
||||
if(MYSQL_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/mysql_impl/test)
|
||||
endif()
|
||||
if(SQLITE3_FOUND)
|
||||
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/sqlite3_impl/test)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#Installation
|
||||
# Installation
|
||||
|
||||
install(TARGETS drogon EXPORT DrogonTargets
|
||||
install(TARGETS drogon
|
||||
EXPORT DrogonTargets
|
||||
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib)
|
||||
|
||||
set(DROGON_HEADERS
|
||||
set(DROGON_HEADERS
|
||||
lib/inc/drogon/CacheMap.h
|
||||
lib/inc/drogon/Cookie.h
|
||||
lib/inc/drogon/DrClassMap.h
|
||||
@ -354,7 +379,7 @@ set(DROGON_HEADERS
|
||||
lib/inc/drogon/drogon_callbacks.h)
|
||||
install(FILES ${DROGON_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon)
|
||||
|
||||
set(ORM_HEADERS
|
||||
set(ORM_HEADERS
|
||||
orm_lib/inc/drogon/orm/ArrayParser.h
|
||||
orm_lib/inc/drogon/orm/Criteria.h
|
||||
orm_lib/inc/drogon/orm/DbClient.h
|
||||
@ -369,7 +394,7 @@ set(ORM_HEADERS
|
||||
orm_lib/inc/drogon/orm/SqlBinder.h)
|
||||
install(FILES ${ORM_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/orm)
|
||||
|
||||
set(DROGON_UTIL_HEADERS
|
||||
set(DROGON_UTIL_HEADERS
|
||||
lib/inc/drogon/utils/ClassTraits.h
|
||||
lib/inc/drogon/utils/FunctionTraits.h
|
||||
lib/inc/drogon/utils/Utilities.h
|
||||
@ -383,58 +408,38 @@ set(DROGON_PLUGIN_HEADERS lib/inc/drogon/plugins/Plugin.h)
|
||||
install(FILES ${DROGON_PLUGIN_HEADERS}
|
||||
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/plugins)
|
||||
|
||||
source_group( "Public API" FILES ${DROGON_HEADERS}
|
||||
${ORM_HEADERS}
|
||||
${DROGON_UTIL_HEADERS}
|
||||
${DROGON_PLUGIN_HEADERS})
|
||||
source_group("Public API"
|
||||
FILES
|
||||
${DROGON_HEADERS}
|
||||
${ORM_HEADERS}
|
||||
${DROGON_UTIL_HEADERS}
|
||||
${DROGON_PLUGIN_HEADERS})
|
||||
|
||||
|
||||
|
||||
# Add all targets to the build-tree export set
|
||||
export(TARGETS drogon
|
||||
FILE "${PROJECT_BINARY_DIR}/DrogonTargets.cmake")
|
||||
|
||||
# Export the package for use from the build-tree
|
||||
# (this registers the build-tree with a global cmake-registry)
|
||||
# export(PACKAGE Drogon)
|
||||
# Export the package for use from the build-tree (this registers the build-tree
|
||||
# with a global cmake-registry) export(PACKAGE Drogon)
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
# ... for the build tree(locally included)
|
||||
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/lib/inc"
|
||||
"${PROJECT_SOURCE_DIR}/orm_lib/inc"
|
||||
"${PROJECT_SOURCE_DIR}/trantor"
|
||||
"${JSONCPP_INCLUDE_DIRS}")
|
||||
set(TRANTOR_CMAKE_DIR "${CMAKE_CURRENT_BINARY_DIR}/trantor")
|
||||
configure_package_config_file(cmake/templates/DrogonConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DrogonConfig.cmake
|
||||
INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
|
||||
PATH_VARS CONF_INCLUDE_DIRS TRANTOR_CMAKE_DIR)
|
||||
# ... for the install tree
|
||||
if(JSONCPP_INCLUDE_DIRS STREQUAL INSTALL_INCLUDE_DIR)
|
||||
set(CONF_INCLUDE_DIRS "${INSTALL_INCLUDE_DIR}")
|
||||
else()
|
||||
set(CONF_INCLUDE_DIRS "${JSONCPP_INCLUDE_DIRS}"
|
||||
"${INSTALL_INCLUDE_DIR}")
|
||||
endif()
|
||||
set(TRANTOR_CMAKE_DIR "${INSTALL_LIB_DIR}/cmake/Trantor")
|
||||
configure_package_config_file(cmake/templates/DrogonConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake
|
||||
INSTALL_DESTINATION ${INSTALL_DROGON_CMAKE_DIR}
|
||||
PATH_VARS CONF_INCLUDE_DIRS TRANTOR_CMAKE_DIR)
|
||||
configure_package_config_file(
|
||||
cmake/templates/DrogonConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake
|
||||
INSTALL_DESTINATION
|
||||
${INSTALL_DROGON_CMAKE_DIR})
|
||||
|
||||
# version
|
||||
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake
|
||||
VERSION ${DROGON_VERSION}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake
|
||||
VERSION ${DROGON_VERSION}
|
||||
COMPATIBILITY SameMajorVersion)
|
||||
|
||||
# Install the DrogonConfig.cmake and DrogonConfigVersion.cmake
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake"
|
||||
install(
|
||||
FILES "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake"
|
||||
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
||||
COMPONENT dev)
|
||||
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
# Install the export set for use with the install-tree
|
||||
install(EXPORT DrogonTargets
|
||||
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
||||
install(EXPORT DrogonTargets
|
||||
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
|
||||
COMPONENT dev)
|
||||
|
@ -3,22 +3,30 @@
|
||||
# DROGON_INCLUDE_DIRS - include directories for Drogon
|
||||
# DROGON_LIBRARIES - libraries to link against
|
||||
# DROGON_EXECUTABLE - the drogon_ctl executable
|
||||
# DROGON_FOUND
|
||||
# This module defines the following IMPORTED target:
|
||||
# Drogon::Drogon
|
||||
|
||||
@PACKAGE_INIT@
|
||||
|
||||
set(DROGON_INCLUDE_DIRS "@PACKAGE_CONF_INCLUDE_DIRS@")
|
||||
add_library(Drogon::Drogon INTERFACE IMPORTED GLOBAL)
|
||||
|
||||
if(NOT TRANTOR_FOUND)
|
||||
# find trantor
|
||||
set(Trantor_DIR "@PACKAGE_TRANTOR_CMAKE_DIR@")
|
||||
find_package(Trantor REQUIRED NO_DEFAULT_PATH)
|
||||
find_package(Trantor REQUIRED)
|
||||
endif()
|
||||
|
||||
# Our library dependencies (contains definitions for IMPORTED targets)
|
||||
|
||||
get_filename_component(DROGON_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
if(NOT TARGET drogon AND NOT Drogon_BINARY_DIR)
|
||||
if(NOT TARGET drogon)
|
||||
include("${DROGON_CMAKE_DIR}/DrogonTargets.cmake")
|
||||
endif()
|
||||
|
||||
# These are IMPORTED targets created by DrogonTargets.cmake
|
||||
set(DROGON_LIBRARIES drogon dl)
|
||||
target_link_libraries(Drogon::Drogon INTERFACE drogon)
|
||||
|
||||
get_target_property(DROGON_INCLUDE_DIRS drogon INTERFACE_INCLUDE_DIRECTORIES)
|
||||
set(DROGON_LIBRARIES drogon)
|
||||
set(DROGON_EXECUTABLE drogon_ctl)
|
||||
set(DROGON_FOUND TRUE)
|
@ -1,38 +1,54 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
|
||||
SET(ctl_sources cmd.cc
|
||||
create.cc
|
||||
create_controller.cc
|
||||
create_filter.cc
|
||||
create_model.cc
|
||||
create_plugin.cc
|
||||
create_project.cc
|
||||
create_view.cc
|
||||
help.cc
|
||||
main.cc
|
||||
press.cc
|
||||
version.cc)
|
||||
ADD_EXECUTABLE(_drogon_ctl main.cc cmd.cc create.cc create_view.cc)
|
||||
FILE(GLOB SCP_LIST ${CMAKE_CURRENT_SOURCE_DIR}/templates/*.csp)
|
||||
FOREACH(cspFile ${SCP_LIST})
|
||||
MESSAGE(STATUS "cspFile:" ${cspFile})
|
||||
EXEC_PROGRAM(basename ARGS "${cspFile} .csp" OUTPUT_VARIABLE classname)
|
||||
MESSAGE(STATUS "view classname:" ${classname})
|
||||
ADD_CUSTOM_COMMAND(OUTPUT ${classname}.h ${classname}.cc
|
||||
COMMAND _drogon_ctl
|
||||
ARGS create view ${cspFile}
|
||||
DEPENDS ${cspFile}
|
||||
VERBATIM )
|
||||
SET(TEMPL_SRC ${TEMPL_SRC} ${classname}.cc)
|
||||
ENDFOREACH()
|
||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
ADD_EXECUTABLE(drogon_ctl ${ctl_sources} ${TEMPL_SRC})
|
||||
ADD_DEPENDENCIES(drogon_ctl trantor makeVersion _drogon_ctl)
|
||||
set(ctl_sources
|
||||
cmd.cc
|
||||
create.cc
|
||||
create_controller.cc
|
||||
create_filter.cc
|
||||
create_model.cc
|
||||
create_plugin.cc
|
||||
create_project.cc
|
||||
create_view.cc
|
||||
help.cc
|
||||
main.cc
|
||||
press.cc
|
||||
version.cc)
|
||||
add_executable(_drogon_ctl
|
||||
main.cc
|
||||
cmd.cc
|
||||
create.cc
|
||||
create_view.cc)
|
||||
target_link_libraries(_drogon_ctl drogon)
|
||||
file(GLOB SCP_LIST ${CMAKE_CURRENT_SOURCE_DIR}/templates/*.csp)
|
||||
foreach(cspFile ${SCP_LIST})
|
||||
message(STATUS "cspFile:" ${cspFile})
|
||||
exec_program(basename
|
||||
ARGS
|
||||
"${cspFile} .csp"
|
||||
OUTPUT_VARIABLE
|
||||
classname)
|
||||
message(STATUS "view classname:" ${classname})
|
||||
add_custom_command(OUTPUT ${classname}.h ${classname}.cc
|
||||
COMMAND _drogon_ctl
|
||||
ARGS
|
||||
create
|
||||
view
|
||||
${cspFile}
|
||||
DEPENDS ${cspFile}
|
||||
VERBATIM)
|
||||
set(TEMPL_SRC ${TEMPL_SRC} ${classname}.cc)
|
||||
endforeach()
|
||||
add_executable(drogon_ctl ${ctl_sources} ${TEMPL_SRC})
|
||||
target_link_libraries(drogon_ctl PRIVATE drogon)
|
||||
target_include_directories(drogon_ctl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
add_dependencies(drogon_ctl
|
||||
trantor
|
||||
makeVersion
|
||||
_drogon_ctl)
|
||||
message(STATUS "bin:" ${INSTALL_BIN_DIR})
|
||||
INSTALL(TARGETS drogon_ctl RUNTIME DESTINATION ${INSTALL_BIN_DIR})
|
||||
INSTALL(PROGRAMS $<TARGET_FILE_DIR:drogon_ctl>/drogon_ctl DESTINATION ${INSTALL_BIN_DIR} RENAME dg_ctl)
|
||||
SET(ctl_targets _drogon_ctl drogon_ctl)
|
||||
SET_PROPERTY(TARGET ${ctl_targets} PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET ${ctl_targets} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET ${ctl_targets} PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
||||
install(TARGETS drogon_ctl RUNTIME DESTINATION ${INSTALL_BIN_DIR})
|
||||
install(PROGRAMS $<TARGET_FILE_DIR:drogon_ctl>/drogon_ctl
|
||||
DESTINATION ${INSTALL_BIN_DIR}
|
||||
RENAME dg_ctl)
|
||||
set(ctl_targets _drogon_ctl drogon_ctl)
|
||||
set_property(TARGET ${ctl_targets} PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET ${ctl_targets} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET ${ctl_targets} PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required (VERSION 3.2)
|
||||
cmake_minimum_required (VERSION 3.5)
|
||||
project([[ProjectName]])
|
||||
|
||||
include(CheckIncludeFileCXX)
|
||||
@ -14,29 +14,26 @@ endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
add_executable([[ProjectName]] main.cc)
|
||||
|
||||
##########
|
||||
# If you include the drogon source code locally in your project, use this method to add drogon
|
||||
# add_subdirectory(drogon)
|
||||
# set(Drogon_DIR ${PROJECT_BINARY_DIR}/drogon)
|
||||
# find_package(Drogon CONFIG REQUIRED NO_DEFAULT_PATH)
|
||||
# include_directories(${DROGON_INCLUDE_DIRS})
|
||||
# link_libraries(${DROGON_LIBRARIES})
|
||||
# target_link_libraries([[ProjectName]] PRIVATE drogon)
|
||||
##########
|
||||
|
||||
find_package(Drogon CONFIG REQUIRED)
|
||||
include_directories(${DROGON_INCLUDE_DIRS})
|
||||
link_libraries(${DROGON_LIBRARIES})
|
||||
target_link_libraries([[ProjectName]] PRIVATE Drogon::Drogon)
|
||||
|
||||
if(CMAKE_CXX_STANDARD LESS 17)
|
||||
#With C++14, use boost to support any and string_view
|
||||
message(STATUS "use c++14")
|
||||
find_package(Boost 1.61.0 REQUIRED)
|
||||
include_directories(${Boost_INCLUDE_DIRS})
|
||||
target_include_directories([[ProjectName]] PRIVATE ${Boost_INCLUDE_DIRS})
|
||||
else()
|
||||
message(STATUS "use c++17")
|
||||
endif()
|
||||
|
||||
aux_source_directory(./ SRC_DIR)
|
||||
aux_source_directory(controllers CTL_SRC)
|
||||
aux_source_directory(filters FILTER_SRC)
|
||||
aux_source_directory(plugins PLUGIN_SRC)
|
||||
@ -55,5 +52,5 @@ foreach(cspFile ${SCP_LIST})
|
||||
set(VIEWSRC ${VIEWSRC} ${classname}.cc)
|
||||
endforeach()
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
add_executable([[ProjectName]] ${SRC_DIR} ${CTL_SRC} ${FILTER_SRC} ${VIEWSRC} ${PLUGIN_SRC} ${MODEL_SRC})
|
||||
target_include_directories([[ProjectName]] PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_sources([[ProjectName]] PRIVATE ${SRC_DIR} ${CTL_SRC} ${FILTER_SRC} ${VIEWSRC} ${PLUGIN_SRC} ${MODEL_SRC})
|
||||
|
@ -1,43 +1,49 @@
|
||||
link_libraries(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
file(GLOB SCP_LIST ${CMAKE_CURRENT_SOURCE_DIR}/simple_example/*.csp)
|
||||
foreach(cspFile ${SCP_LIST})
|
||||
message(STATUS "cspFile:" ${cspFile})
|
||||
exec_program(basename ARGS "${cspFile} .csp" OUTPUT_VARIABLE classname)
|
||||
message(STATUS "view classname:" ${classname})
|
||||
add_custom_command(OUTPUT ${classname}.h ${classname}.cc
|
||||
COMMAND drogon_ctl
|
||||
ARGS create view ${cspFile}
|
||||
DEPENDS ${cspFile}
|
||||
VERBATIM )
|
||||
set(VIEWSRC ${VIEWSRC} ${classname}.cc)
|
||||
message(STATUS "cspFile:" ${cspFile})
|
||||
exec_program(basename
|
||||
ARGS
|
||||
"${cspFile} .csp"
|
||||
OUTPUT_VARIABLE
|
||||
classname)
|
||||
message(STATUS "view classname:" ${classname})
|
||||
add_custom_command(OUTPUT ${classname}.h ${classname}.cc
|
||||
COMMAND drogon_ctl
|
||||
ARGS
|
||||
create
|
||||
view
|
||||
${cspFile}
|
||||
DEPENDS ${cspFile}
|
||||
VERBATIM)
|
||||
set(VIEWSRC ${VIEWSRC} ${classname}.cc)
|
||||
endforeach()
|
||||
|
||||
|
||||
set(simple_example_sources simple_example/CustomCtrl.cc
|
||||
simple_example/CustomHeaderFilter.cc
|
||||
simple_example/DoNothingPlugin.cc
|
||||
simple_example/ForwardCtrl.cc
|
||||
simple_example/JsonTestController.cc
|
||||
simple_example/ListParaCtl.cc
|
||||
simple_example/PipeliningTest.cc
|
||||
simple_example/TestController.cc
|
||||
simple_example/TestPlugin.cc
|
||||
simple_example/TestViewCtl.cc
|
||||
simple_example/WebSocketTest.cc
|
||||
simple_example/api_Attachment.cc
|
||||
simple_example/api_v1_ApiTest.cc
|
||||
simple_example/TimeFilter.cc
|
||||
simple_example/main.cc)
|
||||
set(simple_example_sources
|
||||
simple_example/CustomCtrl.cc
|
||||
simple_example/CustomHeaderFilter.cc
|
||||
simple_example/DoNothingPlugin.cc
|
||||
simple_example/ForwardCtrl.cc
|
||||
simple_example/JsonTestController.cc
|
||||
simple_example/ListParaCtl.cc
|
||||
simple_example/PipeliningTest.cc
|
||||
simple_example/TestController.cc
|
||||
simple_example/TestPlugin.cc
|
||||
simple_example/TestViewCtl.cc
|
||||
simple_example/WebSocketTest.cc
|
||||
simple_example/api_Attachment.cc
|
||||
simple_example/api_v1_ApiTest.cc
|
||||
simple_example/TimeFilter.cc
|
||||
simple_example/main.cc)
|
||||
|
||||
add_executable(webapp ${simple_example_sources} ${VIEWSRC})
|
||||
add_dependencies(webapp drogon_ctl)
|
||||
|
||||
set(client_example_sources client_example/main.cc)
|
||||
set(benchmark_sources benchmark/BenchmarkCtrl.cc
|
||||
benchmark/JsonCtrl.cc
|
||||
benchmark/main.cc)
|
||||
#AUX_SOURCE_DIRECTORY(simple_example_test DIR_TEST)
|
||||
set(benchmark_sources benchmark/BenchmarkCtrl.cc benchmark/JsonCtrl.cc
|
||||
benchmark/main.cc)
|
||||
# AUX_SOURCE_DIRECTORY(simple_example_test DIR_TEST)
|
||||
|
||||
add_executable(client ${client_example_sources})
|
||||
add_executable(benchmark ${benchmark_sources})
|
||||
@ -48,16 +54,33 @@ add_executable(multiple_ws_test simple_example_test/MultipleWsTest.cc)
|
||||
|
||||
add_custom_command(TARGET webapp POST_BUILD
|
||||
COMMAND gzip
|
||||
ARGS -c ${CMAKE_CURRENT_SOURCE_DIR}/simple_example/index.html > ${CMAKE_CURRENT_BINARY_DIR}/index.html.gz
|
||||
ARGS
|
||||
-c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/simple_example/index.html
|
||||
>
|
||||
${CMAKE_CURRENT_BINARY_DIR}/index.html.gz
|
||||
VERBATIM)
|
||||
add_custom_command(TARGET webapp POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${PROJECT_SOURCE_DIR}/config.example.json ${PROJECT_SOURCE_DIR}/drogon.jpg
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/simple_example/index.html
|
||||
${PROJECT_SOURCE_DIR}/trantor/trantor/tests/server.pem $<TARGET_FILE_DIR:webapp>)
|
||||
add_custom_command(
|
||||
TARGET webapp POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-E
|
||||
copy_if_different
|
||||
${PROJECT_SOURCE_DIR}/config.example.json
|
||||
${PROJECT_SOURCE_DIR}/drogon.jpg
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/simple_example/index.html
|
||||
${PROJECT_SOURCE_DIR}/trantor/trantor/tests/server.pem
|
||||
$<TARGET_FILE_DIR:webapp>)
|
||||
|
||||
set(example_targets webapp webapp_test client benchmark pipelining_test websocket_test multiple_ws_test)
|
||||
set(example_targets
|
||||
webapp
|
||||
webapp_test
|
||||
client
|
||||
benchmark
|
||||
pipelining_test
|
||||
websocket_test
|
||||
multiple_ws_test)
|
||||
|
||||
set_property(TARGET ${example_targets} PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET ${example_targets}
|
||||
PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET ${example_targets} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET ${example_targets} PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,7 +1,6 @@
|
||||
|
||||
#include "CustomCtrl.h"
|
||||
#include "CustomHeaderFilter.h"
|
||||
#include <drogon/config.h>
|
||||
#include <drogon/drogon.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
@ -127,11 +126,13 @@ int main()
|
||||
std::cout << banner << std::endl;
|
||||
// app().addListener("::1", 8848); //ipv6
|
||||
app().addListener("0.0.0.0", 8848);
|
||||
#ifdef OpenSSL_FOUND
|
||||
// https
|
||||
drogon::app().setSSLFiles("server.pem", "server.pem");
|
||||
drogon::app().addListener("0.0.0.0", 8849, true);
|
||||
#endif
|
||||
if (app().supportSSL())
|
||||
{
|
||||
drogon::app()
|
||||
.setSSLFiles("server.pem", "server.pem")
|
||||
.addListener("0.0.0.0", 8849, true);
|
||||
}
|
||||
// Class function example
|
||||
app().registerHandler("/api/v1/handle1/{1}/{2}/?p3={3}&p4={4}", &A::handle);
|
||||
app().registerHandler("/api/v1/handle11/{1}/{2}/?p3={3}&p4={4}",
|
||||
|
@ -14,7 +14,6 @@
|
||||
|
||||
// Make a http client to test the example server app;
|
||||
|
||||
#include <drogon/config.h>
|
||||
#include <drogon/drogon.h>
|
||||
#include <trantor/net/EventLoopThread.h>
|
||||
#include <trantor/net/TcpClient.h>
|
||||
@ -1007,18 +1006,19 @@ int main(int argc, char *argv[])
|
||||
client->addCookie(sessionID);
|
||||
|
||||
doTest(client, pro1);
|
||||
#ifdef OpenSSL_FOUND
|
||||
std::promise<int> pro2;
|
||||
auto sslClient = HttpClient::newHttpClient("127.0.0.1",
|
||||
8849,
|
||||
true,
|
||||
loop[1].getLoop());
|
||||
if (sessionID)
|
||||
sslClient->addCookie(sessionID);
|
||||
doTest(sslClient, pro2, true);
|
||||
auto f2 = pro2.get_future();
|
||||
f2.get();
|
||||
#endif
|
||||
if (app().supportSSL())
|
||||
{
|
||||
std::promise<int> pro2;
|
||||
auto sslClient = HttpClient::newHttpClient("127.0.0.1",
|
||||
8849,
|
||||
true,
|
||||
loop[1].getLoop());
|
||||
if (sessionID)
|
||||
sslClient->addCookie(sessionID);
|
||||
doTest(sslClient, pro2, true);
|
||||
auto f2 = pro2.get_future();
|
||||
f2.get();
|
||||
}
|
||||
auto f1 = pro1.get_future();
|
||||
f1.get();
|
||||
// LOG_DEBUG << sslClient.use_count();
|
||||
|
@ -861,6 +861,8 @@ class HttpAppFramework : public trantor::NonCopyable
|
||||
*/
|
||||
virtual const std::shared_ptr<trantor::Resolver> &getResolver() const = 0;
|
||||
|
||||
virtual bool supportSSL() const = 0;
|
||||
|
||||
private:
|
||||
virtual void registerHttpController(
|
||||
const std::string &pathPattern,
|
||||
|
@ -384,6 +384,14 @@ class HttpAppFrameworkImpl : public HttpAppFramework
|
||||
const HttpResponsePtr &resp,
|
||||
const std::function<void(const HttpResponsePtr &)> &callback);
|
||||
|
||||
virtual bool supportSSL() const override
|
||||
{
|
||||
#ifdef OpenSSL_FOUND
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
virtual void registerHttpController(
|
||||
const std::string &pathPattern,
|
||||
|
@ -1,29 +1,31 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
ADD_EXECUTABLE(cache_map_test CacheMapTest.cc)
|
||||
ADD_EXECUTABLE(cache_map_test2 CacheMapTest2.cc)
|
||||
ADD_EXECUTABLE(cookies_test CookiesTest.cc)
|
||||
ADD_EXECUTABLE(class_name_test ClassNameTest.cc)
|
||||
ADD_EXECUTABLE(sha1_test Sha1Test.cc)
|
||||
ADD_EXECUTABLE(view_data_test HttpViewDataTest.cc)
|
||||
ADD_EXECUTABLE(md5_test Md5Test.cc ../src/ssl_funcs/Md5.cc)
|
||||
ADD_EXECUTABLE(http_full_date_test HttpFullDateTest.cc)
|
||||
ADD_EXECUTABLE(gzip_test GzipTest.cc)
|
||||
ADD_EXECUTABLE(url_codec_test UrlCodecTest.cc)
|
||||
ADD_EXECUTABLE(main_loop_test MainLoopTest.cc)
|
||||
add_executable(cache_map_test CacheMapTest.cc)
|
||||
add_executable(cache_map_test2 CacheMapTest2.cc)
|
||||
add_executable(cookies_test CookiesTest.cc)
|
||||
add_executable(class_name_test ClassNameTest.cc)
|
||||
add_executable(sha1_test Sha1Test.cc ../src/ssl_funcs/Sha1.cc)
|
||||
add_executable(view_data_test HttpViewDataTest.cc)
|
||||
add_executable(md5_test Md5Test.cc ../src/ssl_funcs/Md5.cc)
|
||||
add_executable(http_full_date_test HttpFullDateTest.cc)
|
||||
add_executable(gzip_test GzipTest.cc)
|
||||
add_executable(url_codec_test UrlCodecTest.cc)
|
||||
add_executable(main_loop_test MainLoopTest.cc)
|
||||
|
||||
SET(test_targets cache_map_test
|
||||
cache_map_test2
|
||||
cookies_test
|
||||
class_name_test
|
||||
sha1_test
|
||||
view_data_test
|
||||
md5_test
|
||||
http_full_date_test
|
||||
gzip_test
|
||||
url_codec_test
|
||||
main_loop_test)
|
||||
set(test_targets
|
||||
cache_map_test
|
||||
cache_map_test2
|
||||
cookies_test
|
||||
class_name_test
|
||||
sha1_test
|
||||
view_data_test
|
||||
md5_test
|
||||
http_full_date_test
|
||||
gzip_test
|
||||
url_codec_test
|
||||
main_loop_test)
|
||||
|
||||
SET_PROPERTY(TARGET ${test_targets} PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET ${test_targets} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET ${test_targets} PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_property(TARGET ${test_targets}
|
||||
PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET ${test_targets} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET ${test_targets} PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,9 +1,4 @@
|
||||
#include <drogon/config.h>
|
||||
#ifdef OpenSSL_FOUND
|
||||
#include <openssl/sha.h>
|
||||
#else
|
||||
#include "../lib/src/ssl_funcs/Sha1.h"
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -30,7 +30,7 @@ namespace drogon
|
||||
{
|
||||
namespace orm
|
||||
{
|
||||
#if (CXX_STD > 14)
|
||||
#if __cplusplus >= 201703L
|
||||
typedef std::shared_mutex SharedMutex;
|
||||
#else
|
||||
typedef std::shared_timed_mutex SharedMutex;
|
||||
|
@ -1,7 +1,7 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
ADD_EXECUTABLE(mysql_test1 test1.cc)
|
||||
add_executable(mysql_test1 test1.cc)
|
||||
|
||||
SET_PROPERTY(TARGET mysql_test1 PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET mysql_test1 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET mysql_test1 PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_property(TARGET mysql_test1 PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET mysql_test1 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET mysql_test1 PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,8 +1,9 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
ADD_EXECUTABLE(pg_test1 test1.cc)
|
||||
ADD_EXECUTABLE(pg_test2 test2.cc)
|
||||
add_executable(pg_test1 test1.cc)
|
||||
add_executable(pg_test2 test2.cc)
|
||||
|
||||
SET_PROPERTY(TARGET pg_test1 pg_test2 PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET pg_test1 pg_test2 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET pg_test1 pg_test2 PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_property(TARGET pg_test1 pg_test2
|
||||
PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET pg_test1 pg_test2 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET pg_test1 pg_test2 PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,7 +1,7 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
ADD_EXECUTABLE(sqlite3_test1 test1.cc Groups.cc)
|
||||
add_executable(sqlite3_test1 test1.cc Groups.cc)
|
||||
|
||||
SET_PROPERTY(TARGET sqlite3_test1 PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET sqlite3_test1 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET sqlite3_test1 PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_property(TARGET sqlite3_test1 PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET sqlite3_test1 PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET sqlite3_test1 PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
@ -1,7 +1,7 @@
|
||||
LINK_LIBRARIES(drogon trantor pthread dl)
|
||||
link_libraries(drogon)
|
||||
|
||||
ADD_EXECUTABLE(db_test db_test.cc Users.cc)
|
||||
add_executable(db_test db_test.cc Users.cc)
|
||||
|
||||
SET_PROPERTY(TARGET db_test PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
SET_PROPERTY(TARGET db_test PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
SET_PROPERTY(TARGET db_test PROPERTY CXX_EXTENSIONS OFF)
|
||||
set_property(TARGET db_test PROPERTY CXX_STANDARD ${DROGON_CXX_STANDARD})
|
||||
set_property(TARGET db_test PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||
set_property(TARGET db_test PROPERTY CXX_EXTENSIONS OFF)
|
||||
|
2
trantor
2
trantor
@ -1 +1 @@
|
||||
Subproject commit 43e6616686af0ee2cdb4be29f12894adbeceddfa
|
||||
Subproject commit e4e5a4a0016ccc56abd832c6f03afac438eeed2c
|
Loading…
x
Reference in New Issue
Block a user