From db6d3aba38e6e73f0cc349f6fd242aac9a62f6a3 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 21 Nov 2024 22:29:04 +0500 Subject: [PATCH] Make Qt base translation embedding disableable --- src/qt/CMakeLists.txt | 70 +++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a99209273..d7ea91f70 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -455,46 +455,52 @@ if (UNIX AND NOT APPLE AND NOT HAIKU) endif() endif() -# Get the Qt translations directory -get_target_property(QT_QMAKE_EXECUTABLE Qt${QT_MAJOR}::qmake IMPORTED_LOCATION) -execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATIONS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) +option(EMBED_QTBASE_TRANSLATIONS "Embed the base Qt translations into the executable" ON) + +if (EMBED_QTBASE_TRANSLATIONS) + # Get the Qt translations directory + get_target_property(QT_QMAKE_EXECUTABLE Qt${QT_MAJOR}::qmake IMPORTED_LOCATION) + execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS OUTPUT_VARIABLE QT_TRANSLATIONS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) +endif() set(QM_FILES) file(GLOB po_files "${CMAKE_CURRENT_SOURCE_DIR}/languages/*.po") foreach(po_file ${po_files}) get_filename_component(PO_FILE_NAME ${po_file} NAME_WE) - # Get the language and country - string(REGEX MATCH "^[a-z]+" PO_LANGUAGE ${PO_FILE_NAME}) - string(REGEX MATCH "[A-Z]+$" PO_COUNTRY ${PO_FILE_NAME}) + if (EMBED_QTBASE_TRANSLATIONS) + # Get the language and country + string(REGEX MATCH "^[a-z]+" PO_LANGUAGE ${PO_FILE_NAME}) + string(REGEX MATCH "[A-Z]+$" PO_COUNTRY ${PO_FILE_NAME}) - # Find the base Qt translation for the language and country - set(qt_translation_file_dest "qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") - if (EXISTS "${QT_TRANSLATIONS_DIR}/qtbase_${PO_LANGUAGE}_${PO_COUNTRY}.qm") - set(qt_translation_file "qtbase_${PO_LANGUAGE}_${PO_COUNTRY}.qm") - # Fall back to just the language if country isn't found - elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qtbase_${PO_LANGUAGE}.qm") - set(qt_translation_file "qtbase_${PO_LANGUAGE}.qm") - # If the translation is still not found, try the legacy Qt one - elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") - set(qt_translation_file "qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") - # Fall back to just the language again - elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qt_${PO_LANGUAGE}.qm") - set(qt_translation_file "qt_${PO_LANGUAGE}.qm") - else() - unset(qt_translation_file) - endif() - - # Copy the translation file to the build directory - if (qt_translation_file) - file(COPY "${QT_TRANSLATIONS_DIR}/${qt_translation_file}" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - if (NOT (qt_translation_file STREQUAL qt_translation_file_dest)) - # Rename the file for consistency - file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file}" "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file_dest}") + # Find the base Qt translation for the language and country + set(qt_translation_file_dest "qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") + if (EXISTS "${QT_TRANSLATIONS_DIR}/qtbase_${PO_LANGUAGE}_${PO_COUNTRY}.qm") + set(qt_translation_file "qtbase_${PO_LANGUAGE}_${PO_COUNTRY}.qm") + # Fall back to just the language if country isn't found + elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qtbase_${PO_LANGUAGE}.qm") + set(qt_translation_file "qtbase_${PO_LANGUAGE}.qm") + # If the translation is still not found, try the legacy Qt one + elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") + set(qt_translation_file "qt_${PO_LANGUAGE}_${PO_COUNTRY}.qm") + # Fall back to just the language again + elseif (EXISTS "${QT_TRANSLATIONS_DIR}/qt_${PO_LANGUAGE}.qm") + set(qt_translation_file "qt_${PO_LANGUAGE}.qm") + else() + unset(qt_translation_file) + endif() + + # Copy the translation file to the build directory + if (qt_translation_file) + file(COPY "${QT_TRANSLATIONS_DIR}/${qt_translation_file}" DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + if (NOT (qt_translation_file STREQUAL qt_translation_file_dest)) + # Rename the file for consistency + file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file}" "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file_dest}") + endif() + # Add the file to the translations list + string(APPEND QT_TRANSLATIONS_LIST " ${qt_translation_file_dest}\n") + list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file_dest}") endif() - # Add the file to the translations list - string(APPEND QT_TRANSLATIONS_LIST " ${qt_translation_file_dest}\n") - list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/${qt_translation_file_dest}") endif() add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm"