1cmake_minimum_required(VERSION 2.6)
2
3set (XGETTEXT_OPTIONS --qt --keyword=tr:1,2c --keyword=tr --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format
4    --keyword=trUtf8 --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format
5    --keyword=translate:2,3c --keyword=translate:2 --flag=translate:2:pass-c-format --flag=translate:2:pass-qt-format
6    --keyword=QT_TR_NOOP --flag=QT_TR_NOOP:1:pass-c-format --flag=QT_TR_NOOP:1:pass-qt-format
7    --keyword=QT_TRANSLATE_NOOP:2 --flag=QT_TRANSLATE_NOOP:2:pass-c-format --flag=QT_TRANSLATE_NOOP:2:pass-qt-format
8    --keyword=_ --flag=_:1:pass-c-format --flag=_:1:pass-qt-format
9    --keyword=N_ --flag=N_:1:pass-c-format --flag=N_:1:pass-qt-format
10    --from-code=utf-8)
11
12macro(add_pot outfiles header pot)
13  # Make relative filenames for all source files
14  set(add_pot_sources)
15  foreach(_filename ${ARGN})
16    get_filename_component(_absolute_filename ${_filename} ABSOLUTE)
17    file(RELATIVE_PATH _relative_filename ${CMAKE_CURRENT_SOURCE_DIR} ${_absolute_filename})
18    list(APPEND add_pot_sources ${_relative_filename})
19  endforeach(_filename)
20
21  # Generate the .pot
22  add_custom_command(
23    OUTPUT ${pot}
24    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
25    COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE}
26        ${XGETTEXT_OPTIONS} -s -C --omit-header
27        --output=${CMAKE_CURRENT_BINARY_DIR}/pot.temp
28        ${add_pot_sources}
29    COMMAND cat ${header} ${CMAKE_CURRENT_BINARY_DIR}/pot.temp > ${pot}
30    DEPENDS ${add_pot_sources} ${header}
31  )
32
33  list(APPEND ${outfiles} ${pot})
34endmacro(add_pot)
35
36# Syntax is:
37#   add_po(sources_var po_prefix
38#     LANGUAGES language1 language2 ...
39#     DIRECTORY dir
40#
41macro(add_po outfiles po_prefix)
42  parse_arguments(ADD_PO
43    "LANGUAGES;DIRECTORY"
44    ""
45    ${ARGN}
46  )
47
48  foreach (_lang ${ADD_PO_LANGUAGES})
49    set(_po_filename "${_lang}.po")
50    set(_po_filepath "${CMAKE_CURRENT_SOURCE_DIR}/${ADD_PO_DIRECTORY}/${_po_filename}")
51    set(_qm_filename "clementine_${_lang}.qm")
52    set(_qm_filepath "${CMAKE_CURRENT_BINARY_DIR}/${ADD_PO_DIRECTORY}/${_qm_filename}")
53
54    # Convert the .po files to .qm files
55    add_custom_command(
56      OUTPUT ${_qm_filepath}
57      COMMAND ${QT_LCONVERT_EXECUTABLE} ARGS ${_po_filepath} -o ${_qm_filepath} -of qm
58      DEPENDS ${_po_filepath} ${_po_filepath}
59    )
60
61    list(APPEND ${outfiles} ${_qm_filepath})
62  endforeach (_lang)
63
64  # Generate a qrc file for the translations
65  set(_qrc ${CMAKE_CURRENT_BINARY_DIR}/${ADD_PO_DIRECTORY}/translations.qrc)
66  file(WRITE ${_qrc} "<RCC><qresource prefix=\"/${ADD_PO_DIRECTORY}\">")
67  foreach(_lang ${ADD_PO_LANGUAGES})
68    file(APPEND ${_qrc} "<file>${po_prefix}${_lang}.qm</file>")
69  endforeach(_lang)
70  file(APPEND ${_qrc} "</qresource></RCC>")
71  qt5_add_resources(${outfiles} ${_qrc})
72endmacro(add_po)
73