# SPDX-FileCopyrightText: 2025 Felix Morgner # SPDX-License-Identifier: LGPL-2.1-only option(TURNS_ENABLE_GUI_TESTS "Enable building and execution of the GUI tests" ON) find_package("Gettext" REQUIRED) # Resources file(GLOB UI_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/ui" CONFIGURE_DEPENDS "ui/*.ui") file(GLOB STYLE_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/ui" CONFIGURE_DEPENDS "ui/*.css") file(GLOB LANGUAGES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/lang" CONFIGURE_DEPENDS "lang/*.po") add_library("resources" OBJECT) target_link_libraries("resources" PUBLIC "PkgConfig::glib" ) glib_add_resources("resources" NAME "ui" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ui" PREFIX "/ch/arknet/Turns" XML_FILES ${UI_SOURCES} CSS_FILES ${STYLE_SOURCES} ) glib_add_resources("resources" NAME "metainfo" PREFIX "/ch/arknet/Turns" XML_FILES "metainfo.xml" ) list(TRANSFORM LANGUAGES REPLACE "\.po" "") foreach(LANGUAGE IN LISTS LANGUAGES) set(OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/locale/${LANGUAGE}/LC_MESSAGES") set(OUTPUT_FILE "${OUTPUT_DIRECTORY}/turns.mo") add_custom_command(OUTPUT "${OUTPUT_FILE}" COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "${OUTPUT_DIRECTORY}" COMMAND "${GETTEXT_MSGFMT_EXECUTABLE}" "-D" "${CMAKE_CURRENT_SOURCE_DIR}/lang" "-o" "${OUTPUT_FILE}" "${LANGUAGE}.po" COMMENT "Generating translations for ${LANGUAGE}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/lang/${LANGUAGE}.po" ) target_sources("resources" PRIVATE "${OUTPUT_FILE}") endforeach() install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/locale" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" ) target_compile_definitions("resources" PUBLIC "LOCALEDIR=\"$,${CMAKE_INSTALL_FULL_LOCALEDIR},${CMAKE_CURRENT_BINARY_DIR}/locale>\"" ) # Library add_library("gui_impl" "src/init.cpp" "src/participant_editor.cpp" "src/participant_row.cpp" "src/preferences.cpp" "src/settings.cpp" "src/tracker.cpp" "src/turn_order_view.cpp" ) target_include_directories("gui_impl" PUBLIC "include" ) target_link_libraries("gui_impl" PUBLIC "resources" "adwaitamm::adwaitamm" "turns::mm" "PkgConfig::glib" "PkgConfig::glibmm" ) target_compile_definitions("gui_impl" PUBLIC "$<$>:SCHEMADIR=\"${CMAKE_CURRENT_BINARY_DIR}\">" "TURNS_VERSION_FULL=\"${PROJECT_VERSION}\"" ) enable_coverage("gui_impl") glib_add_schemas("gui_impl") # Application add_executable("gui" "src/main.cpp") add_executable("turns::gui" ALIAS "gui") target_compile_features("gui" PUBLIC "c_std_23" "cxx_std_23" ) target_include_directories("gui" PUBLIC "$" ) target_link_libraries("gui" PUBLIC "gui_impl" "$<$:-Wl,--whole-archive>" "resources" "$<$:-Wl,--no-whole-archive>" ) set_target_properties("gui" PROPERTIES OUTPUT_NAME "turns" INTERPROCEDURAL_OPTIMIZATION "${TURNS_CAN_DO_IPO}" C_EXTENSIONS OFF CXX_EXTENSIONS OFF ) configure_file("desktop.in" "ch.arknet.Turns.desktop") configure_file("metainfo.xml" "ch.arknet.Turns.metainfo.xml") configure_file("mime.xml" "ch.arknet.Turns.xml") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ch.arknet.Turns.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ch.arknet.Turns.metainfo.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ch.arknet.Turns.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/mime/packages" ) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/ch.arknet.Turns.gschema.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas" ) install(TARGETS "gui") # Tests if(TURNS_ENABLE_GUI_TESTS) add_executable("gui-tests" "tests/main.cpp" "tests/messages.cpp" "tests/participant_editor.cpp" "tests/participant_row.cpp" "tests/resources.cpp" ) target_link_libraries("gui-tests" PRIVATE "gui_impl" "Catch2::Catch2" "$<$:-Wl,--whole-archive>" "resources" "$<$:-Wl,--no-whole-archive>" ) target_compile_definitions("resources" PUBLIC "TESTLOCALEDIR=\"${CMAKE_CURRENT_BINARY_DIR}/locale\"" ) catch_discover_tests("gui-tests") endif()