mirror of
https://github.com/CrowCpp/Crow.git
synced 2024-06-07 21:10:44 +00:00
17034adae5
general tests are now enabled on MSVC, mustachetests disabled due to some strange bug in python script (will be done later)
181 lines
5.2 KiB
CMake
181 lines
5.2 KiB
CMake
#####################################
|
|
# Define Project-Wide Settings
|
|
#####################################
|
|
cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR)
|
|
|
|
# Define the project name and language
|
|
project(Crow
|
|
LANGUAGES CXX
|
|
)
|
|
|
|
# Make sure Findasio.cmake module is found
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
|
|
# Check if Crow is the main project
|
|
set(CROW_IS_MAIN_PROJECT OFF)
|
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
set(CROW_IS_MAIN_PROJECT ON)
|
|
endif()
|
|
|
|
# Set required C++ standard
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
|
|
|
# Default to build type "Release" unless tests are being built
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
if (NOT CROW_BUILD_TESTS)
|
|
message(STATUS "No build type selected, default to Release")
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
else()
|
|
message(STATUS "No build type selected but tests are being built, default to Debug")
|
|
set(CMAKE_BUILD_TYPE "Debug")
|
|
endif()
|
|
endif()
|
|
if (MSVC)
|
|
add_compile_options(/bigobj)
|
|
endif ()
|
|
|
|
include(FindPython3)
|
|
find_package(Python3)
|
|
|
|
#####################################
|
|
# Define Options
|
|
#####################################
|
|
option(CROW_BUILD_EXAMPLES "Build the examples in the project" ${CROW_IS_MAIN_PROJECT})
|
|
option(CROW_BUILD_TESTS "Build the tests in the project" ${CROW_IS_MAIN_PROJECT})
|
|
option(CROW_AMALGAMATE "Combine all headers into one" OFF)
|
|
option(CROW_INSTALL "Add install step for Crow" ON )
|
|
|
|
# Possible values: ssl, compression
|
|
option(CROW_FEATURES "Enable features extending Crow's abilities" "")
|
|
|
|
#####################################
|
|
# Define Targets
|
|
#####################################
|
|
add_library(Crow INTERFACE)
|
|
add_library(Crow::Crow ALIAS Crow)
|
|
|
|
target_include_directories(Crow
|
|
INTERFACE
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>
|
|
)
|
|
|
|
find_package(asio REQUIRED)
|
|
|
|
target_link_libraries(Crow
|
|
INTERFACE
|
|
asio::asio
|
|
)
|
|
|
|
target_compile_definitions(Crow INTERFACE "")
|
|
|
|
if("compression" IN_LIST CROW_FEATURES)
|
|
find_package(ZLIB REQUIRED)
|
|
target_link_libraries(Crow INTERFACE ZLIB::ZLIB)
|
|
target_compile_definitions(Crow INTERFACE CROW_ENABLE_COMPRESSION)
|
|
endif()
|
|
|
|
if("ssl" IN_LIST CROW_FEATURES)
|
|
find_package(OpenSSL REQUIRED)
|
|
target_link_libraries(Crow INTERFACE OpenSSL::SSL)
|
|
target_compile_definitions(Crow INTERFACE CROW_ENABLE_SSL)
|
|
endif()
|
|
|
|
if(CROW_AMALGAMATE)
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/crow_all.h
|
|
COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/scripts/merge_all.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_BINARY_DIR}/crow_all.h
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h ${CMAKE_CURRENT_SOURCE_DIR}/include/crow/*.h ${CMAKE_CURRENT_SOURCE_DIR}/include/crow/middlewares/*.h
|
|
)
|
|
|
|
add_custom_target(crow_amalgamated ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/crow_all.h)
|
|
endif()
|
|
|
|
# Examples
|
|
if(CROW_BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
# Tests
|
|
if(CROW_BUILD_TESTS)
|
|
|
|
add_subdirectory(tests)
|
|
enable_testing()
|
|
add_test(
|
|
NAME crow_test
|
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/unittest
|
|
)
|
|
|
|
if(NOT "compression" IN_LIST CROW_FEATURES)
|
|
message(STATUS "Compression tests are omitted. (Configure with CROW_FEATURES containing 'compression' to enable them)")
|
|
endif()
|
|
if(NOT "ssl" IN_LIST CROW_FEATURES)
|
|
message(STATUS "SSL tests are omitted. (Configure with CROW_FEATURES containing 'ssl' to enable them)")
|
|
else()
|
|
if(NOT MSVC)
|
|
add_test(
|
|
NAME ssl_test
|
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/tests/ssl/ssltest
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
#####################################
|
|
# Install Files
|
|
#####################################
|
|
if(CROW_INSTALL)
|
|
include(GNUInstallDirs)
|
|
install(TARGETS Crow EXPORT CrowTargets)
|
|
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
|
|
install(EXPORT CrowTargets
|
|
FILE CrowTargets.cmake
|
|
NAMESPACE Crow::
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Crow"
|
|
)
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
configure_package_config_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/CrowConfig.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CrowConfig.cmake"
|
|
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Crow"
|
|
)
|
|
install(FILES
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findasio.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CrowConfig.cmake"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Crow"
|
|
)
|
|
endif()
|
|
|
|
set(CPACK_GENERATOR "DEB")
|
|
set(CPACK_PACKAGE_NAME "Crow")
|
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "CrowCpp")
|
|
set(CPACK_PACKAGE_VENDOR "CrowCpp")
|
|
set(CPACK_PACKAGE_DESCRIPTION "A Fast and Easy to use C++ microframework for the web.")
|
|
set(CPACK_PACKAGE_HOMEPAGE_URL "https://crowcpp.org")
|
|
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "all")
|
|
set(CPACK_DEBIAN_PACKAGE_DEBUG OFF)
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libasio-dev")
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "libdevel")
|
|
|
|
include(CPack)
|
|
|
|
#####################################
|
|
# Uninstall Files
|
|
#####################################
|
|
if(NOT TARGET uninstall)
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
|
endif()
|