Warning, /frameworks/ki18n/cmake/KF6I18nMacros.cmake.in is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2006 Alexander Neundorf <neundorf@kde.org> 0002 # 0003 # SPDX-License-Identifier: BSD-3-Clause 0004 0005 find_package(Gettext REQUIRED) 0006 0007 # The Python executable used for building ki18n will be used as a fallback 0008 # solution if it cannot be found in $PATH when building applications. 0009 set(_KI18N_PYTHON_EXECUTABLE "@Python3_EXECUTABLE@") 0010 0011 find_program(KI18N_PYTHON_EXECUTABLE NAMES python3 python2 python) 0012 if(NOT KI18N_PYTHON_EXECUTABLE) 0013 set(KI18N_PYTHON_EXECUTABLE "${_KI18N_PYTHON_EXECUTABLE}") 0014 endif() 0015 0016 set(_ki18n_pmap_compile_script ${CMAKE_CURRENT_LIST_DIR}/ts-pmap-compile.py) 0017 set(_ki18n_uic_script ${CMAKE_CURRENT_LIST_DIR}/kf6i18nuic.cmake) 0018 set(_ki18n_build_pofiles_script ${CMAKE_CURRENT_LIST_DIR}/build-pofiles.cmake) 0019 set(_ki18n_build_tsfiles_script ${CMAKE_CURRENT_LIST_DIR}/build-tsfiles.cmake) 0020 0021 # Creates the implementation files from the ui files and adds them to the list of sources, 0022 # either to the variable of the given name or, since KF 5.62, if the given argument is 0023 # a target (must not be an alias), to the list of private sources of that target. 0024 # 0025 # ki18n_wrap_ui(<sources_var_name(|target (since 5.62))> 0026 # [<ui_file> [...]] 0027 # ) 0028 # 0029 # Example usages: 0030 # 0031 # ki18n_wrap_ui(foo_SRCS ${ui_files}) 0032 # ki18n_wrap_ui(foo ${ui_files}) 0033 # 0034 macro (KI18N_WRAP_UI _sources ) 0035 if(NOT TARGET Qt6::uic) 0036 message(FATAL_ERROR "Qt6Widgets should be found before calling ki18n_wrap_ui(). Please add find_package(Qt6Widgets ...)") 0037 endif() 0038 if (TARGET ${_sources}) 0039 get_target_property(aliased_target ${_sources} ALIASED_TARGET) 0040 if(aliased_target) 0041 message(FATAL_ERROR "Target argument passed to ki18n_wrap_ui must not be an alias: ${_sources}") 0042 endif() 0043 endif() 0044 0045 foreach (_current_FILE ${ARGN}) 0046 0047 get_filename_component(_tmp_FILE ${_current_FILE} ABSOLUTE) 0048 if(NOT EXISTS ${_tmp_FILE}) 0049 message(SEND_ERROR 0050 " Cannot find ui file:\n \n" 0051 " ${_current_FILE}\n") 0052 endif() 0053 get_filename_component(_basename ${_tmp_FILE} NAME_WE) 0054 set(_header ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.h) 0055 0056 get_target_property(QT_UIC_EXECUTABLE Qt6::uic LOCATION) 0057 # we need to run uic and replace some things in the generated file 0058 # this is done by executing the cmake script kf6i18nuic.cmake 0059 add_custom_command(OUTPUT ${_header} 0060 COMMAND ${CMAKE_COMMAND} 0061 ARGS 0062 -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE} 0063 -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE} 0064 -DKDE_UIC_H_FILE:FILEPATH=${_header} 0065 -DKDE_UIC_BASENAME:STRING=${_basename} 0066 -P ${_ki18n_uic_script} 0067 MAIN_DEPENDENCY ${_tmp_FILE} 0068 ) 0069 set_source_files_properties(${_tmp_FILE} PROPERTIES SKIP_AUTOUIC ON) 0070 set_source_files_properties(${_header} PROPERTIES SKIP_AUTOMOC ON) 0071 set_source_files_properties(${_header} PROPERTIES SKIP_AUTOUIC ON) 0072 if(TARGET ${_sources}) 0073 target_sources(${_sources} PRIVATE ${_header}) 0074 else() 0075 list(APPEND ${_sources} ${_header}) 0076 endif() 0077 endforeach (_current_FILE) 0078 endmacro (KI18N_WRAP_UI) 0079 0080 option(KF_SKIP_PO_PROCESSING "Skip processing of po files" OFF) 0081 0082 # KI18N_INSTALL(podir) 0083 # Search for .po files and scripting modules and install them to the standard 0084 # location. The instalation can be skipped using the KF_SKIP_PO_PROCESSING option. 0085 # 0086 # This is a convenience function which relies on the following directory 0087 # structure: 0088 # 0089 # <podir>/ 0090 # <lang>/ 0091 # scripts/ 0092 # <domain>/ 0093 # *.js 0094 # *.po 0095 # 0096 # .po files are passed to build-pofiles.cmake 0097 # 0098 # .js files are installed using build-tsfiles.cmake 0099 # 0100 # For example, given the following directory structure: 0101 # 0102 # po/ 0103 # fr/ 0104 # scripts/ 0105 # kfoo/ 0106 # kfoo.js 0107 # kfoo.po 0108 # 0109 # KI18N_INSTALL(po) does the following: 0110 # - Compiles kfoo.po into kfoo.mo and installs it in 0111 # ${KDE_INSTALL_LOCALEDIR}/fr/LC_MESSAGES or share/locale/fr/LC_MESSAGES if 0112 # ${KDE_INSTALL_LOCALEDIR} is not set. 0113 # - Installs kfoo.js in ${KDE_INSTALL_LOCALEDIR}/fr/LC_SCRIPTS/kfoo 0114 # 0115 function(KI18N_INSTALL podir) 0116 if (KF_SKIP_PO_PROCESSING) 0117 return() 0118 endif() 0119 if (NOT KDE_INSTALL_LOCALEDIR) 0120 set(KDE_INSTALL_LOCALEDIR share/locale) 0121 endif() 0122 0123 # First try to find the po directory in the source directory, where the release scripts copy them before making the tarballs 0124 get_filename_component(absolute_podir ${podir} ABSOLUTE) 0125 0126 # we try to find the po directory in the binary directory, in case it was downloaded 0127 # using ECM 0128 if (NOT (EXISTS "${absolute_podir}" AND IS_DIRECTORY "${absolute_podir}")) 0129 get_filename_component(absolute_podir ${CMAKE_CURRENT_BINARY_DIR}/${podir} ABSOLUTE) 0130 endif() 0131 0132 if (NOT (EXISTS "${absolute_podir}" AND IS_DIRECTORY "${absolute_podir}")) 0133 # Nothing to do if there's no podir and it would create an empty 0134 # KDE_INSTALL_LOCALEDIR in that case. 0135 return() 0136 endif() 0137 0138 get_filename_component(dirname ${KDE_INSTALL_LOCALEDIR} NAME) 0139 get_filename_component(destname ${KDE_INSTALL_LOCALEDIR} DIRECTORY) 0140 string(MD5 pathmd5 ${absolute_podir}) 0141 0142 add_custom_target(pofiles-${pathmd5} ALL 0143 COMMENT "Generating mo..." 0144 COMMAND ${CMAKE_COMMAND} 0145 -DGETTEXT_MSGFMT_EXECUTABLE=${GETTEXT_MSGFMT_EXECUTABLE} 0146 -DCOPY_TO=${CMAKE_CURRENT_BINARY_DIR}/${dirname} 0147 -DPO_DIR=${absolute_podir} 0148 -P ${_ki18n_build_pofiles_script} 0149 ) 0150 add_custom_target(tsfiles-${pathmd5} ALL 0151 COMMENT "Generating ts..." 0152 COMMAND ${CMAKE_COMMAND} 0153 -DPython3_EXECUTABLE=${KI18N_PYTHON_EXECUTABLE} 0154 -D_ki18n_pmap_compile_script=${_ki18n_pmap_compile_script} 0155 -DCOPY_TO=${CMAKE_CURRENT_BINARY_DIR}/${dirname} 0156 -DPO_DIR=${absolute_podir} 0157 -P ${_ki18n_build_tsfiles_script} 0158 ) 0159 0160 if (NOT TARGET pofiles) 0161 add_custom_target(pofiles) 0162 endif() 0163 if (NOT TARGET tsfiles) 0164 add_custom_target(tsfiles) 0165 endif() 0166 add_dependencies(pofiles pofiles-${pathmd5}) 0167 add_dependencies(tsfiles tsfiles-${pathmd5}) 0168 0169 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dirname}) 0170 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dirname} DESTINATION ${destname}) 0171 endfunction()