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 -B -DCMAKE_INSTALL_PREFIX:PATH=/usr # or # cmake -S -B -DCMAKE_INSTALL_PREFIX:PATH=/opt # # Build # cd # cmake --build . [-j] # # Package # cpack -G # ========================================================================== # ========================================================================== # 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 "ООО «КАРУМА» ") 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)