redmine-api-cpp/CMakeLists.txt

144 lines
4.2 KiB
CMake

#
# Copyright (C) 2024 Dominik Meyer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
cmake_minimum_required (VERSION 3.1 FATAL_ERROR)
project (remine-api-cpp VERSION 0.0.1 LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules )
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
include(compdb)
include(doxygen)
build_docs(PROCESS_DOXYFILE DOXYFILE_PATH "docs/Doxyfile.in" )
# generate project specific configuration file
configure_file(${PROJECT_SOURCE_DIR}/src/config.hpp.in ${PROJECT_SOURCE_DIR}/src/config.hpp @ONLY)
#
# All dependencies
#
IF (NOT TARGET CLI11)
set(CLI11_TESTING OFF CACHE BOOL "disable testing")
add_subdirectory(libs/CLI11 EXCLUDE_FROM_ALL)
ENDIF()
IF(NOT TARGET loguru)
set(LOGURU_BUILD_TESTS OFF CACHE BOOL "disable testing")
set(LOGURU_BUILD_EXAMPLES OFF CACHE BOOL "disable testing")
set(LOGURU_INSTALL OFF CACHE BOOL "disable testing")
set(LOGURU_WITH_STREAMS ON CACHE BOOL "disable testing")
add_subdirectory(libs/loguru EXCLUDE_FROM_ALL)
ENDIF()
IF(NOT TARGET nlohmann_json::nlohmann_json)
set(JSON_BuildTests OFF CACHE INTERNAL "")
add_subdirectory(libs/json EXCLUDE_FROM_ALL)
ENDIF()
IF(NOT TARGET httplib::httplib)
set(HTTPLIB_REQUIRE_OPENSSL OFF CACHE INTERNAL "")
set(HTTPLIB_TEST OFF CACHE INTERNAL "")
add_subdirectory(libs/cpp-httplib EXCLUDE_FROM_ALL)
ENDIF()
SET(REDMINE_LIBARIES loguru nlohmann_json::nlohmann_json httplib::httplib)
#
# all source files for the redmine api cpp library
#
SET(REDMINE_API_SOURCES
include/Redmine/Object.hpp
src/Redmine/Object.cpp
include/Redmine/User.hpp
src/Redmine/User.cpp
include/Redmine/API.hpp
src/Redmine/API.cpp
)
add_library(redmine-api-cpp-objlib OBJECT ${REDMINE_API_SOURCES})
set_property(TARGET redmine-api-cpp-objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
target_include_directories(redmine-api-cpp-objlib
PUBLIC
include
PRIVATE
src
)
target_link_libraries(redmine-api-cpp-objlib PUBLIC ${REDMINE_LIBARIES})
add_library(redmine-api-cpp SHARED $<TARGET_OBJECTS:redmine-api-cpp-objlib>)
target_include_directories(redmine-api-cpp
PUBLIC
include
PRIVATE
src
)
target_link_libraries(redmine-api-cpp-objlib PUBLIC ${REDMINE_LIBARIES})
add_library(redmine-api-cpp-static STATIC $<TARGET_OBJECTS:redmine-api-cpp-objlib>)
target_include_directories(redmine-api-cpp-static
PUBLIC
include
PRIVATE
src
)
target_link_libraries(redmine-api-cpp-static PUBLIC ${REDMINE_LIBARIES})
add_executable(redmine-cli
src/Redmine-CLI/main.cpp
src/Redmine-CLI/Redmine.hpp
src/Redmine-CLI/Redmine.cpp
src/Redmine-CLI/Command/Version.hpp
src/Redmine-CLI/Command/Version.cpp
src/Redmine-CLI/Command/MyAccount.hpp
src/Redmine-CLI/Command/MyAccount.cpp
)
target_link_libraries(redmine-cli redmine-api-cpp-static loguru CLI11)
target_include_directories(redmine-cli
PRIVATE
src
)
IF(${REDMINE_API_TESTS})
IF(NOT TARGET Catch2)
add_subdirectory(libs/Catch2 EXCLUDE_FROM_ALL)
include(libs/Catch2/contrib/Catch.cmake)
ENDIF()
#
# add tests as executable
#
add_executable(test_event tests/test_event.cpp)
target_link_libraries(test_event Catch2::Catch2 eventmanager-static)
catch_discover_tests(test_event)
add_executable(test_basic tests/test_basic.cpp)
target_link_libraries(test_basic Catch2::Catch2 eventmanager-static)
catch_discover_tests(test_basic)
ENDIF()