From c70bad117607af272f5b96a05d938830c286645b Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Dec 2018 22:05:25 +0100 Subject: cmake/i18n: simplify lupdate/lrelease invocations This cuts down build time by half, to 20 seconds. Barely any of that time is spent in i18n targets now. Ninja builds aren't affected. --- cmake/opentrack-i18n.cmake | 71 ++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/cmake/opentrack-i18n.cmake b/cmake/opentrack-i18n.cmake index b98a469b..d08f9a99 100644 --- a/cmake/opentrack-i18n.cmake +++ b/cmake/opentrack-i18n.cmake @@ -1,69 +1,60 @@ include_guard(GLOBAL) -add_custom_target(i18n ALL) add_custom_target(i18n-lupdate) -add_custom_target(i18n-lrelease) -add_dependencies(i18n-lrelease i18n-lupdate) -add_dependencies(i18n i18n-lrelease) +add_custom_target(i18n-lrelease DEPENDS i18n-lupdate) +add_custom_target(i18n ALL DEPENDS i18n-lrelease) function(otr_i18n_for_target_directory n) set(k "opentrack-${n}") get_property(lupdate-binary TARGET "${Qt5_LUPDATE_EXECUTABLE}" PROPERTY IMPORTED_LOCATION) - set(target-names "") #make_directory("${CMAKE_CURRENT_BINARY_DIR}/lang") + set(ts-files "") + foreach(k ${opentrack_all-translations}) + list(APPEND ts-files "lang/${k}.ts") + set_property(GLOBAL APPEND PROPERTY "opentrack-ts-files-${k}" "${CMAKE_CURRENT_SOURCE_DIR}/lang/${k}.ts") + endforeach() + set(stamp "${CMAKE_CURRENT_BINARY_DIR}/lupdate.stamp") + foreach(i ${opentrack_all-translations}) set(t "${CMAKE_CURRENT_SOURCE_DIR}/lang/${i}.ts") - set(t2 "${i}.ts") set(input "${${k}-all}") if (NOT EXISTS "${t}") file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lang") file(READ "${CMAKE_SOURCE_DIR}/cmake/translation-stub.ts" stub) file(WRITE "${t}" "${stub}") endif() - add_custom_command(OUTPUT "${t2}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/lang" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/lang" - COMMAND "${lupdate-binary}" - -I "${CMAKE_SOURCE_DIR}" - -silent - -recursive - -no-obsolete - -locations none - . - -ts "${t}" - COMMAND "${CMAKE_COMMAND}" -E copy "${t}" "${CMAKE_CURRENT_BINARY_DIR}/${t2}" - DEPENDS "${k}" "${t}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Running lupdate for ${n}/${i}") - set(target-name "i18n-lang-${i}-ts-${n}") - list(APPEND target-names "${target-name}") - add_custom_target(${target-name} DEPENDS "${t2}" COMMENT "") - set_property(GLOBAL APPEND PROPERTY "opentrack-ts-files-${i}" "${CMAKE_CURRENT_BINARY_DIR}/${t2}") - set_property(GLOBAL APPEND PROPERTY "opentrack-ts-module-${n}" "${target-name}") - add_dependencies(i18n-lupdate "${target-name}") endforeach() + + add_custom_command(OUTPUT "${stamp}" + COMMAND "${lupdate-binary}" + -I "${CMAKE_SOURCE_DIR}" + -silent + -recursive + -no-obsolete + -locations none + . + -ts ${ts-files} + COMMAND "${CMAKE_COMMAND}" -E touch "${stamp}" + DEPENDS ${${k}-cc} ${${k}-hh} ${${k}-uih} ${${k}-moc} + COMMENT "Running lupdate for ${n}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + set(target-name "i18n-module-${n}") + add_custom_target(${target-name} DEPENDS "${stamp}" COMMENT "") + add_dependencies(i18n-lupdate ${target-name}) endfunction() function(otr_merge_translations) otr_escape_string(i18n-pfx "${opentrack-i18n-pfx}") install(CODE "file(REMOVE_RECURSE \"\${CMAKE_INSTALL_PREFIX}/${i18n-pfx}\")") - set(all-ts-targets "") - - get_property(all-modules GLOBAL PROPERTY opentrack-all-modules) - foreach(target ${all-modules}) - get_property(ts-targets GLOBAL PROPERTY "opentrack-ts-module-${target}") - list(APPEND all-ts-targets "${ts-targets}") - endforeach() - foreach(i ${opentrack_all-translations}) get_property(ts-files GLOBAL PROPERTY "opentrack-ts-files-${i}") get_property(lrelease-binary TARGET "${Qt5_LRELEASE_EXECUTABLE}" PROPERTY IMPORTED_LOCATION) - set(qm-output "${i}.qm") + set(qm-output "${CMAKE_BINARY_DIR}/${i}.qm") # whines about duplicate messages since tracker-pt-base is static if(WIN32) @@ -80,15 +71,15 @@ function(otr_merge_translations) ${ts-files} -qm "${qm-output}" ${to-null} - DEPENDS ${all-ts-targets} + DEPENDS ${ts-files} i18n-lupdate COMMENT "Running lrelease for ${i}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") - set(target-name "i18n-qm-${i}") + set(target-name i18n-qm-${i}) add_custom_target("${target-name}" DEPENDS "${qm-output}") - add_dependencies(i18n-lrelease "${target-name}") + add_dependencies(i18n-lrelease ${target-name}) - install(FILES "${CMAKE_BINARY_DIR}/${qm-output}" + install(FILES "${qm-output}" DESTINATION "${CMAKE_INSTALL_PREFIX}/${opentrack-i18n-pfx}" PERMISSIONS ${opentrack-perms-file}) endforeach() -- cgit v1.2.3