]> git.lyx.org Git - lyx.git/blob - po/CMakeLists.txt
bg.po: fix escaping
[lyx.git] / po / CMakeLists.txt
1 # This file is part of LyX, the document processor.
2 # Licence details can be found in the file COPYING.
3 #
4 # Copyright (c) 2008-2011 Peter Kümmel, <syntheticpp@gmx.net>
5 # Copyright (c) 2008-2011 Kornel Benko, <Kornel.Benko@berlin.de>
6 #
7
8 project(po)
9
10 include_directories(${TOP_SRC_DIR}/po)
11
12 SET(_lyxname ${PACKAGE})
13 SET(_py_sources)
14
15 macro(add_gettext_python  _par _dir)
16   set(_sources)
17   foreach(_arg ${ARGN})
18     file(GLOB _s1 ${TOP_SRC_DIR}/${_dir}/${_arg})
19     list(SORT _s1)
20     list(APPEND _sources ${_s1})
21   endforeach(_arg)
22   if (${_par} MATCHES "layouttranslations")
23     SET(_dst "${CMAKE_CURRENT_BINARY_DIR}/${_par}")
24   else ()
25     SET(_dst "${CMAKE_CURRENT_BINARY_DIR}/${_par}_l10n.pot")
26   endif()
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")
32   endforeach()
33   if(${_par} MATCHES "^\(.*\)_[0-9]+$")
34     set(_par1 ${CMAKE_MATCH_1})
35   else()
36     set(_par1 ${_par})
37   endif()
38   ADD_CUSTOM_COMMAND(
39     OUTPUT ${_src_files}
40     COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_tmp_src_files} ${_src_files}
41     DEPENDS ${_tmp_src_files}
42   )
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")
49     endif()
50     ADD_CUSTOM_COMMAND(
51       OUTPUT "${_dst}"
52       PRE_BUILD
53       COMMAND  ${CMAKE_COMMAND}
54         "-DTOP_SRC_DIR=${TOP_SRC_DIR}"
55         "-DDestFile=${_dst}"
56         "-DLYX_PYTHON_EXECUTABLE=${LYX_PYTHON_EXECUTABLE}"
57         "-DParType=${_par1}"
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}"
63       )
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 .)
68     else()
69       install(FILES "${TOP_SRC_DIR}/lib/layouttranslations" DESTINATION ${LYX_DATA_SUBDIR})
70     endif()
71   else()
72     ADD_CUSTOM_COMMAND(
73       OUTPUT "${_dst}"
74       PRE_BUILD
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}"
79       )
80     LIST(APPEND _py_sources "${_dst}")
81   endif()
82   SET_SOURCE_FILES_PROPERTIES("${_dst}" GENERATED)
83   SET_SOURCE_FILES_PROPERTIES("${_src_files}" GENERATED)
84 endmacro(add_gettext_python)
85
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)
89 if (UNIX)
90   # create symbolic links for external lokalizations programs
91   # to be able to find the referenced sources if used on
92   # built po-files
93   foreach (_dir lib src)
94     execute_process(
95       COMMAND ${CMAKE_COMMAND} -E create_symlink "${TOP_SRC_DIR}/${_dir}" "${CMAKE_CURRENT_BINARY_DIR}/${_dir}")
96   endforeach()
97 endif()
98
99 add_gettext_python(qt4 src/frontends/qt4/ui *.ui)
100 add_gettext_python(layouts lib layouts/*.layout layouts/*.inc layouts/*.module citeengines/*.citeengine)
101 add_gettext_python(languages lib languages)
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(layouttranslations lib layouts/*.layout layouts/*.inc layouts/*.module citeengines/*.citeengine)
108
109 ADD_CUSTOM_COMMAND(
110     OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
111     COMMAND ${LYX_PYTHON_EXECUTABLE}
112     ARGS   "${TOP_CMAKE_PATH}/po/cat.py" ${_py_sources} > "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat_tmp.pot"
113     COMMAND ${CMAKE_COMMAND} -E copy_if_different
114       "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
115     DEPENDS ${_py_sources}
116     )
117
118 ADD_CUSTOM_COMMAND(
119     OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot"
120     COMMAND ${GETTEXT_MSGUNIQ_EXECUTABLE}
121     ARGS -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
122     COMMAND ${CMAKE_COMMAND} -E copy_if_different
123       "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt_tmp.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot"
124     DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.cat.pot"
125     )
126
127 SET(_potfiles_dep)
128
129 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp "")
130 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)
131 list(SORT _tmp_potfiles)
132 # list(REMOVE_ITEM _tmp_potfiles src/support/Package.cpp)
133
134 foreach(_f ${_tmp_potfiles})
135   # we don't need to select only relevant files because the outcome of xgettext
136   # will stay the same.
137   # Relevant files are files containing the string '_(".*")'
138   LIST(APPEND _potfiles_dep "${TOP_SRC_DIR}/${_f}")
139   file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp "${_f}\n")
140 endforeach(_f)
141
142 execute_process(
143   COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.tmp" "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in"
144   )
145
146 ADD_CUSTOM_COMMAND(
147     OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
148     COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
149     COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE}
150       --from-code=UTF-8
151       --default-domain=${_lyxname} --directory=${TOP_SRC_DIR}
152       --add-comments=TRANSLATORS:
153       --language=C++ --join-existing --keyword=_ --keyword=N_ --keyword=B_ --keyword=qt_
154       --files-from=${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in
155       --copyright-holder="LyX Developers" --msgid-bugs-address=lyx-devel@lists.lyx.org
156       -o "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot"
157     DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.fmt.pot" ${_potfiles_dep}
158     )
159
160 #
161 # We have to copy the po-files first,
162 # otherwise they would be modified (inside the macro GETTEXT_CREATE_TRANSLATIONS())
163 # This makes the "git pull" on po-files work again
164 file(GLOB LYX_BASE_PO_FILES RELATIVE ${TOP_SRC_DIR}/po ${TOP_SRC_DIR}/po/*.po)
165 list(SORT LYX_BASE_PO_FILES)
166 set(LYX_PO_FILES)
167 SET(LYX_UPDATED_PO_FILES)
168 SET(LYX_DEST_PO ${TOP_SRC_DIR}/po)
169
170 set(CONFIGURED_LANGUAGES)               # from file LINGUAS
171 set(INSTALLED_LANGUAGES)                # from names of existing po-files
172
173 file(STRINGS "${TOP_SRC_DIR}/po/LINGUAS" _lang_lines)
174 foreach(_c_l ${_lang_lines})
175   if(NOT _c_l MATCHES "^#.*")
176     string(REPLACE " " ";" _c_l ${_c_l}) #Split ${_c_l}
177     list(APPEND CONFIGURED_LANGUAGES ${_c_l})
178   endif()
179 endforeach(_c_l)
180
181 foreach(_pofile ${LYX_BASE_PO_FILES})
182   string(REGEX REPLACE "^(.*)\\.po$" "\\1" _inst_lng ${_pofile})
183   list(FIND CONFIGURED_LANGUAGES ${_inst_lng} _lng_idx)
184   if(_lng_idx GREATER -1)
185     list(APPEND INSTALLED_LANGUAGES ${_inst_lng})
186   endif()
187   add_custom_command(
188     OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
189     COMMAND ${CMAKE_COMMAND} -E copy ${TOP_SRC_DIR}/po/${_pofile} ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
190     DEPENDS ${TOP_SRC_DIR}/po/${_pofile}
191     )
192   list(APPEND LYX_PO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_pofile})
193 endforeach(_pofile)
194
195 FIND_PROGRAM(LYX_GITVERSION git)
196 set(LYX_UPDATED_GMO_FILES)
197 foreach(_gmo_base ${INSTALLED_LANGUAGES})
198   set(_gmo ${_gmo_base}.gmo)
199   set(_tobeupdated "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}.tobeupdated")
200   list(APPEND LYX_UPDATED_GMO_FILES "${_tobeupdated}")
201   if(LYX_GITVERSION)
202     add_custom_command(
203       OUTPUT "${_tobeupdated}"
204           COMMAND "${LYX_GITVERSION}" "status" "--porcelain" "${_gmo_base}.po" ">" "${_tobeupdated}"
205           COMMAND ${LYX_PYTHON_EXECUTABLE} "${TOP_CMAKE_PATH}/po/update-gmo.py" 
206                 "${_tobeupdated}"
207                 "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
208                 "${LYX_DEST_PO}/${_gmo}"
209           WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
210       DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
211       )
212   else()
213     add_custom_command(
214       OUTPUT "${_tobeupdated}"
215       COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}" "${LYX_DEST_PO}/${_gmo}"
216       COMMAND ${CMAKE_COMMAND} -E touch "${_tobeupdated}"
217       DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_gmo}"
218     )
219   endif()
220 endforeach()
221
222 set(LYX_UPDATED_PO_FILES)
223 foreach(_pofile ${LYX_BASE_PO_FILES})
224   if(WIN32)
225     add_custom_command(
226       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied
227       COMMAND ${LYX_PYTHON_EXECUTABLE}
228         ARGS   "${TOP_CMAKE_PATH}/po/unix2dos.py" "${CMAKE_CURRENT_BINARY_DIR}/${_pofile}"
229       COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${_pofile} ${LYX_DEST_PO}/${_pofile}
230       COMMAND ${CMAKE_COMMAND} -E touch ${_pofile}.copied
231       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
232       )
233   else()
234     add_custom_command(
235       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied
236       COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${_pofile} ${LYX_DEST_PO}/${_pofile}
237       COMMAND ${CMAKE_COMMAND} -E touch ${_pofile}.copied
238       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}
239       )
240   endif()
241   list(APPEND LYX_UPDATED_PO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_pofile}.copied)
242 endforeach(_pofile)
243
244 if(LYX_CPACK OR LYX_INSTALL)
245   set(_addALLOption ALL)
246 endif()
247 GETTEXT_CREATE_TRANSLATIONS(${CMAKE_CURRENT_BINARY_DIR}/${_lyxname}.pot ${_addALLOption} ${LYX_PO_FILES})
248
249 # Create a new target to remerge po files
250 # ALL omitted here, to prevent from automatic creation
251 ADD_CUSTOM_TARGET(update-gmo DEPENDS ${LYX_UPDATED_GMO_FILES})
252 ADD_CUSTOM_TARGET(update-po DEPENDS ${LYX_UPDATED_PO_FILES} ${LYX_UPDATED_GMO_FILES})
253 set_target_properties(update-po update-gmo PROPERTIES FOLDER "i18n")
254 add_dependencies(update-po translations)
255