277 lines
11 KiB
CMake
277 lines
11 KiB
CMake
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)
|