neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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()