saicore/CMakeLists.txt

277 lines
11 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

cmake_minimum_required(VERSION 3.16)
# ==========================================================================
# SaiCore cmake build file
#
# Most important configuration variables:
# CMAKE_INSTALL_PREFIX
# Path to install prefix, defaults to /usr/local (see cmake documentation)
# Typically set to /usr or /opt
# QT_VERSION
# Qt Version to use
# Set to empty, 5 or 6, defaults to auto-selection with preference to 5
#
# Typical invocation
# cmake -S <srcdir> -B <builddir> -DCMAKE_INSTALL_PREFIX:PATH=/usr
# or
# cmake -S <srcdir> -B <builddir> -DCMAKE_INSTALL_PREFIX:PATH=/opt
#
# Build
# cd <builddir>
# cmake --build . [-j<n>]
#
# Package
# cpack -G <DEB|RPM>
# ==========================================================================
# ==========================================================================
# Basic project information
# ==========================================================================
include(cmake/Version.cmake)
project(SaiCore
VERSION ${VERSION_NUMBER}
DESCRIPTION "SaiCore — отечественное программное обеспечение для интерактивных панелей и досок"
HOMEPAGE_URL "https://saicore.ru"
LANGUAGES CXX
)
add_compile_definitions(UBVERSION="${VERSION}")
# ==========================================================================
# Configuration options
# ==========================================================================
set(QT_VERSION "" CACHE STRING "Qt major version number to use - empty, 5 or 6")
# Internal setting
set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication - do not change")
# ==========================================================================
# Non-source file locations
# ==========================================================================
set(SaiCore_QRC_FILE resources/SaiCore.qrc)
set(SaiCore_FORMS_DIR resources/forms src/web/simplebrowser)
set(SaiCore_TS_DIR resources/i18n)
set(SaiCore_FONT_DIR resources/customizations resources/fonts)
set(SaiCore_ETC_DIR resources/etc)
set(SaiCore_LIBRARY_DIR resources/library)
set(SaiCore_STARTUP_HINTS resources/startupHints)
set(SaiCore_ETC_FILE ${SaiCore_ETC_DIR}/SaiCore.config
${SaiCore_ETC_DIR}/SaiCore.css
${SaiCore_ETC_DIR}/widgets.md5sum)
set(SaiCore_TEMPLATE_FILE ${SaiCore_ETC_DIR}/asyncAPI.js
${SaiCore_ETC_DIR}/intranet-podcast-metadata.template
${SaiCore_ETC_DIR}/npapi-wrapper.config.xml)
set(SaiCore_ICON_FILE resources/images/ch.SaiCore.SaiCore.svg)
set(SaiCore_DESKTOP_FILE resources/linux/ch.SaiCore.SaiCore.desktop)
set(SaiCore_MIMETYPE_FILE resources/linux/ch.SaiCore.SaiCore-ubz.xml)
set(SaiCore_MIMEICON_FILE resources/linux/ch.SaiCore.application-ubz.svg)
# ==========================================================================
# Basic compiler settings
# ==========================================================================
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to use - defaults to C++17")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
list(APPEND CMAKE_AUTOUIC_SEARCH_PATHS
${SaiCore_FORMS_DIR}
)
message(STATUS "Using C++" ${CMAKE_CXX_STANDARD})
# OpenMP support
include(FindOpenMP)
if(OPENMP_FOUND)
string(APPEND CMAKE_CXX_FLAGS " " ${OpenMP_CXX_FLAGS})
endif()
# ==========================================================================
# Target and dependencies
#
# Note: the executable is using lowercase on all platforms
# ==========================================================================
add_executable(${PROJECT_NAME})
# manage dependencies
include(cmake/DependencyQt.cmake)
include(cmake/DependencyOpenSSL.cmake)
include(cmake/DependencyPoppler.cmake)
include(cmake/DependencyZlib.cmake)
include(cmake/DependencyQuaZip.cmake)
include(cmake/DependencyFFmpeg.cmake)
include(cmake/DependencyX11.cmake)
# add source path to include directories
target_include_directories(${PROJECT_NAME} PRIVATE
src
)
# add sources from subdirectories
add_subdirectory(src/adaptors)
add_subdirectory(src/api)
add_subdirectory(src/board)
add_subdirectory(src/core)
add_subdirectory(src/desktop)
add_subdirectory(src/document)
add_subdirectory(src/domain)
add_subdirectory(src/frameworks)
add_subdirectory(src/globals)
add_subdirectory(src/gui)
add_subdirectory(src/network)
add_subdirectory(src/pdf)
add_subdirectory(src/pdf-merger)
add_subdirectory(src/podcast)
add_subdirectory(src/singleapplication)
add_subdirectory(src/tools)
add_subdirectory(src/web)
add_subdirectory(plugins/cffadaptor/src)
add_subdirectory(resources/forms)
# statically link singleapplication
target_link_libraries(${PROJECT_NAME}
SingleApplication::SingleApplication
)
# ==========================================================================
# Resources
# ==========================================================================
if(Qt5_VERSION AND Qt5_VERSION VERSION_LESS "5.15")
qt5_add_resources(SaiCore_RESOURCES ${SaiCore_QRC_FILE})
else()
qt_add_resources(SaiCore_RESOURCES ${SaiCore_QRC_FILE})
endif()
target_sources(${PROJECT_NAME} PRIVATE ${SaiCore_RESOURCES})
# ==========================================================================
# Translations
# ==========================================================================
file(GLOB SaiCore_TS_FILES ${SaiCore_TS_DIR}/*.ts)
set_source_files_properties(${SaiCore_TS_FILES} PROPERTIES OUTPUT_LOCATION ${PROJECT_BINARY_DIR}/i18n)
if(Qt5_VERSION AND Qt5_VERSION VERSION_LESS "5.15")
qt5_add_translation(QM_FILES ${SaiCore_TS_FILES})
else()
qt_add_translation(QM_FILES ${SaiCore_TS_FILES})
endif()
target_sources(${PROJECT_NAME} PRIVATE ${QM_FILES} ${SaiCore_TS_FILES})
# ==========================================================================
# Installation
# ==========================================================================
include(GNUInstallDirs)
# set relative install paths
if(CMAKE_INSTALL_PREFIX STREQUAL "/opt")
set(SaiCore_INSTALL_SYSCONFDIR ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}/etc)
set(SaiCore_INSTALL_DATADIR ${PROJECT_NAME})
set(CMAKE_INSTALL_BINDIR "/usr/bin")
set(CMAKE_INSTALL_DATAROOTDIR "/usr/share")
else()
set(SYSCONF_INSTALL_DIR ${CMAKE_INSTALL_FULL_SYSCONFDIR} CACHE PATH
"Install directory for system-wide configuration files")
set(SaiCore_INSTALL_SYSCONFDIR ${SYSCONF_INSTALL_DIR}/${PROJECT_NAME})
set(SaiCore_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
endif()
# set absolute install paths
set(SaiCore_ETC_PREFIX "${SaiCore_INSTALL_SYSCONFDIR}")
set(SaiCore_APP_PREFIX "${CMAKE_INSTALL_PREFIX}/${SaiCore_INSTALL_DATADIR}")
set(SaiCore_TPL_PREFIX "${SaiCore_APP_PREFIX}/template")
message(STATUS "SaiCore ETC_PREFIX is " ${SaiCore_ETC_PREFIX})
message(STATUS "SaiCore APP_PREFIX is " ${SaiCore_APP_PREFIX})
message(STATUS "SaiCore TPL_PREFIX is " ${SaiCore_TPL_PREFIX})
target_compile_definitions(${PROJECT_NAME} PRIVATE
SaiCore_FHS_LAYOUT
SaiCore_ETC_PREFIX=${SaiCore_ETC_PREFIX}
SaiCore_APP_PREFIX=${SaiCore_APP_PREFIX}
SaiCore_TPL_PREFIX=${SaiCore_TPL_PREFIX}
)
# install files
install(TARGETS ${PROJECT_NAME} RUNTIME)
install(DIRECTORY ${SaiCore_FONT_DIR} DESTINATION ${SaiCore_INSTALL_DATADIR})
install(DIRECTORY ${SaiCore_LIBRARY_DIR} DESTINATION ${SaiCore_INSTALL_DATADIR})
install(DIRECTORY ${SaiCore_STARTUP_HINTS} DESTINATION ${SaiCore_INSTALL_DATADIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/i18n DESTINATION ${SaiCore_INSTALL_DATADIR})
install(FILES ${SaiCore_ETC_FILE} DESTINATION ${SaiCore_INSTALL_SYSCONFDIR})
install(FILES ${SaiCore_TEMPLATE_FILE} DESTINATION ${SaiCore_INSTALL_DATADIR}/template)
install(FILES ${SaiCore_ICON_FILE} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps)
install(FILES ${SaiCore_DESKTOP_FILE} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
install(FILES ${SaiCore_MIMETYPE_FILE} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mime/packages)
install(FILES ${SaiCore_MIMEICON_FILE} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/mimetypes)
# ==========================================================================
# Packaging
# ==========================================================================
include(InstallRequiredSystemLibraries)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_VERSION "${VERSION}")
set(CPACK_PACKAGE_NAME "saicore")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "SaiCore — ПО для интерактивных панелей и досок")
set(CPACK_PACKAGE_VENDOR "ООО «КАРУМА»")
set(CPACK_PACKAGE_CONTACT "support@saicore.ru")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://saicore.ru")
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/images/ch.SaiCore.SaiCore.svg")
set(CPACK_STRIP_FILES TRUE)
set(CPACK_PACKAGE_INSTALL_DIRECTORY "SaiCore")
# Debian specific settings (Astra Linux)
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
set(CPACK_DEBIAN_PACKAGE_NAME "saicore")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ООО «КАРУМА» <support@saicore.ru>")
set(CPACK_DEBIAN_PACKAGE_SECTION "education")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://saicore.ru")
set(CPACK_DEBIAN_PACKAGE_SUGGESTS "onboard")
set(CPACK_DEBIAN_PACKAGE_DEPENDS
"libqt6-core (>= 6.6), libqt6-gui (>= 6.6), libqt6-widgets (>= 6.6), libqt6-network (>= 6.6), libqt6-svg (>= 6.6), libqt6-webengine (>= 6.6), libqt6-multimedia (>= 6.6), libqt6-printsupport (>= 6.6), libquazip1-qt6 (>= 1.4), libpoppler-qt6-dev (>= 22.0), libssl-dev (>= 3.0), libx11-dev, libffmpeg-dev"
)
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${CMAKE_CURRENT_SOURCE_DIR}/release_scripts/linux/debian_package_files/postinst"
"${CMAKE_CURRENT_SOURCE_DIR}/release_scripts/linux/debian_package_files/prerm"
)
# RPM specific settings (РЕД ОС)
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_NAME "saicore")
set(CPACK_RPM_PACKAGE_SUMMARY "SaiCore — ПО для интерактивных панелей и досок")
set(CPACK_RPM_PACKAGE_DESCRIPTION "SaiCore — кроссплатформенное приложение для интерактивных панелей и досок. Разработано ООО «КАРУМА».")
set(CPACK_RPM_PACKAGE_LICENSE "Proprietary")
set(CPACK_RPM_PACKAGE_VENDOR "ООО «КАРУМА»")
set(CPACK_RPM_PACKAGE_URL "https://saicore.ru")
set(CPACK_RPM_PACKAGE_GROUP "Applications/Education")
set(CPACK_RPM_PACKAGE_SUGGESTS "onboard")
set(CPACK_RPM_PACKAGE_REQUIRES
"qt6-qtbase >= 6.6, qt6-qtwebengine >= 6.6, qt6-qtmultimedia >= 6.6, qt6-qtsvg >= 6.6, quazip-qt6 >= 1.4, poppler-qt6 >= 22.0, openssl >= 3.0, libX11, ffmpeg"
)
# create packager
include(CPack)