1 # This file is part of LyX, the document processor.
2 # Licence details can be found in the file COPYING.
4 # Copyright (c) 2008-2011 Peter Kümmel, <syntheticpp@gmx.net>
5 # Copyright (c) 2008-2011 Kornel Benko, <Kornel.Benko@berlin.de>
10 include_directories(${TOP_SRC_DIR}/po)
12 SET(_lyxname ${PACKAGE})
15 macro(add_gettext_python _par _dir)
18 file(GLOB _s1 ${TOP_SRC_DIR}/${_dir}/${_arg})
20 list(APPEND _sources ${_s1})
22 if (${_par} MATCHES "layouttranslations")
23 SET(_dst "${CMAKE_CURRENT_BINARY_DIR}/${_par}")
25 SET(_dst "${CMAKE_CURRENT_BINARY_DIR}/${_par}_l10n.pot")
27 SET(_tmp_src_files "${CMAKE_CURRENT_BINARY_DIR}/${_par}_tmp_files")
28 SET(_src_files "${CMAKE_CURRENT_BINARY_DIR}/${_par}_files")
29 file(WRITE ${_tmp_src_files} "")
30 foreach(_s ${_sources})
31 FILE(APPEND ${_tmp_src_files} "${_s}\n")
33 if(${_par} MATCHES "^\(.*\)_[0-9]+$")
34 set(_par1 ${CMAKE_MATCH_1})
40 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_tmp_src_files} ${_src_files}
41 DEPENDS ${_tmp_src_files}
43 if (${_par} MATCHES "layouttranslations")
44 # lyx_pot.py requires the module "polib" if using target layouttranslations1,
45 # so we have to check for it
46 find_python_module("polib")
47 if ("${LYX_PY_POLIB}" STREQUAL "")
48 message(STATUS "You will be unable to update layouttranslations file")
53 COMMAND ${CMAKE_COMMAND}
54 "-DTOP_SRC_DIR=${TOP_SRC_DIR}"
56 "-DLYX_PYTHON_EXECUTABLE=${LYX_PYTHON_EXECUTABLE}"
58 "-DSources=${_src_files}"
59 "-DLYX_PY_POLIB=${LYX_PY_POLIB}"
60 -P "${TOP_SRC_DIR}/po/CreateLayoutTranslations.cmake"
61 DEPENDS ${_sources} ${_src_files} "${TOP_SRC_DIR}/lib/layouttranslations" "${TOP_SRC_DIR}/po/lyx_pot.py"
62 COMMENT "${LYX_PYTHON_EXECUTABLE} ${TOP_SRC_DIR}/po/lyx_pot.py -b ${TOP_SRC_DIR} -o ${_dst} -t ${_par1} --src_file=${_src_files}"
64 ADD_CUSTOM_TARGET(layouttranslations1 DEPENDS "${_dst}")
65 set_target_properties(layouttranslations1 PROPERTIES FOLDER "i18n")
66 if (LYX_DATA_SUBDIR STREQUAL "")
67 install(FILES "${TOP_SRC_DIR}/lib/layouttranslations" DESTINATION .)
69 install(FILES "${TOP_SRC_DIR}/lib/layouttranslations" DESTINATION ${LYX_DATA_SUBDIR})
75 COMMAND ${LYX_PYTHON_EXECUTABLE}
76 ARGS "${TOP_SRC_DIR}/po/lyx_pot.py" -b "${TOP_SRC_DIR}" -o "${_dst}" -t ${_par1} "--src_file=${_src_files}"
77 DEPENDS ${_sources} ${_src_files} "${TOP_SRC_DIR}/po/lyx_pot.py"
78 COMMENT "${LYX_PYTHON_EXECUTABLE} ${TOP_SRC_DIR}/po/lyx_pot.py -b ${TOP_SRC_DIR} -o ${_dst} -t ${_par1} --src_file=${_src_files}"
80 LIST(APPEND _py_sources "${_dst}")
82 SET_SOURCE_FILES_PROPERTIES("${_dst}" GENERATED)
83 SET_SOURCE_FILES_PROPERTIES("${_src_files}" GENERATED)
84 endmacro(add_gettext_python)
86 SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot" GENERATED)
87 SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" GENERATED)
88 SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot" GENERATED)
90 # create symbolic links for external lokalizations programs
91 # to be able to find the referenced sources if used on
93 foreach (_dir lib src)
95 COMMAND ${CMAKE_COMMAND} -E create_symlink "${TOP_SRC_DIR}/${_dir}" "${CMAKE_CURRENT_BINARY_DIR}/${_dir}")
99 add_gettext_python(layouttranslations lib layouts/*.layout layouts/*.inc layouts/*.module citeengines/*.citeengine)
100 add_gettext_python(languages lib languages)
101 add_gettext_python(layouts lib layouts/*.layout layouts/*.inc layouts/*.module citeengines/*.citeengine)
102 add_gettext_python(latexfonts lib latexfonts)
103 add_gettext_python(encodings lib encodings)
104 add_gettext_python(ui lib/ui *.ui *.inc)
105 add_gettext_python(external lib/xtemplates *.xtemplate)
106 add_gettext_python(formats lib configure.py)
107 add_gettext_python(tabletemplates lib tabletemplates/*.lyx)
108 add_gettext_python(qt src/frontends/qt/ui *.ui)
109 add_gettext_python(examples_templates lib examples/[a-zA-Z]* templates/[a-zA-Z]*)
112 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
113 COMMAND ${LYX_PYTHON_EXECUTABLE}
114 ARGS "${TOP_CMAKE_PATH}/po/cat.py" ${_py_sources} > "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat_tmp.pot"
115 COMMAND ${CMAKE_COMMAND} -E copy_if_different
116 "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
117 DEPENDS ${_py_sources}
121 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot"
122 COMMAND ${GETTEXT_MSGUNIQ_EXECUTABLE}
123 ARGS -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
124 COMMAND ${CMAKE_COMMAND} -E copy_if_different
125 "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot"
126 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
131 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp "")
132 file(GLOB_RECURSE _tmp_potfiles RELATIVE ${TOP_SRC_DIR}/ ${TOP_SRC_DIR}/src/*.h ${TOP_SRC_DIR}/src/*.cpp ${TOP_SRC_DIR}/src/*.cpp.in)
133 list(SORT _tmp_potfiles)
134 # list(REMOVE_ITEM _tmp_potfiles src/support/Package.cpp)
136 foreach(_f ${_tmp_potfiles})
137 # we don't need to select only relevant files because the outcome of xgettext
138 # will stay the same.
139 # Relevant files are files containing the string '_(".*")'
140 LIST(APPEND _potfiles_dep "${TOP_SRC_DIR}/${_f}")
141 file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp "${_f}\n")
145 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp" "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in"
148 if (GETTEXT_MSGCAT_EXECUTABLE)
150 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
151 COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE}
153 --default-domain=${_lyxname} --directory=${TOP_SRC_DIR}
154 --add-comments=TRANSLATORS:
155 --language=C++ --keyword=_ --keyword=N_ --keyword=B_ --keyword=qt_
156 --files-from=${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in
157 --copyright-holder="LyX Developers" --msgid-bugs-address=lyx-devel@lists.lyx.org
158 -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.src.pot"
159 COMMAND ${GETTEXT_MSGCAT_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.src.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
160 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" ${_potfiles_dep}
165 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
166 COMMAND ${CMAKE_COMMAD} -E copy "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
167 COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE}
169 --default-domain=${_lyxname} --directory=${TOP_SRC_DIR}
170 --add-comments=TRANSLATORS:
171 --language=C++ --join-existing --keyword=_ --keyword=N_ --keyword=B_ --keyword=qt_
172 --files-from=${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in
173 --copyright-holder="LyX Developers" --msgid-bugs-address=lyx-devel@lists.lyx.org
174 -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
175 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" ${_potfiles_dep}
180 # We have to copy the po-files first,
181 # otherwise they would be modified (inside the macro GETTEXT_CREATE_TRANSLATIONS())
182 # This makes the "git pull" on po-files work again
183 file(GLOB LYX_BASE_PO_FILES RELATIVE ${TOP_SRC_DIR}/po ${TOP_SRC_DIR}/po/*.po)
184 list(SORT LYX_BASE_PO_FILES)
186 SET(LYX_UPDATED_PO_FILES)
187 SET(LYX_DEST_PO ${TOP_SRC_DIR}/po)
189 set(CONFIGURED_LANGUAGES) # from file LINGUAS
190 set(INSTALLED_LANGUAGES) # from names of existing po-files
192 file(STRINGS "${TOP_SRC_DIR}/po/LINGUAS" _lang_lines)
193 foreach(_c_l ${_lang_lines})
194 if(NOT _c_l MATCHES "^#.*")
195 string(REPLACE " " ";" _c_l ${_c_l}) #Split ${_c_l}
196 list(APPEND CONFIGURED_LANGUAGES ${_c_l})
200 foreach(_pofile ${LYX_BASE_PO_FILES})
201 string(REGEX REPLACE "^(.*)\\.po$" "\\1" _inst_lng ${_pofile})
202 list(FIND CONFIGURED_LANGUAGES ${_inst_lng} _lng_idx)
203 if(_lng_idx GREATER -1)
204 list(APPEND INSTALLED_LANGUAGES ${_inst_lng})
207 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
208 COMMAND ${CMAKE_COMMAND} -E copy ${TOP_SRC_DIR}/po/${_pofile} ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
209 DEPENDS ${TOP_SRC_DIR}/po/${_pofile}
211 list(APPEND LYX_PO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_pofile})
214 FIND_PROGRAM(LYX_GITVERSION git)
215 set(LYX_UPDATED_GMO_FILES)
216 foreach(_gmo_base ${INSTALLED_LANGUAGES})
217 set(_gmo ${_gmo_base}.gmo)
218 set(_tobeupdated "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}.tobeupdated")
219 list(APPEND LYX_UPDATED_GMO_FILES "${_tobeupdated}")
222 OUTPUT "${_tobeupdated}"
223 COMMAND "${LYX_GITVERSION}" "status" "--porcelain" "${_gmo_base}.po" ">" "${_tobeupdated}"
224 COMMAND ${LYX_PYTHON_EXECUTABLE} "${TOP_CMAKE_PATH}/po/update-gmo.py"
226 "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
227 "${LYX_DEST_PO}/${_gmo}"
228 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
229 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
233 OUTPUT "${_tobeupdated}"
234 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}" "${LYX_DEST_PO}/${_gmo}"
235 COMMAND ${CMAKE_COMMAND} -E touch "${_tobeupdated}"
236 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
241 set(LYX_UPDATED_PO_FILES)
242 foreach(_pofile ${LYX_BASE_PO_FILES})
245 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied
246 COMMAND ${LYX_PYTHON_EXECUTABLE}
247 ARGS "${TOP_CMAKE_PATH}/po/unix2dos.py" "${CMAKE_CURRENT_BINARY_DIR}/${_pofile}"
248 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${_pofile} ${LYX_DEST_PO}/${_pofile}
249 COMMAND ${CMAKE_COMMAND} -E touch ${_pofile}.copied
250 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
254 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied
255 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${_pofile} ${LYX_DEST_PO}/${_pofile}
256 COMMAND ${CMAKE_COMMAND} -E touch ${_pofile}.copied
257 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
260 list(APPEND LYX_UPDATED_PO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied)
263 if(LYX_CPACK OR LYX_INSTALL)
264 set(_addALLOption ALL)
266 GETTEXT_CREATE_TRANSLATIONS(${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot ${_addALLOption} ${LYX_PO_FILES})
268 # Create a new target to remerge po files
269 # ALL omitted here, to prevent from automatic creation
270 ADD_CUSTOM_TARGET(update-gmo DEPENDS ${LYX_UPDATED_GMO_FILES})
271 ADD_CUSTOM_TARGET(update-po DEPENDS ${LYX_UPDATED_PO_FILES} ${LYX_UPDATED_GMO_FILES})
272 set_target_properties(update-po update-gmo PROPERTIES FOLDER "i18n")
273 add_dependencies(update-po translations)