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)