diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f3e6a3b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,143 @@ +# +# 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 . +# + + +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_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_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()