Mercurial > archived > louis > epitech > mq > rathaxes
comparison maintainers_update_use_latex.cmake @ 0:973e7bc6d13c
Add some patches to use and test rathaxes with CMake
author | Louis Opter <louis@lse.epitech.net> |
---|---|
date | Sun, 01 Jan 2012 15:31:17 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:973e7bc6d13c |
---|---|
1 # HG changeset patch | |
2 # Parent 13253d542625d2f6a8b7d73878f55e2bca521f34 | |
3 maintainers: update the UseLatex.cmake script to 1.8.2 | |
4 | |
5 diff --git a/maintainers/CMakeScripts/UseLATEX.cmake b/maintainers/CMakeScripts/UseLATEX.cmake | |
6 --- a/maintainers/CMakeScripts/UseLATEX.cmake | |
7 +++ b/maintainers/CMakeScripts/UseLATEX.cmake | |
8 @@ -1,7 +1,7 @@ | |
9 # File: UseLATEX.cmake | |
10 # CMAKE commands to actually use the LaTeX compiler | |
11 -# Version: 1.7.4 | |
12 -# Author: Kenneth Moreland (kmorel at sandia dot gov) | |
13 +# Version: 1.8.2 | |
14 +# Author: Kenneth Moreland <kmorel@sandia.gov> | |
15 # | |
16 # Copyright 2004 Sandia Corporation. | |
17 # Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive | |
18 @@ -19,7 +19,7 @@ | |
19 # [IMAGES] <image_files> | |
20 # [CONFIGURE] <tex_files> | |
21 # [DEPENDS] <tex_files> | |
22 -# [USE_INDEX] [USE_GLOSSARY] | |
23 +# [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL] | |
24 # [DEFAULT_PDF] [DEFAULT_SAFEPDF] | |
25 # [MANGLE_TARGET_NAMES]) | |
26 # Adds targets that compile <tex_file>. The latex output is placed | |
27 @@ -47,8 +47,11 @@ | |
28 # on images. | |
29 # ps: Makes <name>.ps | |
30 # html: Makes <name>.html | |
31 -# auxclean: Deletes <name>.aux. This is sometimes necessary | |
32 -# if a LaTeX error occurs and writes a bad aux file. | |
33 +# auxclean: Deletes <name>.aux and other auxiliary files. | |
34 +# This is sometimes necessary if a LaTeX error occurs | |
35 +# and writes a bad aux file. Unlike the regular clean | |
36 +# target, it does not delete other input files, such as | |
37 +# converted images, to save time on the rebuild. | |
38 # | |
39 # The dvi target is added to the ALL. That is, it will be the target | |
40 # built by default. If the DEFAULT_PDF argument is given, then the | |
41 @@ -63,6 +66,24 @@ | |
42 # | |
43 # History: | |
44 # | |
45 +# 1.8.2 Fix corner case when an argument name was also a variable containing | |
46 +# the text of an argument. In this case, the CMake IF was matching | |
47 +# the argument text with the contents of the variable with the same | |
48 +# argument name. | |
49 +# | |
50 +# 1.8.1 Fix problem where ps2pdf was not getting the appropriate arguments. | |
51 +# | |
52 +# 1.8.0 Add support for synctex. | |
53 +# | |
54 +# 1.7.7 Support calling xindy when making glossaries. | |
55 +# | |
56 +# Improved make clean support. | |
57 +# | |
58 +# 1.7.6 Add support for the nomencl package (thanks to Myles English). | |
59 +# | |
60 +# 1.7.5 Fix issue with bibfiles being copied two different ways, which causes | |
61 +# Problems with dependencies (thanks to Edwin van Leeuwen). | |
62 +# | |
63 # 1.7.4 Added the DEFAULT_SAFEPDF option (thanks to Raymond Wan). | |
64 # | |
65 # Added warnings when image directories are not found (and were | |
66 @@ -164,9 +185,9 @@ | |
67 MACRO(LATEX_LIST_CONTAINS var value) | |
68 SET(${var}) | |
69 FOREACH (value2 ${ARGN}) | |
70 - IF (${value} STREQUAL ${value2}) | |
71 + IF ("not_a_var_${value}" STREQUAL "not_a_var_${value2}") | |
72 SET(${var} TRUE) | |
73 - ENDIF (${value} STREQUAL ${value2}) | |
74 + ENDIF ("not_a_var_${value}" STREQUAL "not_a_var_${value2}") | |
75 ENDFOREACH (value2) | |
76 ENDMACRO(LATEX_LIST_CONTAINS) | |
77 | |
78 @@ -217,15 +238,13 @@ | |
79 # Macros that perform processing during a LaTeX build. | |
80 ############################################################################# | |
81 MACRO(LATEX_MAKEGLOSSARIES) | |
82 + # This is really a bare bones port of the makeglossaries perl script into | |
83 + # CMake scripting. | |
84 MESSAGE("**************************** In makeglossaries") | |
85 IF (NOT LATEX_TARGET) | |
86 MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") | |
87 ENDIF (NOT LATEX_TARGET) | |
88 | |
89 - IF (NOT MAKEINDEX_COMPILER) | |
90 - MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER") | |
91 - ENDIF (NOT MAKEINDEX_COMPILER) | |
92 - | |
93 SET(aux_file ${LATEX_TARGET}.aux) | |
94 | |
95 IF (NOT EXISTS ${aux_file}) | |
96 @@ -245,6 +264,19 @@ | |
97 istfile ${istfile_line} | |
98 ) | |
99 | |
100 + STRING(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}") | |
101 + IF (use_xindy) | |
102 + MESSAGE("*************** Using xindy") | |
103 + IF (NOT XINDY_COMPILER) | |
104 + MESSAGE(SEND_ERROR "Need to define XINDY_COMPILER") | |
105 + ENDIF (NOT XINDY_COMPILER) | |
106 + ELSE (use_xindy) | |
107 + MESSAGE("*************** Using makeindex") | |
108 + IF (NOT MAKEINDEX_COMPILER) | |
109 + MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER") | |
110 + ENDIF (NOT MAKEINDEX_COMPILER) | |
111 + ENDIF (use_xindy) | |
112 + | |
113 FOREACH(newglossary ${newglossary_lines}) | |
114 STRING(REGEX REPLACE | |
115 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" | |
116 @@ -262,13 +294,186 @@ | |
117 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" | |
118 "${LATEX_TARGET}.\\4" glossary_in ${newglossary} | |
119 ) | |
120 - MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}") | |
121 - EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} | |
122 - -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in} | |
123 - ) | |
124 + | |
125 + IF (use_xindy) | |
126 + LATEX_FILE_MATCH(xdylanguage_line ${aux_file} | |
127 + "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" | |
128 + "@xdylanguage{${glossary_name}}{english}" | |
129 + ) | |
130 + STRING(REGEX REPLACE | |
131 + "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" | |
132 + "\\1" | |
133 + language | |
134 + ${xdylanguage_line} | |
135 + ) | |
136 + # What crazy person makes a LaTeX index generater that uses different | |
137 + # identifiers for language than babel (or at least does not support | |
138 + # the old ones)? | |
139 + IF (${language} STREQUAL "frenchb") | |
140 + SET(language "french") | |
141 + ELSEIF (${language} MATCHES "^n?germanb?$") | |
142 + SET(language "german") | |
143 + ELSEIF (${language} STREQUAL "magyar") | |
144 + SET(language "hungarian") | |
145 + ELSEIF (${language} STREQUAL "lsorbian") | |
146 + SET(language "lower-sorbian") | |
147 + ELSEIF (${language} STREQUAL "norsk") | |
148 + SET(language "norwegian") | |
149 + ELSEIF (${language} STREQUAL "portuges") | |
150 + SET(language "portuguese") | |
151 + ELSEIF (${language} STREQUAL "russianb") | |
152 + SET(language "russian") | |
153 + ELSEIF (${language} STREQUAL "slovene") | |
154 + SET(language "slovenian") | |
155 + ELSEIF (${language} STREQUAL "ukraineb") | |
156 + SET(language "ukrainian") | |
157 + ELSEIF (${language} STREQUAL "usorbian") | |
158 + SET(language "upper-sorbian") | |
159 + ENDIF (${language} STREQUAL "frenchb") | |
160 + IF (language) | |
161 + SET(language_flags "-L ${language}") | |
162 + ELSE (language) | |
163 + SET(language_flags "") | |
164 + ENDIF (language) | |
165 + | |
166 + LATEX_FILE_MATCH(codepage_line ${aux_file} | |
167 + "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" | |
168 + "@gls@codepage{${glossary_name}}{utf}" | |
169 + ) | |
170 + STRING(REGEX REPLACE | |
171 + "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" | |
172 + "\\1" | |
173 + codepage | |
174 + ${codepage_line} | |
175 + ) | |
176 + IF (codepage) | |
177 + SET(codepage_flags "-C ${codepage}") | |
178 + ELSE (codepage) | |
179 + # Ideally, we would check that the language is compatible with the | |
180 + # default codepage, but I'm hoping that distributions will be smart | |
181 + # enough to specify their own codepage. I know, it's asking a lot. | |
182 + SET(codepage_flags "") | |
183 + ENDIF (codepage) | |
184 + | |
185 + MESSAGE("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}" | |
186 + ) | |
187 + EXEC_PROGRAM(${XINDY_COMPILER} | |
188 + ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} | |
189 + ${language_flags} | |
190 + ${codepage_flags} | |
191 + -I xindy | |
192 + -M ${glossary_name} | |
193 + -t ${glossary_log} | |
194 + -o ${glossary_out} | |
195 + ${glossary_in} | |
196 + OUTPUT_VARIABLE xindy_output | |
197 + ) | |
198 + MESSAGE("${xindy_output}") | |
199 + | |
200 + # So, it is possible (perhaps common?) for aux files to specify a | |
201 + # language and codepage that are incompatible with each other. Check | |
202 + # for that condition, and if it happens run again with the default | |
203 + # codepage. | |
204 + IF ("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$") | |
205 + MESSAGE("*************** Retrying xindy with default codepage.") | |
206 + EXEC_PROGRAM(${XINDY_COMPILER} | |
207 + ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} | |
208 + ${language_flags} | |
209 + -I xindy | |
210 + -M ${glossary_name} | |
211 + -t ${glossary_log} | |
212 + -o ${glossary_out} | |
213 + ${glossary_in} | |
214 + ) | |
215 + ENDIF ("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$") | |
216 + #ENDIF ("${xindy_output}" MATCHES "Cannot locate xindy module for language (.+) in codepage (.+)\\.") | |
217 + | |
218 + ELSE (use_xindy) | |
219 + MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}") | |
220 + EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} | |
221 + -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in} | |
222 + ) | |
223 + ENDIF (use_xindy) | |
224 + | |
225 ENDFOREACH(newglossary) | |
226 ENDMACRO(LATEX_MAKEGLOSSARIES) | |
227 | |
228 +MACRO(LATEX_MAKENOMENCLATURE) | |
229 + MESSAGE("**************************** In makenomenclature") | |
230 + IF (NOT LATEX_TARGET) | |
231 + MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") | |
232 + ENDIF (NOT LATEX_TARGET) | |
233 + | |
234 + IF (NOT MAKEINDEX_COMPILER) | |
235 + MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER") | |
236 + ENDIF (NOT MAKEINDEX_COMPILER) | |
237 + | |
238 + SET(nomencl_out ${LATEX_TARGET}.nls) | |
239 + SET(nomencl_in ${LATEX_TARGET}.nlo) | |
240 + | |
241 + EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_FLAGS} | |
242 + ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out} | |
243 + ) | |
244 +ENDMACRO(LATEX_MAKENOMENCLATURE) | |
245 + | |
246 +MACRO(LATEX_CORRECT_SYNCTEX) | |
247 + MESSAGE("**************************** In correct SyncTeX") | |
248 + IF (NOT LATEX_TARGET) | |
249 + MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") | |
250 + ENDIF (NOT LATEX_TARGET) | |
251 + | |
252 + IF (NOT GZIP) | |
253 + MESSAGE(SEND_ERROR "Need to define GZIP") | |
254 + ENDIF (NOT GZIP) | |
255 + | |
256 + IF (NOT LATEX_SOURCE_DIRECTORY) | |
257 + MESSAGE(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY") | |
258 + ENDIF (NOT LATEX_SOURCE_DIRECTORY) | |
259 + | |
260 + IF (NOT LATEX_BINARY_DIRECTORY) | |
261 + MESSAGE(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY") | |
262 + ENDIF (NOT LATEX_BINARY_DIRECTORY) | |
263 + | |
264 + SET(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex) | |
265 + SET(synctex_file_gz ${synctex_file}.gz) | |
266 + | |
267 + IF (EXISTS ${synctex_file_gz}) | |
268 + | |
269 + MESSAGE("Making backup of synctex file.") | |
270 + CONFIGURE_FILE(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY) | |
271 + | |
272 + MESSAGE("Uncompressing synctex file.") | |
273 + EXEC_PROGRAM(${GZIP} | |
274 + ARGS --decompress ${synctex_file_gz} | |
275 + ) | |
276 + | |
277 + MESSAGE("Reading synctex file.") | |
278 + FILE(READ ${synctex_file} synctex_data) | |
279 + | |
280 + MESSAGE("Replacing relative with absolute paths.") | |
281 + STRING(REGEX REPLACE | |
282 + "(Input:[0-9]+:)([^/\n][^\n]*)" | |
283 + "\\1${LATEX_SOURCE_DIRECTORY}/\\2" | |
284 + synctex_data | |
285 + "${synctex_data}" | |
286 + ) | |
287 + | |
288 + MESSAGE("Writing synctex file.") | |
289 + FILE(WRITE ${synctex_file} "${synctex_data}") | |
290 + | |
291 + MESSAGE("Compressing synctex file.") | |
292 + EXEC_PROGRAM(${GZIP} | |
293 + ARGS ${synctex_file} | |
294 + ) | |
295 + | |
296 + ELSE (EXISTS ${synctex_file_gz}) | |
297 + | |
298 + MESSAGE(SEND_ERROR "File ${synctex_file_gz} not found. Perhaps synctex is not supported by your LaTeX compiler.") | |
299 + | |
300 + ENDIF (EXISTS ${synctex_file_gz}) | |
301 + | |
302 +ENDMACRO(LATEX_CORRECT_SYNCTEX) | |
303 + | |
304 ############################################################################# | |
305 # Helper macros for establishing LaTeX build. | |
306 ############################################################################# | |
307 @@ -292,11 +497,19 @@ | |
308 | |
309 FIND_PACKAGE(LATEX) | |
310 | |
311 + FIND_PROGRAM(XINDY_COMPILER | |
312 + NAME xindy | |
313 + PATHS ${MIKTEX_BINARY_PATH} /usr/bin | |
314 + ) | |
315 + | |
316 + FIND_PACKAGE(UnixCommands) | |
317 + | |
318 MARK_AS_ADVANCED(CLEAR | |
319 LATEX_COMPILER | |
320 PDFLATEX_COMPILER | |
321 BIBTEX_COMPILER | |
322 MAKEINDEX_COMPILER | |
323 + XINDY_COMPILER | |
324 DVIPS_CONVERTER | |
325 PS2PDF_CONVERTER | |
326 LATEX2HTML_CONVERTER | |
327 @@ -314,12 +527,16 @@ | |
328 CACHE STRING "Flags passed to latex.") | |
329 SET(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS} | |
330 CACHE STRING "Flags passed to pdflatex.") | |
331 + SET(LATEX_SYNCTEX_FLAGS "-synctex=1" | |
332 + CACHE STRING "latex/pdflatex flags used to create synctex file.") | |
333 SET(BIBTEX_COMPILER_FLAGS "" | |
334 CACHE STRING "Flags passed to bibtex.") | |
335 SET(MAKEINDEX_COMPILER_FLAGS "" | |
336 CACHE STRING "Flags passed to makeindex.") | |
337 SET(MAKEGLOSSARIES_COMPILER_FLAGS "" | |
338 CACHE STRING "Flags passed to makeglossaries.") | |
339 + SET(MAKENOMENCLATURE_COMPILER_FLAGS "" | |
340 + CACHE STRING "Flags passed to makenomenclature.") | |
341 SET(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter" | |
342 CACHE STRING "Flags passed to dvips.") | |
343 SET(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode" | |
344 @@ -329,18 +546,22 @@ | |
345 MARK_AS_ADVANCED( | |
346 LATEX_COMPILER_FLAGS | |
347 PDFLATEX_COMPILER_FLAGS | |
348 + LATEX_SYNCTEX_FLAGS | |
349 BIBTEX_COMPILER_FLAGS | |
350 MAKEINDEX_COMPILER_FLAGS | |
351 MAKEGLOSSARIES_COMPILER_FLAGS | |
352 + MAKENOMENCLATURE_COMPILER_FLAGS | |
353 DVIPS_CONVERTER_FLAGS | |
354 PS2PDF_CONVERTER_FLAGS | |
355 LATEX2HTML_CONVERTER_FLAGS | |
356 ) | |
357 SEPARATE_ARGUMENTS(LATEX_COMPILER_FLAGS) | |
358 SEPARATE_ARGUMENTS(PDFLATEX_COMPILER_FLAGS) | |
359 + SEPARATE_ARGUMENTS(LATEX_SYNCTEX_FLAGS) | |
360 SEPARATE_ARGUMENTS(BIBTEX_COMPILER_FLAGS) | |
361 SEPARATE_ARGUMENTS(MAKEINDEX_COMPILER_FLAGS) | |
362 SEPARATE_ARGUMENTS(MAKEGLOSSARIES_COMPILER_FLAGS) | |
363 + SEPARATE_ARGUMENTS(MAKENOMENCLATURE_COMPILER_FLAGS) | |
364 SEPARATE_ARGUMENTS(DVIPS_CONVERTER_FLAGS) | |
365 SEPARATE_ARGUMENTS(PS2PDF_CONVERTER_FLAGS) | |
366 SEPARATE_ARGUMENTS(LATEX2HTML_CONVERTER_FLAGS) | |
367 @@ -352,6 +573,11 @@ | |
368 MESSAGE(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.") | |
369 ENDIF (NOT IMAGEMAGICK_CONVERT) | |
370 | |
371 + OPTION(LATEX_USE_SYNCTEX | |
372 + "If on, have LaTeX generate a synctex file, which WYSIWYG editors can use to correlate output files like dvi and pdf with the lines of LaTeX source that generates them. In addition to adding the LATEX_SYNCTEX_FLAGS to the command line, this option also adds build commands that \"corrects\" the resulting synctex file to point to the original LaTeX files rather than those generated by UseLATEX.cmake." | |
373 + OFF | |
374 + ) | |
375 + | |
376 OPTION(LATEX_SMALL_IMAGES | |
377 "If on, the raster images will be converted to 1/6 the original size. This is because papers usually require 600 dpi images whereas most monitors only require at most 96 dpi. Thus, smaller images make smaller files for web distributation and can make it faster to read dvi files." | |
378 OFF) | |
379 @@ -402,7 +628,7 @@ | |
380 IF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf") | |
381 IF (PS2PDF_CONVERTER) | |
382 SET (converter ${PS2PDF_CONVERTER}) | |
383 - SET (convert_flags "-dEPSCrop ${flags}") | |
384 + SET (convert_flags -dEPSCrop ${PS2PDF_CONVERTER_FLAGS}) | |
385 ELSE (PS2PDF_CONVERTER) | |
386 MESSAGE(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.") | |
387 ENDIF (PS2PDF_CONVERTER) | |
388 @@ -560,7 +786,7 @@ | |
389 | |
390 MACRO(LATEX_USAGE command message) | |
391 MESSAGE(SEND_ERROR | |
392 - "${message}\nUsage: ${command}(<tex_file>\n [BIBFILES <bib_file> <bib_file> ...]\n [INPUTS <tex_file> <tex_file> ...]\n [IMAGE_DIRS <directory1> <directory2> ...]\n [IMAGES <image_file1> <image_file2>\n [CONFIGURE <tex_file> <tex_file> ...]\n [DEPENDS <tex_file> <tex_file> ...]\n [USE_INDEX] [USE_GLOSSARY]\n [DEFAULT_PDF] [DEFAULT_SAFEPDF]\n [MANGLE_TARGET_NAMES])" | |
393 + "${message}\nUsage: ${command}(<tex_file>\n [BIBFILES <bib_file> <bib_file> ...]\n [INPUTS <tex_file> <tex_file> ...]\n [IMAGE_DIRS <directory1> <directory2> ...]\n [IMAGES <image_file1> <image_file2>\n [CONFIGURE <tex_file> <tex_file> ...]\n [DEPENDS <tex_file> <tex_file> ...]\n [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n [DEFAULT_PDF] [DEFAULT_SAFEPDF]\n [MANGLE_TARGET_NAMES])" | |
394 ) | |
395 ENDMACRO(LATEX_USAGE command message) | |
396 | |
397 @@ -571,7 +797,7 @@ | |
398 LATEX_PARSE_ARGUMENTS( | |
399 LATEX | |
400 "BIBFILES;INPUTS;IMAGE_DIRS;IMAGES;CONFIGURE;DEPENDS" | |
401 - "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;DEFAULT_PDF;DEFAULT_SAFEPDF;MANGLE_TARGET_NAMES" | |
402 + "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;USE_NOMENCL;DEFAULT_PDF;DEFAULT_SAFEPDF;MANGLE_TARGET_NAMES" | |
403 ${ARGN} | |
404 ) | |
405 | |
406 @@ -598,6 +824,20 @@ | |
407 LATEX_GET_OUTPUT_PATH(output_dir) | |
408 PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_TARGETS ${ARGV}) | |
409 | |
410 + IF (LATEX_USE_SYNCTEX) | |
411 + SET(synctex_flags ${LATEX_SYNCTEX_FLAGS}) | |
412 + ELSE (LATEX_USE_SYNCTEX) | |
413 + SET(synctex_flags) | |
414 + ENDIF (LATEX_USE_SYNCTEX) | |
415 + | |
416 + # The commands to run LaTeX. They are repeated multiple times. | |
417 + SET(latex_build_command | |
418 + ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT} | |
419 + ) | |
420 + SET(pdflatex_build_command | |
421 + ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT} | |
422 + ) | |
423 + | |
424 # Set up target names. | |
425 IF (LATEX_MANGLE_TARGET_NAMES) | |
426 SET(dvi_target ${LATEX_TARGET}_dvi) | |
427 @@ -615,6 +855,31 @@ | |
428 SET(auxclean_target auxclean) | |
429 ENDIF (LATEX_MANGLE_TARGET_NAMES) | |
430 | |
431 + # Probably not all of these will be generated, but they could be. | |
432 + # Note that the aux file is added later. | |
433 + SET(auxiliary_clean_files | |
434 + ${output_dir}/${LATEX_TARGET}.bbl | |
435 + ${output_dir}/${LATEX_TARGET}.blg | |
436 + ${output_dir}/${LATEX_TARGET}-blx.bib | |
437 + ${output_dir}/${LATEX_TARGET}.glg | |
438 + ${output_dir}/${LATEX_TARGET}.glo | |
439 + ${output_dir}/${LATEX_TARGET}.gls | |
440 + ${output_dir}/${LATEX_TARGET}.idx | |
441 + ${output_dir}/${LATEX_TARGET}.ilg | |
442 + ${output_dir}/${LATEX_TARGET}.ind | |
443 + ${output_dir}/${LATEX_TARGET}.ist | |
444 + ${output_dir}/${LATEX_TARGET}.log | |
445 + ${output_dir}/${LATEX_TARGET}.out | |
446 + ${output_dir}/${LATEX_TARGET}.toc | |
447 + ${output_dir}/${LATEX_TARGET}.lof | |
448 + ${output_dir}/${LATEX_TARGET}.xdy | |
449 + ${output_dir}/${LATEX_TARGET}.synctex.gz | |
450 + ${output_dir}/${LATEX_TARGET}.synctex.bak.gz | |
451 + ${output_dir}/${LATEX_TARGET}.dvi | |
452 + ${output_dir}/${LATEX_TARGET}.ps | |
453 + ${output_dir}/${LATEX_TARGET}.pdf | |
454 + ) | |
455 + | |
456 # For each directory in LATEX_IMAGE_DIRS, glob all the image files and | |
457 # place them in LATEX_IMAGES. | |
458 FOREACH(dir ${LATEX_IMAGE_DIRS}) | |
459 @@ -636,16 +901,24 @@ | |
460 | |
461 SET(make_dvi_command | |
462 ${CMAKE_COMMAND} -E chdir ${output_dir} | |
463 - ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}) | |
464 + ${latex_build_command}) | |
465 SET(make_pdf_command | |
466 ${CMAKE_COMMAND} -E chdir ${output_dir} | |
467 - ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}) | |
468 + ${pdflatex_build_command} | |
469 + ) | |
470 | |
471 SET(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images}) | |
472 SET(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images}) | |
473 FOREACH(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS}) | |
474 SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${input}) | |
475 SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${input}) | |
476 + IF (${input} MATCHES "\\.tex$") | |
477 + STRING(REGEX REPLACE "\\.tex$" "" input_we ${input}) | |
478 + SET(auxiliary_clean_files ${auxiliary_clean_files} | |
479 + ${output_dir}/${input_we}.aux | |
480 + ${output_dir}/${input}.aux | |
481 + ) | |
482 + ENDIF (${input} MATCHES "\\.tex$") | |
483 ENDFOREACH(input) | |
484 | |
485 IF (LATEX_USE_GLOSSARY) | |
486 @@ -656,10 +929,11 @@ | |
487 -D LATEX_BUILD_COMMAND=makeglossaries | |
488 -D LATEX_TARGET=${LATEX_TARGET} | |
489 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} | |
490 + -D XINDY_COMPILER=${XINDY_COMPILER} | |
491 -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS} | |
492 -P ${LATEX_USE_LATEX_LOCATION} | |
493 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
494 - ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
495 + ${latex_build_command} | |
496 ) | |
497 SET(make_pdf_command ${make_pdf_command} | |
498 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
499 @@ -667,14 +941,42 @@ | |
500 -D LATEX_BUILD_COMMAND=makeglossaries | |
501 -D LATEX_TARGET=${LATEX_TARGET} | |
502 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} | |
503 + -D XINDY_COMPILER=${XINDY_COMPILER} | |
504 -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS} | |
505 -P ${LATEX_USE_LATEX_LOCATION} | |
506 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
507 - ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
508 + ${pdflatex_build_command} | |
509 ) | |
510 ENDFOREACH(dummy) | |
511 ENDIF (LATEX_USE_GLOSSARY) | |
512 | |
513 + IF (LATEX_USE_NOMENCL) | |
514 + FOREACH(dummy 0 1) # Repeat these commands twice. | |
515 + SET(make_dvi_command ${make_dvi_command} | |
516 + COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
517 + ${CMAKE_COMMAND} | |
518 + -D LATEX_BUILD_COMMAND=makenomenclature | |
519 + -D LATEX_TARGET=${LATEX_TARGET} | |
520 + -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} | |
521 + -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS} | |
522 + -P ${LATEX_USE_LATEX_LOCATION} | |
523 + COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
524 + ${latex_build_command} | |
525 + ) | |
526 + SET(make_pdf_command ${make_pdf_command} | |
527 + COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
528 + ${CMAKE_COMMAND} | |
529 + -D LATEX_BUILD_COMMAND=makenomenclature | |
530 + -D LATEX_TARGET=${LATEX_TARGET} | |
531 + -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} | |
532 + -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS} | |
533 + -P ${LATEX_USE_LATEX_LOCATION} | |
534 + COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
535 + ${pdflatex_build_command} | |
536 + ) | |
537 + ENDFOREACH(dummy) | |
538 + ENDIF (LATEX_USE_NOMENCL) | |
539 + | |
540 IF (LATEX_BIBFILES) | |
541 SET(make_dvi_command ${make_dvi_command} | |
542 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
543 @@ -691,26 +993,50 @@ | |
544 IF (LATEX_USE_INDEX) | |
545 SET(make_dvi_command ${make_dvi_command} | |
546 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
547 - ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
548 + ${latex_build_command} | |
549 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
550 ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx) | |
551 SET(make_pdf_command ${make_pdf_command} | |
552 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
553 - ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
554 + ${pdflatex_build_command} | |
555 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
556 ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx) | |
557 ENDIF (LATEX_USE_INDEX) | |
558 | |
559 SET(make_dvi_command ${make_dvi_command} | |
560 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
561 - ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
562 + ${latex_build_command} | |
563 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
564 - ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}) | |
565 + ${latex_build_command}) | |
566 SET(make_pdf_command ${make_pdf_command} | |
567 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
568 - ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT} | |
569 + ${pdflatex_build_command} | |
570 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} | |
571 - ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}) | |
572 + ${pdflatex_build_command}) | |
573 + | |
574 + IF (LATEX_USE_SYNCTEX) | |
575 + IF (NOT GZIP) | |
576 + MESSAGE(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program. Set GZIP variable.") | |
577 + ENDIF (NOT GZIP) | |
578 + SET(make_dvi_command ${make_dvi_command} | |
579 + COMMAND ${CMAKE_COMMAND} | |
580 + -D LATEX_BUILD_COMMAND=correct_synctex | |
581 + -D LATEX_TARGET=${LATEX_TARGET} | |
582 + -D GZIP=${GZIP} | |
583 + -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" | |
584 + -D "LATEX_BINARY_DIRECTORY=${output_dir}" | |
585 + -P ${LATEX_USE_LATEX_LOCATION} | |
586 + ) | |
587 + SET(make_pdf_command ${make_pdf_command} | |
588 + COMMAND ${CMAKE_COMMAND} | |
589 + -D LATEX_BUILD_COMMAND=correct_synctex | |
590 + -D LATEX_TARGET=${LATEX_TARGET} | |
591 + -D GZIP=${GZIP} | |
592 + -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" | |
593 + -D "LATEX_BINARY_DIRECTORY=${output_dir}" | |
594 + -P ${LATEX_USE_LATEX_LOCATION} | |
595 + ) | |
596 + ENDIF (LATEX_USE_SYNCTEX) | |
597 | |
598 # Add commands and targets for building dvi outputs. | |
599 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi | |
600 @@ -774,8 +1100,13 @@ | |
601 ADD_DEPENDENCIES(${html_target} ${LATEX_MAIN_INPUT} ${LATEX_INPUTS}) | |
602 ENDIF (LATEX2HTML_CONVERTER) | |
603 | |
604 + SET_DIRECTORY_PROPERTIES(. | |
605 + ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}" | |
606 + ) | |
607 + | |
608 ADD_CUSTOM_TARGET(${auxclean_target} | |
609 - ${CMAKE_COMMAND} -E remove ${output_dir}/${LATEX_TARGET}.aux ${output_dir}/${LATEX_TARGET}.idx ${output_dir}/${LATEX_TARGET}.ind | |
610 + COMMENT "Cleaning auxiliary LaTeX files." | |
611 + COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files} | |
612 ) | |
613 ENDMACRO(ADD_LATEX_TARGETS) | |
614 | |
615 @@ -787,14 +1118,7 @@ | |
616 LATEX_COPY_INPUT_FILE(${LATEX_MAIN_INPUT}) | |
617 | |
618 FOREACH (bib_file ${LATEX_BIBFILES}) | |
619 - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${bib_file} | |
620 - ${output_dir}/${bib_file} | |
621 - COPYONLY) | |
622 - ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${bib_file} | |
623 - COMMAND ${CMAKE_COMMAND} | |
624 - ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file} ${output_dir}/${bib_file} | |
625 - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file} | |
626 - ) | |
627 + LATEX_COPY_INPUT_FILE(${bib_file}) | |
628 ENDFOREACH (bib_file) | |
629 | |
630 FOREACH (input ${LATEX_INPUTS}) | |
631 @@ -805,6 +1129,7 @@ | |
632 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir}) | |
633 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir}) | |
634 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir}) | |
635 + LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir}) | |
636 | |
637 ADD_LATEX_TARGETS(${ARGV}) | |
638 ENDIF (output_dir) | |
639 @@ -822,6 +1147,16 @@ | |
640 SET(command_handled TRUE) | |
641 ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries) | |
642 | |
643 + IF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature) | |
644 + LATEX_MAKENOMENCLATURE() | |
645 + SET(command_handled TRUE) | |
646 + ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature) | |
647 + | |
648 + IF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex) | |
649 + LATEX_CORRECT_SYNCTEX() | |
650 + SET(command_handled TRUE) | |
651 + ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex) | |
652 + | |
653 IF (NOT command_handled) | |
654 MESSAGE(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}") | |
655 ENDIF (NOT command_handled) |