PageRenderTime 26ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/translations/CMakeLists.txt

https://gitlab.com/f3822/qttranslations
CMake | 155 lines | 118 code | 20 blank | 17 comment | 8 complexity | 09b3685b6f0dd81493bc0c13affb0539 MD5 | raw file
  1. # special case skip regeneration
  2. add_custom_target(ts-all)
  3. set(repo_root_directory "${CMAKE_CURRENT_SOURCE_DIR}/../..")
  4. set(en_ts_file_dir "${CMAKE_CURRENT_BINARY_DIR}/en_ts")
  5. # Create a rudimentary .ts file in ${en_ts_file_dir}.
  6. function(generate_empty_ts_file file_name)
  7. if(NOT EXISTS "${en_ts_file_dir}/${file_name}")
  8. file(WRITE "${en_ts_file_dir}/${file_name}" "<TS></TS>")
  9. endif()
  10. endfunction()
  11. function(add_ts_target target input_file output_file)
  12. add_custom_target(${target}
  13. COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::lupdate -locations relative -no-ui-lines -no-sort "@${input_file}" -ts ${output_file}
  14. )
  15. endfunction()
  16. function(add_ts_targets catalog)
  17. cmake_parse_arguments(arg "" "" "DIRECTORIES" ${ARGN})
  18. generate_empty_ts_file("${catalog}_en.ts")
  19. file(GLOB ts_files "${catalog}_*.ts")
  20. set(languages)
  21. foreach(file IN LISTS ts_files)
  22. if(file MATCHES "([a-z][a-z](_[A-Z][A-Z])?).ts$")
  23. list(APPEND languages ${CMAKE_MATCH_1})
  24. endif()
  25. endforeach()
  26. set(file_list)
  27. foreach(dir IN LISTS arg_DIRECTORIES)
  28. set(dir_path "${repo_root_directory}/${dir}")
  29. if (NOT IS_DIRECTORY ${dir_path})
  30. message(WARNING "Directory '${dir_path}' for ${catalog} does not exist. Skipping...")
  31. continue()
  32. endif()
  33. file(GLOB_RECURSE catalog_files "${dir_path}/**")
  34. list(APPEND file_list ${catalog_files})
  35. endforeach()
  36. if (NOT file_list)
  37. message(WARNING "No source files located for ${catalog}, skipping target creation")
  38. return()
  39. endif()
  40. set(source_files_list_file "${CMAKE_CURRENT_BINARY_DIR}/${catalog}_file_list.txt")
  41. set(inclusion_regex "\\.h$|\\.cpp$|\\.hpp$|\\.cxx$|\\.cc$|\\.mm$|\\.qml$|\\.ui$")
  42. list(FILTER file_list INCLUDE REGEX "${inclusion_regex}")
  43. list(FILTER file_list EXCLUDE REGEX /doc/snippets/)
  44. list(JOIN file_list "\n" file_list_string)
  45. file(GENERATE
  46. OUTPUT "${source_files_list_file}"
  47. CONTENT "${file_list_string}"
  48. )
  49. add_custom_target(ts-${catalog}-all)
  50. add_dependencies(ts-all ts-${catalog}-all)
  51. foreach(lang IN LISTS languages)
  52. set(lang_target_name ts-${catalog}-${lang})
  53. add_ts_target(${lang_target_name}
  54. ${source_files_list_file}
  55. "${CMAKE_CURRENT_SOURCE_DIR}/${catalog}_${lang}.ts"
  56. )
  57. add_dependencies(ts-${catalog}-all ${lang_target_name})
  58. if(NOT TARGET ts-${lang})
  59. add_custom_target(ts-${lang})
  60. endif()
  61. add_dependencies(ts-${lang} ${lang_target_name})
  62. endforeach()
  63. add_ts_target(ts-${catalog}-untranslated
  64. ${source_files_list_file}
  65. "${CMAKE_CURRENT_SOURCE_DIR}/${catalog}_untranslated.ts"
  66. )
  67. add_dependencies(ts-${catalog}-all ts-${catalog}-untranslated)
  68. endfunction()
  69. # Create the English "translation" for "qt".
  70. generate_empty_ts_file("qt_en.ts")
  71. # Create TS targets
  72. add_ts_targets(qtbase
  73. DIRECTORIES
  74. qtbase/src
  75. qtactiveqt/src # just 4 strings from QAxSelect
  76. qtimageformats/src # just 10 error messages from tga reader. uses bad context.
  77. )
  78. add_ts_targets(qtdeclarative DIRECTORIES qtdeclarative/src)
  79. add_ts_targets(qtquickcontrols2 DIRECTORIES qtquickcontrols2/src)
  80. add_ts_targets(qtmultimedia DIRECTORIES qtmultimedia/src)
  81. #add_ts_targets(qtsvg DIRECTORIES qtsvg/src) # empty
  82. #add_ts_targets(qtwebkit DIRECTORIES qtwebkit) # messages from test browser only
  83. #add_ts_targets(qt3d DIRECTIORIES qt3d/src) # empty except one dubious error message
  84. add_ts_targets(qtconnectivity DIRECTORIES qtconnectivity/src)
  85. #add_ts_targets(qtdocgallery DIRECTORIES qtdocgallery/src) # dead module
  86. #add_ts_targets(qtfeedback DIRECTORIES qtfeedback/src) # empty
  87. #add_ts_targets(qtjsondb DIRECTORIES qtjsondb/src) # dead module, just 3 error messages
  88. add_ts_targets(qtlocation DIRECTORIES qtlocation/src)
  89. #add_ts_targets(qtpim DIRECTORIES qtpim/src) # not released with qt
  90. #add_ts_targets(qtsensors DIRECTORIES qtsensors/src) # empty
  91. #add_ts_targets(qtsystems DIRECTORIES qtsystems/src) # not released with qt
  92. add_ts_targets(qtwebsockets DIRECTORIES qtwebsockets/src)
  93. add_ts_targets(qtserialport DIRECTORIES qtserialport/src)
  94. add_ts_targets(qtwebengine DIRECTORIES qtwebengine/src)
  95. add_ts_targets(designer DIRECTORIES qttools/src/designer
  96. qttools/src/shared/deviceskin
  97. qttools/src/shared/findwidget
  98. qttools/src/shared/fontpanel
  99. qttools/src/shared/qtgradienteditor
  100. qttools/src/shared/qtpropertybrowser
  101. qttools/src/shared/qttoolbardialog)
  102. add_ts_targets(linguist DIRECTORIES qttools/src/linguist/linguist)
  103. add_ts_targets(assistant DIRECTORIES qttools/src/assistant/assistant
  104. qttools/src/shared/fontpanel) # add qcollectiongenerator here as well?
  105. add_ts_targets(qt_help DIRECTORIES qttools/src/assistant/help)
  106. #add_ts_targets(qmlscene DIRECTORIES qtdeclarative/tools/qmlscene) # almost empty due to missing tr()
  107. # Create check target
  108. add_custom_target(check-ts
  109. COMMAND perl check-ts.pl
  110. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  111. )
  112. add_dependencies(check-ts ts-all)
  113. # Update and install qm command
  114. add_custom_target(updateqm ALL)
  115. file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.ts")
  116. file(GLOB en_ts_files "${en_ts_file_dir}/*.ts")
  117. list(APPEND ts_files ${en_ts_files})
  118. if(QT_WILL_INSTALL)
  119. set(qm_output_dir "${QT_BUILD_DIR}/${INSTALL_TRANSLATIONSDIR}")
  120. else()
  121. set(qm_output_dir "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_TRANSLATIONSDIR}")
  122. endif()
  123. set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION "${qm_output_dir}")
  124. qt_add_lrelease(updateqm
  125. TS_FILES ${ts_files}
  126. NO_GLOBAL_TARGET
  127. QM_FILES_OUTPUT_VARIABLE qm_files
  128. OPTIONS "-silent")
  129. qt_install(FILES ${qm_files} DESTINATION "${INSTALL_TRANSLATIONSDIR}")
  130. # Custom target to add modified ts files to git
  131. add_custom_target(stage-ts
  132. COMMAND ${CMAKE_COMMAND} -DLCONVERT_BIN="$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::lconvert>" -P ${CMAKE_CURRENT_SOURCE_DIR}/git-stage-script.cmake
  133. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  134. COMMAND_EXPAND_LISTS
  135. )