arch-repo-manager/librepomgr/CMakeLists.txt

175 lines
5.7 KiB
CMake

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# add project files
set(HEADER_FILES
errorhandling.h
serversetup.h
helper.h
json.h
logcontext.h
logging.h
multisession.h
globallock.h
authentication.h
webapi/server.h
webapi/session.h
webapi/render.h
webapi/routes.h
webapi/routeid.h
webapi/typedefs.h
webapi/repository.h
webapi/params.h
webclient/aur.h
webclient/database.h
webclient/session.h
buildactions/buildactionmeta.h
buildactions/buildaction.h
buildactions/buildactionfwd.h
buildactions/buildactiontemplate.h
buildactions/subprocess.h
buildactions/subprocessfwd.h)
set(SRC_FILES
json.cpp
errorhandling.cpp
serversetup.cpp
globallock.cpp
authentication.cpp
webapi/server.cpp
webapi/session.cpp
webapi/routes.cpp
webapi/routes_buildaction.cpp
webapi/render.cpp
webapi/params.cpp
webapi/repository.cpp
webclient/aur.cpp
webclient/database.cpp
webclient/session.cpp
buildactions/buildactionmeta.cpp
buildactions/buildactionlivestreaming.cpp
buildactions/buildaction.cpp
buildactions/buildactiontemplate.cpp
buildactions/buildactionprivate.h
buildactions/customcommand.cpp
buildactions/updatecheck.cpp
buildactions/makelicenseinfo.cpp
buildactions/reloaddatabase.cpp
buildactions/reloadlibrarydependencies.cpp
buildactions/reloadconfiguration.cpp
buildactions/repomanagement.cpp
buildactions/preparebuild.cpp
buildactions/conductbuild.cpp)
set(TEST_HEADER_FILES tests/parser_helper.h)
set(TEST_SRC_FILES tests/cppunit.cpp tests/buildactions.cpp tests/utils.cpp tests/webapi.cpp tests/parser_helper.cpp)
# meta data
set(META_PROJECT_NAME librepomgr)
set(META_PROJECT_TYPE library)
set(META_PROJECT_VARNAME LIBREPOMGR)
set(META_APP_AUTHOR "Martchus")
set(META_APP_NAME "Unofficial Arch Linux repository management library")
set(META_APP_DESCRIPTION "Library for managing custom Arch Linux repositories")
set(META_VERSION_MAJOR 0)
set(META_VERSION_MINOR 0)
set(META_VERSION_PATCH 1)
set(META_VERSION_CACHE 10)
set(META_VERSION_BUILD_ACTIONS_JSON 0)
set(META_VERSION_LIBRARY_DEPENDENCIES_JSON 0)
set(LINK_TESTS_AGAINST_APP_TARGET ON)
# find c++utilities
set(CONFIGURATION_PACKAGE_SUFFIX
""
CACHE STRING "sets the suffix for find_package() calls to packages configured via c++utilities")
find_package(c++utilities${CONFIGURATION_PACKAGE_SUFFIX} 5.11.0 REQUIRED)
use_cpp_utilities(VISIBILITY PUBLIC)
# find boost libraries
option(BOOST_STATIC_LINKAGE "${STATIC_LINKAGE}" "link statically against Boost (instead of dynamically)")
set(Boost_USE_MULTITHREADED ON)
if (BOOST_STATIC_LINKAGE)
set(Boost_USE_STATIC_LIBS ON)
endif ()
set(BOOST_ARGS "REQUIRED;COMPONENTS;system;filesystem")
use_package(TARGET_NAME Boost::system PACKAGE_NAME Boost PACKAGE_ARGS "${BOOST_ARGS}")
use_package(TARGET_NAME Boost::filesystem PACKAGE_NAME Boost PACKAGE_ARGS "${BOOST_ARGS}")
# find reflective-rapidjson
find_package(reflective_rapidjson${CONFIGURATION_PACKAGE_SUFFIX} REQUIRED)
use_reflective_rapidjson(VISIBILITY PUBLIC)
# find backend libraries
find_package(libpkg ${META_APP_VERSION} REQUIRED)
use_libpkg(VISIBILITY PUBLIC)
# link against crypto and SSL library from OpenSSL
use_openssl(VISIBILITY PUBLIC)
# link against pthread
list(APPEND PUBLIC_LIBRARIES pthread)
# apply basic configuration
include(BasicConfig)
# add cache version to config header
string(APPEND META_CUSTOM_CONFIG "#define ${META_PROJECT_VARNAME}_CACHE_VERSION \"${META_VERSION_CACHE}\"\n")
string(APPEND META_CUSTOM_CONFIG
"#define ${META_PROJECT_VARNAME}_BUILD_ACTIONS_JSON_VERSION \"${META_VERSION_BUILD_ACTIONS_JSON}\"\n")
string(APPEND META_CUSTOM_CONFIG
"#define ${META_PROJECT_VARNAME}_LIBRARY_DEPENDENCIES_JSON_VERSION \"${META_VERSION_LIBRARY_DEPENDENCIES_JSON}\"\n")
# trigger code generator for tests because the tests already contain structs to be (de)serialized
include(ReflectionGenerator)
add_reflection_generator_invocation(
INPUT_FILES
errorhandling.h
serversetup.h
buildactions/buildaction.h
buildactions/buildactionmeta.h
buildactions/buildactiontemplate.h
CLANG_OPTIONS_FROM_TARGETS
"${META_TARGET_NAME}"
CLANG_OPTIONS_FROM_DEPENDENCIES
"${PUBLIC_LIBRARIES};${PRIVATE_LIBRARIES}"
GENERATORS
json
binary
OUTPUT_LISTS
SRC_FILES
JSON_VISIBILITY
${META_PROJECT_VARNAME}_EXPORT
BINARY_VISBILITY
${META_PROJECT_VARNAME}_EXPORT)
# disable Boost's support for concepts to avoid compile errors
# /usr/include/boost/asio/async_result.hpp:70:20: error: concept cannot have associated constraints
# BOOST_ASIO_CONCEPT completion_handler_for =
# ^
# /usr/include/boost/asio/async_result.hpp:492:20: error: concept cannot have associated constraints
# BOOST_ASIO_CONCEPT completion_token_for = requires(T&& t)
# ^
list(APPEND META_PUBLIC_COMPILE_DEFINITIONS BOOST_ASIO_DISABLE_CONCEPTS)
# include modules to apply configuration
include(WindowsResources)
include(LibraryTarget)
include(TestTarget)
include(ConfigHeader)
# configure dummy build action
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DUMMY_BUILD_ACTION_ENABLED_BY_DEFAULT ON)
endif ()
option(DUMMY_BUILD_ACTION_ENABLED "enable dummy build action" ${DUMMY_BUILD_ACTION_ENABLED_BY_DEFAULT})
if (DUMMY_BUILD_ACTION_ENABLED)
set_property(
SOURCE buildactions/buildaction.cpp
APPEND
PROPERTY COMPILE_DEFINITIONS ${META_PROJECT_VARNAME_UPPER}_DUMMY_BUILD_ACTION_ENABLED)
endif ()
# configure test helper shared with libpkg (FIXME: create a separate test helper library)
set_property(
SOURCE tests/parser_helper.cpp
APPEND
PROPERTY COMPILE_DEFINITIONS ${META_PROJECT_VARNAME_UPPER}_BUILD)