CMakeLists.txt (5026B)
1 option(ENABLE_TRANSLATIONS "Localizations to build" OFF) 2 if(NOT ENABLE_TRANSLATIONS) 3 return() 4 endif() 5 6 find_package(Gettext REQUIRED) 7 find_program(XGETTEXT_PRG xgettext) 8 find_program(ICONV_PRG iconv) 9 mark_as_advanced( 10 GETTEXT_MSGFMT_EXECUTABLE 11 GETTEXT_MSGMERGE_EXECUTABLE 12 ICONV_PRG 13 XGETTEXT_PRG) 14 15 if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG) 16 set(LANGUAGES 17 af 18 ca 19 cs 20 da 21 de 22 en_GB 23 eo 24 es 25 fi 26 fr 27 ga 28 it 29 ja 30 ko.UTF-8 31 nl 32 no 33 pl.UTF-8 34 pt_BR 35 ru 36 sk 37 sv 38 tr 39 uk 40 vi 41 zh_CN.UTF-8 42 zh_TW.UTF-8) 43 44 set(ENV{OLD_PO_FILE_INPUT} yes) 45 set(ENV{OLD_PO_FILE_OUTPUT} yes) 46 47 set(NVIM_RELATIVE_SOURCES) 48 foreach(SRC ${NVIM_SOURCES} ${NVIM_HEADERS}) 49 file(RELATIVE_PATH RELATIVE_SRC ${CMAKE_CURRENT_SOURCE_DIR} ${SRC}) 50 list(APPEND NVIM_RELATIVE_SOURCES ${RELATIVE_SRC}) 51 endforeach() 52 53 set(NVIM_POT ${CMAKE_CURRENT_BINARY_DIR}/nvim.pot) 54 55 list(SORT NVIM_RELATIVE_SOURCES) 56 add_custom_command( 57 OUTPUT ${NVIM_POT} 58 COMMAND ${XGETTEXT_PRG} -o ${NVIM_POT} --default-domain=nvim 59 --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 60 -D ${CMAKE_CURRENT_SOURCE_DIR} -D ${CMAKE_CURRENT_BINARY_DIR} 61 ${NVIM_RELATIVE_SOURCES} ${PROJECT_SOURCE_DIR}/runtime/scripts/optwin.lua 62 VERBATIM 63 DEPENDS ${NVIM_SOURCES} nvim_bin nvim_runtime_deps) 64 65 set(LANGUAGE_MO_FILES) 66 set(UPDATE_PO_TARGETS) 67 68 macro(BuildMo name) 69 set(poFile ${CMAKE_CURRENT_SOURCE_DIR}/${name}.po) 70 set(moFile ${CMAKE_CURRENT_BINARY_DIR}/${name}.mo) 71 72 add_custom_command( 73 OUTPUT ${moFile} 74 COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${moFile} ${poFile} 75 DEPENDS ${poFile} ${NVIM_POT}) 76 77 install_helper( 78 FILES ${moFile} 79 DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${name}/LC_MESSAGES 80 RENAME ${PROJECT_NAME}.mo) 81 82 list(APPEND LANGUAGE_MO_FILES ${moFile}) 83 endmacro() 84 85 macro(CheckPo name) 86 set(poFile ${CMAKE_CURRENT_SOURCE_DIR}/${name}.po) 87 88 add_custom_target(check-po-${name} 89 COMMAND $<TARGET_FILE:nvim_bin> -u NONE -n -e 90 -S ${CMAKE_CURRENT_SOURCE_DIR}/check.vim 91 -c "if error == 0 | q | endif" -c cq ${poFile} || 92 ${CMAKE_COMMAND} -E echo "${name}.po failed the check." 93 COMMENT "Checking ${name}.po" 94 VERBATIM 95 DEPENDS ${poFile}) 96 endmacro() 97 98 macro(BuildPoIconvGenericWithCharset 99 lang inputName outputName inputEnc outputEnc outputCharSet) 100 set(inputFile ${CMAKE_CURRENT_SOURCE_DIR}/${inputName}.po) 101 set(outputFile ${CMAKE_CURRENT_SOURCE_DIR}/${outputName}.po) 102 103 add_custom_target(update-po-${lang} 104 COMMAND ${CMAKE_COMMAND} 105 -D ICONV_PRG=${ICONV_PRG} 106 -D INPUT_FILE=${inputFile} 107 -D OUTPUT_FILE=${outputFile} 108 -D INPUT_ENC=${inputEnc} 109 -D OUTPUT_ENC=${outputEnc} 110 -D OUTPUT_CHARSET=${outputCharSet} 111 -P ${PROJECT_SOURCE_DIR}/cmake/ConvertPo.cmake 112 COMMENT "Updating ${outputName}.po" 113 DEPENDS ${inputFile}) 114 115 CheckPo(${outputName}) 116 117 list(APPEND UPDATE_PO_TARGETS update-po-${lang}) 118 endmacro() 119 120 macro(BuildPoIconvGeneric lang inputName outputName inputEnc outputEnc) 121 # Most of the time, the output charset is the same as the iconv output 122 # encoding. 123 BuildPoIconvGenericWithCharset( 124 ${lang} ${inputName} ${outputName} ${inputEnc} ${outputEnc} ${outputEnc}) 125 endmacro() 126 127 macro(BuildPoIconv name inputEnc outputEnc) 128 set(lang ${name}.${outputEnc}) 129 set(inputName ${name}) 130 131 if(outputEnc STREQUAL utf-8) 132 set(outputName ${name}.UTF-8) 133 else() 134 set(outputName ${lang}) 135 endif() 136 137 BuildPoIconvGeneric( 138 ${lang} ${inputName} ${outputName} ${inputEnc} ${outputEnc}) 139 endmacro() 140 141 # Create some translations from others. 142 if(";${LANGUAGES};" MATCHES ";ja;") 143 BuildPoIconv(ja utf-8 euc-jp) 144 BuildMo(ja.euc-jp) 145 endif() 146 147 if(";${LANGUAGES};" MATCHES ";cs;") 148 BuildPoIconv(cs ISO-8859-2 cp1250) 149 BuildMo(cs.cp1250) 150 endif() 151 152 if(";${LANGUAGES};" MATCHES ";sk;") 153 BuildPoIconv(sk ISO-8859-2 cp1250) 154 BuildMo(sk.cp1250) 155 endif() 156 157 add_custom_target(update-po-nb 158 COMMAND ${CMAKE_COMMAND} -E copy 159 ${CMAKE_CURRENT_SOURCE_DIR}/no.po ${CMAKE_CURRENT_SOURCE_DIR}/nb.po 160 DEPENDS no.po) 161 list(APPEND UPDATE_PO_TARGETS update-po-nb) 162 if(";${LANGUAGES};" MATCHES ";no;") 163 CheckPo(nb) 164 BuildMo(nb) 165 endif() 166 167 foreach(LANGUAGE ${LANGUAGES}) 168 set(poFile "${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE}.po") 169 170 add_custom_target(update-po-${LANGUAGE} 171 COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} -q --update --backup=none --sort-by-file 172 ${poFile} ${NVIM_POT} 173 COMMENT "Updating ${LANGUAGE}.po" 174 DEPENDS ${NVIM_POT}) 175 176 CheckPo(${LANGUAGE}) 177 178 list(APPEND UPDATE_PO_TARGETS update-po-${LANGUAGE}) 179 180 BuildMo(${LANGUAGE}) 181 endforeach() 182 183 add_custom_target(nvim_translations DEPENDS ${LANGUAGE_MO_FILES}) 184 add_custom_target(update-po DEPENDS ${UPDATE_PO_TARGETS}) 185 add_dependencies(nvim nvim_translations) 186 endif()