diff --git a/cmake/Modules/FindQtTranslations.cmake b/cmake/Modules/FindQtTranslations.cmake new file mode 100644 index 000000000..4a5b0b99d --- /dev/null +++ b/cmake/Modules/FindQtTranslations.cmake @@ -0,0 +1,25 @@ +# Return Qt translations files as list of paths +# It will return .qm files of qt/qtbase that aren't stub files. +# Requires that Qt has been found first because it depends on qmake being available + +function(qbt_get_qt_translations qt_translations) + get_target_property(QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION) + execute_process(COMMAND "${QT_QMAKE_EXECUTABLE}" -query QT_INSTALL_TRANSLATIONS + OUTPUT_VARIABLE QT_TRANSLATIONS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) + + FILE(GLOB QT_TEMP_TRANSLATIONS CONFIGURE_DEPENDS + "${QT_TRANSLATIONS_DIR}/qt_??.qm" + "${QT_TRANSLATIONS_DIR}/qt_??_??.qm" + "${QT_TRANSLATIONS_DIR}/qtbase_??.qm" + "${QT_TRANSLATIONS_DIR}/qtbase_??_??.qm") + + foreach(TRANSLATION ${QT_TEMP_TRANSLATIONS}) + FILE(SIZE "${TRANSLATION}" translation_size) + # Consider files less than 10KB as stub translations + if (translation_size GREATER_EQUAL 10240) + list(APPEND QT_FINAL_TRANSLATIONS "${TRANSLATION}") + endif() + endforeach() + + SET(${qt_translations} ${QT_FINAL_TRANSLATIONS} PARENT_SCOPE) +endfunction() diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 036e5d999..93e5ea4e9 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -16,11 +16,6 @@ if (WEBUI) "${qBittorrent_BINARY_DIR}/src/webui/www/translations/webui_translations.qrc" COPYONLY) endif() -FILE(GLOB QT_TRANSLATIONS "${qBittorrent_SOURCE_DIR}/dist/qt-translations/qtbase_*.qm") -foreach(EXTRA_TRANSLATION IN ITEMS "fa" "gl" "lt" "pt" "sl" "sv" "zh_CN") - list(APPEND QT_TRANSLATIONS "${qBittorrent_SOURCE_DIR}/dist/qt-translations/qt_${EXTRA_TRANSLATION}.qm") -endforeach() - # Executable target configuration # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- @@ -65,16 +60,17 @@ endif() # Additional platform specific configuration # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- -set_source_files_properties(${QT_TRANSLATIONS} PROPERTIES MACOSX_PACKAGE_LOCATION translations) -set_source_files_properties( - "${qBittorrent_SOURCE_DIR}/dist/mac/qt.conf" - "${qBittorrent_SOURCE_DIR}/dist/mac/qBitTorrentDocument.icns" - "${qBittorrent_SOURCE_DIR}/dist/mac/qbittorrent_mac.icns" - PROPERTIES - MACOSX_PACKAGE_LOCATION Resources -) - if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + include(FindQtTranslations) + qbt_get_qt_translations(QT_TRANSLATIONS) + set_source_files_properties(${QT_TRANSLATIONS} PROPERTIES MACOSX_PACKAGE_LOCATION translations) + set_source_files_properties( + "${qBittorrent_SOURCE_DIR}/dist/mac/qt.conf" + "${qBittorrent_SOURCE_DIR}/dist/mac/qBitTorrentDocument.icns" + "${qBittorrent_SOURCE_DIR}/dist/mac/qbittorrent_mac.icns" + PROPERTIES + MACOSX_PACKAGE_LOCATION Resources + ) # provide variables for substitution in dist/mac/Info.plist get_target_property(EXECUTABLE_NAME qbt_app OUTPUT_NAME) # This variable name should be changed once qmake is no longer used. Refer to the discussion in PR #14813