From 5ffc06d5e735fcf9bdf5b92874292bccc88acd28 Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Mon, 14 Apr 2025 22:50:08 +0200 Subject: [PATCH] CMake: Make translations optional - Use FeatureSummary to list found dependencies in CMake output - Make it possible to build without translations by making LinguistTools optional - When Qt5LinguistTools is optional, then qtpaths would remain as a rather costly dependency on Qt5Tools just to establish PLUGINDIR Hence allow distributions/users to set PLUGINDIR manually and only fallback to qtpaths if not set - Lowercase some cmake commands for consistency - Append `src` to source directory when generating translations, otherwise build directories could be parsed too (partially cherry-picked from qt6ct 66c08b191b15ab71b206c3bbea4dcb19a26ab874) Thanks-to: Jonas Kvinge Signed-off-by: Andreas Sturmlechner --- CMakeLists.txt | 45 +++++++++++++++++++++------------------- src/qt5ct/CMakeLists.txt | 5 ++++- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 59256fd..814757e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,13 +3,14 @@ cmake_minimum_required(VERSION 3.11.0) project(qt5ct LANGUAGES CXX) include(GNUInstallDirs) +include(FeatureSummary) -CONFIGURE_FILE( +configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) -ADD_CUSTOM_TARGET(uninstall +add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") set(CMAKE_CXX_STANDARD 11) @@ -25,9 +26,9 @@ set(QT_MINIMUM_VERSION "5.15.0") option(DISABLE_DBUS "disable D-Bus support (global menu and D-Bus tray icon implementation)" OFF) -ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=0x050C00 -DUSE_WIDGETS) +add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050C00 -DUSE_WIDGETS) -find_package(Qt5 ${QT_MINIMUM_VERSION} COMPONENTS Widgets Concurrent LinguistTools REQUIRED) +find_package(Qt5 ${QT_MINIMUM_VERSION} REQUIRED COMPONENTS Core Widgets Concurrent OPTIONAL_COMPONENTS LinguistTools) find_package(Qt5Gui ${QT_MINIMUM_VERSION} CONFIG REQUIRED Private) if(NOT DISABLE_DBUS) @@ -37,29 +38,29 @@ else() message(STATUS "D-Bus support: Disabled") endif() -get_target_property(QT_LRELEASE_EXECUTABLE Qt5::lrelease IMPORTED_LOCATION) - -if(QT_LRELEASE_EXECUTABLE) - message(STATUS "Found lrelease executable: " ${QT_LRELEASE_EXECUTABLE}) -else() - message(FATAL_ERROR "Could NOT find lrelease executable") +if(Qt5LinguistTools_FOUND) + message(STATUS "Generating translations ...") + get_target_property(QT_LRELEASE_EXECUTABLE Qt5::lrelease IMPORTED_LOCATION) + execute_process(COMMAND find ${CMAKE_CURRENT_SOURCE_DIR}/src -name *.ts COMMAND xargs ${QT_LRELEASE_EXECUTABLE} -silent) endif() -get_filename_component(QT_QTPATHS_EXECUTABLE ${QT_LRELEASE_EXECUTABLE} DIRECTORY) -set(QT_QTPATHS_EXECUTABLE ${QT_QTPATHS_EXECUTABLE}/qtpaths) +if(Qt5LinguistTools_FOUND AND NOT PLUGINDIR) + get_filename_component(QT_QTPATHS_EXECUTABLE ${QT_LRELEASE_EXECUTABLE} DIRECTORY) + set(QT_QTPATHS_EXECUTABLE ${QT_QTPATHS_EXECUTABLE}/qtpaths) -if(EXISTS ${QT_QTPATHS_EXECUTABLE}) - message(STATUS "Found qtpaths executable: " ${QT_QTPATHS_EXECUTABLE}) -else() - message(FATAL_ERROR "Could NOT find qtpaths executable") + if(EXISTS ${QT_QTPATHS_EXECUTABLE}) + message(STATUS "Found qtpaths executable: " ${QT_QTPATHS_EXECUTABLE}) + else() + message(FATAL_ERROR "Could NOT find qtpaths executable") + endif() + + execute_process(COMMAND ${QT_QTPATHS_EXECUTABLE} --plugin-dir OUTPUT_VARIABLE PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE) +elseif(NOT Qt5LinguistTools_FOUND AND NOT PLUGINDIR) + message(FATAL_ERROR "PLUGINDIR not provided and Qt5LinguistTools not found - aborting.") endif() -execute_process(COMMAND ${QT_QTPATHS_EXECUTABLE} --plugin-dir OUTPUT_VARIABLE PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Plugin path: " ${PLUGINDIR}) -message(STATUS "Generating translations ...") -execute_process(COMMAND find ${CMAKE_CURRENT_SOURCE_DIR} -name *.ts COMMAND xargs ${QT_LRELEASE_EXECUTABLE} -silent) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/qt5ct-common) add_link_options(-Wl,--no-undefined) @@ -108,4 +109,6 @@ if(UNIX) ARGS -rf ${CMAKE_CURRENT_BINARY_DIR}/doc/html TARGET distclean ) -endif(UNIX) +endif() + +feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/src/qt5ct/CMakeLists.txt b/src/qt5ct/CMakeLists.txt index 78535e3..3249e21 100644 --- a/src/qt5ct/CMakeLists.txt +++ b/src/qt5ct/CMakeLists.txt @@ -24,9 +24,12 @@ set(app_SRCS qsseditordialog.ui qsspage.ui troubleshootingpage.ui - translations/translations.qrc ) +if(Qt5LinguistTools_FOUND) + list(APPEND app_SRCS translations/translations.qrc) +endif() + add_executable(qt5ct ${app_SRCS}) target_link_libraries(qt5ct PRIVATE Qt5::Widgets Qt5::Concurrent Qt5::WidgetsPrivate qt5ct-common) install(TARGETS qt5ct DESTINATION ${CMAKE_INSTALL_BINDIR}) -- 2.49.0