1# File: UseLATEX.cmake 2# CMAKE commands to actually use the LaTeX compiler 3# Version: 1.10.5 4# Author: Kenneth Moreland <kmorel@sandia.gov> 5# 6# Copyright 2004 Sandia Corporation. 7# Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive 8# license for use of this work by or on behalf of the 9# U.S. Government. Redistribution and use in source and binary forms, with 10# or without modification, are permitted provided that this Notice and any 11# statement of authorship are reproduced on all copies. 12# 13# The following function is defined: 14# 15# ADD_LATEX_DOCUMENT(<tex_file> 16# [BIBFILES <bib_files>] 17# [INPUTS <input_tex_files>] 18# [IMAGE_DIRS] <image_directories> 19# [IMAGES] <image_files> 20# [CONFIGURE] <tex_files> 21# [DEPENDS] <tex_files> 22# [MULTIBIB_NEWCITES] <suffix_list> 23# [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL] 24# [DEFAULT_PDF] [DEFAULT_SAFEPDF] [DEFAULT_PS] [NO_DEFAULT] 25# [MANGLE_TARGET_NAMES]) 26# Adds targets that compile <tex_file>. The latex output is placed 27# in LATEX_OUTPUT_PATH or CMAKE_CURRENT_BINARY_DIR if the former is 28# not set. The latex program is picky about where files are located, 29# so all input files are copied from the source directory to the 30# output directory. This includes the target tex file, any tex file 31# listed with the INPUTS option, the bibliography files listed with 32# the BIBFILES option, and any .cls, .bst, and .clo files found in 33# the current source directory. Images found in the IMAGE_DIRS 34# directories or listed by IMAGES are also copied to the output 35# directory and coverted to an appropriate format if necessary. Any 36# tex files also listed with the CONFIGURE option are also processed 37# with the CMake CONFIGURE_FILE command (with the @ONLY flag). Any 38# file listed in CONFIGURE but not the target tex file or listed with 39# INPUTS has no effect. DEPENDS can be used to specify generated files 40# that are needed to compile the latex target. 41# 42# The following targets are made: 43# dvi: Makes <name>.dvi 44# pdf: Makes <name>.pdf using pdflatex. 45# safepdf: Makes <name>.pdf using ps2pdf. If using the default 46# program arguments, this will ensure all fonts are 47# embedded and no lossy compression has been performed 48# on images. 49# ps: Makes <name>.ps 50# html: Makes <name>.html 51# auxclean: Deletes <name>.aux and other auxiliary files. 52# This is sometimes necessary if a LaTeX error occurs 53# and writes a bad aux file. Unlike the regular clean 54# target, it does not delete other input files, such as 55# converted images, to save time on the rebuild. 56# 57# The dvi target is added to the ALL. That is, it will be the target 58# built by default. If the DEFAULT_PDF argument is given, then the 59# pdf target will be the default instead of dvi. Likewise, 60# DEFAULT_SAFEPDF sets the default target to safepdf. If NO_DEFAULT 61# is specified, then no target will be added to ALL, which is 62# convenient when including LaTeX documentation with something else. 63# 64# If the argument MANGLE_TARGET_NAMES is given, then each of the 65# target names above will be mangled with the <tex_file> name. This 66# is to make the targets unique if ADD_LATEX_DOCUMENT is called for 67# multiple documents. If the argument USE_INDEX is given, then 68# commands to build an index are made. If the argument USE_GLOSSARY 69# is given, then commands to build a glossary are made. If the 70# argument MULTIBIB_NEWCITES is given, then additional bibtex calls 71# are added to the build to support the extra auxiliary files created 72# with the \newcite command in the multibib package. 73# 74# History: 75# 76# 1.10.5 Fix for Window's convert check (thanks to Martin Baute). 77# 78# 1.10.4 Copy font files to binary directory for packages that come with 79# their own fonts. 80# 81# 1.10.3 Check for Windows version of convert being used instead of 82# ImageMagick's version (thanks to Martin Baute). 83# 84# 1.10.2 Use htlatex as a fallback when latex2html is not available (thanks 85# to Tomasz Grzegurzko). 86# 87# 1.10.1 Make convert program mandatory only if actually used (thanks to 88# Julien Schueller). 89# 90# 1.10.0 Added NO_DEFAULT and DEFAULT_PS options. 91# Fixed issue with cleaning files for LaTeX documents originating in 92# a subdirectory. 93# 94# 1.9.6 Fixed problem with LATEX_SMALL_IMAGES. 95# Strengthened check to make sure the output directory does not contain 96# the source files. 97# 98# 1.9.5 Add support for image types not directly supported by either latex 99# or pdflatex. (Thanks to Jorge Gerardo Pena Pastor for SVG support.) 100# 101# 1.9.4 Fix issues with filenames containing multiple periods. 102# 103# 1.9.3 Hide some variables that are now cached but should not show up in 104# the ccmake list of variables. 105# 106# 1.9.2 Changed MACRO declarations to FUNCTION declarations. The better 107# FUNCTION scoping will hopefully avoid some common but subtle bugs. 108# This implicitly increases the minimum CMake version to 4.6 (although 109# I honestly only test it with the latest 4.8 version). 110# 111# Since we are updating the minimum CMake version, I'm going to start 112# using the builtin LIST commands that are now available. 113# 114# Favor using pdftops from the Poppler package to convert from pdf to 115# eps. It does a much better job than ImageMagick or ghostscript. 116# 117# 1.9.1 Fixed typo that caused the LATEX_SMALL_IMAGES option to fail to 118# activate. 119# 120# 1.9.0 Add support for the multibib package (thanks to Antonio LaTorre). 121# 122# 1.8.2 Fix corner case when an argument name was also a variable containing 123# the text of an argument. In this case, the CMake IF was matching 124# the argument text with the contents of the variable with the same 125# argument name. 126# 127# 1.8.1 Fix problem where ps2pdf was not getting the appropriate arguments. 128# 129# 1.8.0 Add support for synctex. 130# 131# 1.7.7 Support calling xindy when making glossaries. 132# 133# Improved make clean support. 134# 135# 1.7.6 Add support for the nomencl package (thanks to Myles English). 136# 137# 1.7.5 Fix issue with bibfiles being copied two different ways, which causes 138# Problems with dependencies (thanks to Edwin van Leeuwen). 139# 140# 1.7.4 Added the DEFAULT_SAFEPDF option (thanks to Raymond Wan). 141# 142# Added warnings when image directories are not found (and were 143# probably not given relative to the source directory). 144# 145# 1.7.3 Fix some issues with interactions between makeglossaries and bibtex 146# (thanks to Mark de Wever). 147# 148# 1.7.2 Use ps2pdf to convert eps to pdf to get around the problem with 149# ImageMagick dropping the bounding box (thanks to Lukasz Lis). 150# 151# 1.7.1 Fixed some dependency issues. 152# 153# 1.7.0 Added DEPENDS options (thanks to Theodore Papadopoulo). 154# 155# 1.6.1 Ported the makeglossaries command to CMake and embedded the port 156# into UseLATEX.cmake. 157# 158# 1.6.0 Allow the use of the makeglossaries command. Thanks to Oystein 159# S. Haaland for the patch. 160# 161# 1.5.0 Allow any type of file in the INPUTS lists, not just tex file 162# (suggested by Eric Noulard). As a consequence, the ability to 163# specify tex files without the .tex extension is removed. The removed 164# function is of dubious value anyway. 165# 166# When copying input files, skip over any file that exists in the 167# binary directory but does not exist in the source directory with the 168# assumption that these files were added by some other mechanism. I 169# find this useful when creating large documents with multiple 170# chapters that I want to build separately (for speed) as I work on 171# them. I use the same boilerplate as the starting point for all 172# and just copy it with different configurations. This was what the 173# separate ADD_LATEX_DOCUMENT method was supposed to originally be for. 174# Since its external use is pretty much deprecated, I removed that 175# documentation. 176# 177# 1.4.1 Copy .sty files along with the other class and package files. 178# 179# 1.4.0 Added a MANGLE_TARGET_NAMES option that will mangle the target names. 180# 181# Fixed problem with copying bib files that became apparent with 182# CMake 2.4. 183# 184# 1.3.0 Added a LATEX_OUTPUT_PATH variable that allows you or the user to 185# specify where the built latex documents to go. This is especially 186# handy if you want to do in-source builds. 187# 188# Removed the ADD_LATEX_IMAGES macro and absorbed the functionality 189# into ADD_LATEX_DOCUMENT. The old interface was always kind of 190# clunky anyway since you had to specify the image directory in both 191# places. It also made supporting LATEX_OUTPUT_PATH problematic. 192# 193# Added support for jpeg files. 194# 195# 1.2.0 Changed the configuration options yet again. Removed the NO_CONFIGURE 196# Replaced it with a CONFIGURE option that lists input files for which 197# configure should be run. 198# 199# The pdf target no longer depends on the dvi target. This allows you 200# to build latex documents that require pdflatex. Also added an option 201# to make the pdf target the default one. 202# 203# 1.1.1 Added the NO_CONFIGURE option. The @ character can be used when 204# specifying table column separators. If two or more are used, then 205# will incorrectly substitute them. 206# 207# 1.1.0 Added ability include multiple bib files. Added ability to do copy 208# sub-tex files for multipart tex files. 209# 210# 1.0.0 If both ps and pdf type images exist, just copy the one that 211# matches the current render mode. Replaced a bunch of STRING 212# commands with GET_FILENAME_COMPONENT commands that were made to do 213# the desired function. 214# 215# 0.4.0 First version posted to CMake Wiki. 216# 217 218############################################################################# 219# Find the location of myself while originally executing. If you do this 220# inside of a macro, it will recode where the macro was invoked. 221############################################################################# 222SET(LATEX_USE_LATEX_LOCATION ${CMAKE_CURRENT_LIST_FILE} 223 CACHE INTERNAL "Location of UseLATEX.cmake file." FORCE 224 ) 225 226############################################################################# 227# Generic helper functions 228############################################################################# 229 230FUNCTION(LATEX_LIST_CONTAINS var value) 231 SET(input_list ${ARGN}) 232 LIST(FIND input_list "${value}" index) 233 IF (index GREATER -1) 234 SET(${var} TRUE PARENT_SCOPE) 235 ELSE (index GREATER -1) 236 SET(${var} PARENT_SCOPE) 237 ENDIF (index GREATER -1) 238ENDFUNCTION(LATEX_LIST_CONTAINS) 239 240# Parse function arguments. Variables containing the results are placed 241# in the global scope for historical reasons. 242FUNCTION(LATEX_PARSE_ARGUMENTS prefix arg_names option_names) 243 SET(DEFAULT_ARGS) 244 FOREACH(arg_name ${arg_names}) 245 SET(${prefix}_${arg_name} CACHE INTERNAL "${prefix} argument" FORCE) 246 ENDFOREACH(arg_name) 247 FOREACH(option ${option_names}) 248 SET(${prefix}_${option} CACHE INTERNAL "${prefix} option" FORCE) 249 ENDFOREACH(option) 250 251 SET(current_arg_name DEFAULT_ARGS) 252 SET(current_arg_list) 253 FOREACH(arg ${ARGN}) 254 LATEX_LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) 255 LATEX_LIST_CONTAINS(is_option ${arg} ${option_names}) 256 IF (is_arg_name) 257 SET(${prefix}_${current_arg_name} ${current_arg_list} 258 CACHE INTERNAL "${prefix} argument" FORCE) 259 SET(current_arg_name ${arg}) 260 SET(current_arg_list) 261 ELSEIF (is_option) 262 SET(${prefix}_${arg} TRUE CACHE INTERNAL "${prefix} option" FORCE) 263 ELSE (is_arg_name) 264 SET(current_arg_list ${current_arg_list} ${arg}) 265 ENDIF (is_arg_name) 266 ENDFOREACH(arg) 267 SET(${prefix}_${current_arg_name} ${current_arg_list} 268 CACHE INTERNAL "${prefix} argument" FORCE) 269ENDFUNCTION(LATEX_PARSE_ARGUMENTS) 270 271# Match the contents of a file to a regular expression. 272FUNCTION(LATEX_FILE_MATCH variable filename regexp default) 273 # The FILE STRINGS command would be a bit better, but I'm not totally sure 274 # the match will always be to a whole line, and I don't want to break things. 275 FILE(READ ${filename} file_contents) 276 STRING(REGEX MATCHALL "${regexp}" 277 match_result ${file_contents} 278 ) 279 IF (match_result) 280 SET(${variable} "${match_result}" PARENT_SCOPE) 281 ELSE (match_result) 282 SET(${variable} "${default}" PARENT_SCOPE) 283 ENDIF (match_result) 284ENDFUNCTION(LATEX_FILE_MATCH) 285 286# A version of GET_FILENAME_COMPONENT that treats extensions after the last 287# period rather than the first. To the best of my knowledge, all filenames 288# typically used by LaTeX, including image files, have small extensions 289# after the last dot. 290FUNCTION(LATEX_GET_FILENAME_COMPONENT varname filename type) 291 SET(result) 292 IF ("${type}" STREQUAL "NAME_WE") 293 GET_FILENAME_COMPONENT(name ${filename} NAME) 294 STRING(REGEX REPLACE "\\.[^.]*\$" "" result "${name}") 295 ELSEIF ("${type}" STREQUAL "EXT") 296 GET_FILENAME_COMPONENT(name ${filename} NAME) 297 STRING(REGEX MATCH "\\.[^.]*\$" result "${name}") 298 ELSE ("${type}" STREQUAL "NAME_WE") 299 GET_FILENAME_COMPONENT(result ${filename} ${type}) 300 ENDIF ("${type}" STREQUAL "NAME_WE") 301 SET(${varname} "${result}" PARENT_SCOPE) 302ENDFUNCTION(LATEX_GET_FILENAME_COMPONENT) 303 304############################################################################# 305# Functions that perform processing during a LaTeX build. 306############################################################################# 307FUNCTION(LATEX_MAKEGLOSSARIES) 308 # This is really a bare bones port of the makeglossaries perl script into 309 # CMake scripting. 310 MESSAGE("**************************** In makeglossaries") 311 IF (NOT LATEX_TARGET) 312 MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") 313 ENDIF (NOT LATEX_TARGET) 314 315 SET(aux_file ${LATEX_TARGET}.aux) 316 317 IF (NOT EXISTS ${aux_file}) 318 MESSAGE(SEND_ERROR "${aux_file} does not exist. Run latex on your target file.") 319 ENDIF (NOT EXISTS ${aux_file}) 320 321 LATEX_FILE_MATCH(newglossary_lines ${aux_file} 322 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" 323 "@newglossary{main}{glg}{gls}{glo}" 324 ) 325 326 LATEX_FILE_MATCH(istfile_line ${aux_file} 327 "@istfilename[ \t]*{([^}]*)}" 328 "@istfilename{${LATEX_TARGET}.ist}" 329 ) 330 STRING(REGEX REPLACE "@istfilename[ \t]*{([^}]*)}" "\\1" 331 istfile ${istfile_line} 332 ) 333 334 STRING(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}") 335 IF (use_xindy) 336 MESSAGE("*************** Using xindy") 337 IF (NOT XINDY_COMPILER) 338 MESSAGE(SEND_ERROR "Need to define XINDY_COMPILER") 339 ENDIF (NOT XINDY_COMPILER) 340 ELSE (use_xindy) 341 MESSAGE("*************** Using makeindex") 342 IF (NOT MAKEINDEX_COMPILER) 343 MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER") 344 ENDIF (NOT MAKEINDEX_COMPILER) 345 ENDIF (use_xindy) 346 347 FOREACH(newglossary ${newglossary_lines}) 348 STRING(REGEX REPLACE 349 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" 350 "\\1" glossary_name ${newglossary} 351 ) 352 STRING(REGEX REPLACE 353 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" 354 "${LATEX_TARGET}.\\2" glossary_log ${newglossary} 355 ) 356 STRING(REGEX REPLACE 357 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" 358 "${LATEX_TARGET}.\\3" glossary_out ${newglossary} 359 ) 360 STRING(REGEX REPLACE 361 "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" 362 "${LATEX_TARGET}.\\4" glossary_in ${newglossary} 363 ) 364 365 IF (use_xindy) 366 LATEX_FILE_MATCH(xdylanguage_line ${aux_file} 367 "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" 368 "@xdylanguage{${glossary_name}}{english}" 369 ) 370 STRING(REGEX REPLACE 371 "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" 372 "\\1" 373 language 374 ${xdylanguage_line} 375 ) 376 # What crazy person makes a LaTeX index generater that uses different 377 # identifiers for language than babel (or at least does not support 378 # the old ones)? 379 IF (${language} STREQUAL "frenchb") 380 SET(language "french") 381 ELSEIF (${language} MATCHES "^n?germanb?$") 382 SET(language "german") 383 ELSEIF (${language} STREQUAL "magyar") 384 SET(language "hungarian") 385 ELSEIF (${language} STREQUAL "lsorbian") 386 SET(language "lower-sorbian") 387 ELSEIF (${language} STREQUAL "norsk") 388 SET(language "norwegian") 389 ELSEIF (${language} STREQUAL "portuges") 390 SET(language "portuguese") 391 ELSEIF (${language} STREQUAL "russianb") 392 SET(language "russian") 393 ELSEIF (${language} STREQUAL "slovene") 394 SET(language "slovenian") 395 ELSEIF (${language} STREQUAL "ukraineb") 396 SET(language "ukrainian") 397 ELSEIF (${language} STREQUAL "usorbian") 398 SET(language "upper-sorbian") 399 ENDIF (${language} STREQUAL "frenchb") 400 IF (language) 401 SET(language_flags "-L ${language}") 402 ELSE (language) 403 SET(language_flags "") 404 ENDIF (language) 405 406 LATEX_FILE_MATCH(codepage_line ${aux_file} 407 "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" 408 "@gls@codepage{${glossary_name}}{utf}" 409 ) 410 STRING(REGEX REPLACE 411 "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" 412 "\\1" 413 codepage 414 ${codepage_line} 415 ) 416 IF (codepage) 417 SET(codepage_flags "-C ${codepage}") 418 ELSE (codepage) 419 # Ideally, we would check that the language is compatible with the 420 # default codepage, but I'm hoping that distributions will be smart 421 # enough to specify their own codepage. I know, it's asking a lot. 422 SET(codepage_flags "") 423 ENDIF (codepage) 424 425 MESSAGE("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}" 426 ) 427 EXEC_PROGRAM(${XINDY_COMPILER} 428 ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} 429 ${language_flags} 430 ${codepage_flags} 431 -I xindy 432 -M ${glossary_name} 433 -t ${glossary_log} 434 -o ${glossary_out} 435 ${glossary_in} 436 OUTPUT_VARIABLE xindy_output 437 ) 438 MESSAGE("${xindy_output}") 439 440 # So, it is possible (perhaps common?) for aux files to specify a 441 # language and codepage that are incompatible with each other. Check 442 # for that condition, and if it happens run again with the default 443 # codepage. 444 IF ("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$") 445 MESSAGE("*************** Retrying xindy with default codepage.") 446 EXEC_PROGRAM(${XINDY_COMPILER} 447 ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} 448 ${language_flags} 449 -I xindy 450 -M ${glossary_name} 451 -t ${glossary_log} 452 -o ${glossary_out} 453 ${glossary_in} 454 ) 455 ENDIF ("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$") 456 457 ELSE (use_xindy) 458 MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}") 459 EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS} 460 -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in} 461 ) 462 ENDIF (use_xindy) 463 464 ENDFOREACH(newglossary) 465ENDFUNCTION(LATEX_MAKEGLOSSARIES) 466 467FUNCTION(LATEX_MAKENOMENCLATURE) 468 MESSAGE("**************************** In makenomenclature") 469 IF (NOT LATEX_TARGET) 470 MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") 471 ENDIF (NOT LATEX_TARGET) 472 473 IF (NOT MAKEINDEX_COMPILER) 474 MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER") 475 ENDIF (NOT MAKEINDEX_COMPILER) 476 477 SET(nomencl_out ${LATEX_TARGET}.nls) 478 SET(nomencl_in ${LATEX_TARGET}.nlo) 479 480 EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_FLAGS} 481 ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out} 482 ) 483ENDFUNCTION(LATEX_MAKENOMENCLATURE) 484 485FUNCTION(LATEX_CORRECT_SYNCTEX) 486 MESSAGE("**************************** In correct SyncTeX") 487 IF (NOT LATEX_TARGET) 488 MESSAGE(SEND_ERROR "Need to define LATEX_TARGET") 489 ENDIF (NOT LATEX_TARGET) 490 491 IF (NOT GZIP) 492 MESSAGE(SEND_ERROR "Need to define GZIP") 493 ENDIF (NOT GZIP) 494 495 IF (NOT LATEX_SOURCE_DIRECTORY) 496 MESSAGE(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY") 497 ENDIF (NOT LATEX_SOURCE_DIRECTORY) 498 499 IF (NOT LATEX_BINARY_DIRECTORY) 500 MESSAGE(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY") 501 ENDIF (NOT LATEX_BINARY_DIRECTORY) 502 503 SET(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex) 504 SET(synctex_file_gz ${synctex_file}.gz) 505 506 IF (EXISTS ${synctex_file_gz}) 507 508 MESSAGE("Making backup of synctex file.") 509 CONFIGURE_FILE(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY) 510 511 MESSAGE("Uncompressing synctex file.") 512 EXEC_PROGRAM(${GZIP} 513 ARGS --decompress ${synctex_file_gz} 514 ) 515 516 MESSAGE("Reading synctex file.") 517 FILE(READ ${synctex_file} synctex_data) 518 519 MESSAGE("Replacing relative with absolute paths.") 520 STRING(REGEX REPLACE 521 "(Input:[0-9]+:)([^/\n][^\n]*)" 522 "\\1${LATEX_SOURCE_DIRECTORY}/\\2" 523 synctex_data 524 "${synctex_data}" 525 ) 526 527 MESSAGE("Writing synctex file.") 528 FILE(WRITE ${synctex_file} "${synctex_data}") 529 530 MESSAGE("Compressing synctex file.") 531 EXEC_PROGRAM(${GZIP} 532 ARGS ${synctex_file} 533 ) 534 535 ELSE (EXISTS ${synctex_file_gz}) 536 537 MESSAGE(SEND_ERROR "File ${synctex_file_gz} not found. Perhaps synctex is not supported by your LaTeX compiler.") 538 539 ENDIF (EXISTS ${synctex_file_gz}) 540 541ENDFUNCTION(LATEX_CORRECT_SYNCTEX) 542 543############################################################################# 544# Helper functions for establishing LaTeX build. 545############################################################################# 546 547FUNCTION(LATEX_NEEDIT VAR NAME) 548 IF (NOT ${VAR}) 549 MESSAGE(SEND_ERROR "I need the ${NAME} command.") 550 ENDIF(NOT ${VAR}) 551ENDFUNCTION(LATEX_NEEDIT) 552 553FUNCTION(LATEX_WANTIT VAR NAME) 554 IF (NOT ${VAR}) 555 MESSAGE(STATUS "I could not find the ${NAME} command.") 556 ENDIF(NOT ${VAR}) 557ENDFUNCTION(LATEX_WANTIT) 558 559FUNCTION(LATEX_SETUP_VARIABLES) 560 SET(LATEX_OUTPUT_PATH "${LATEX_OUTPUT_PATH}" 561 CACHE PATH "If non empty, specifies the location to place LaTeX output." 562 ) 563 564 FIND_PACKAGE(LATEX) 565 566 FIND_PROGRAM(XINDY_COMPILER 567 NAME xindy 568 PATHS ${MIKTEX_BINARY_PATH} /usr/bin 569 ) 570 571 FIND_PACKAGE(UnixCommands) 572 573 FIND_PROGRAM(PDFTOPS_CONVERTER 574 NAMES pdftops 575 DOC "The pdf to ps converter program from the Poppler package." 576 ) 577 578 MARK_AS_ADVANCED(CLEAR 579 LATEX_COMPILER 580 PDFLATEX_COMPILER 581 BIBTEX_COMPILER 582 MAKEINDEX_COMPILER 583 XINDY_COMPILER 584 DVIPS_CONVERTER 585 PS2PDF_CONVERTER 586 PDFTOPS_CONVERTER 587 LATEX2HTML_CONVERTER 588 ) 589 590 LATEX_NEEDIT(LATEX_COMPILER latex) 591 LATEX_WANTIT(PDFLATEX_COMPILER pdflatex) 592 LATEX_NEEDIT(BIBTEX_COMPILER bibtex) 593 LATEX_NEEDIT(MAKEINDEX_COMPILER makeindex) 594 LATEX_WANTIT(DVIPS_CONVERTER dvips) 595 LATEX_WANTIT(PS2PDF_CONVERTER ps2pdf) 596 LATEX_WANTIT(PDFTOPS_CONVERTER pdftops) 597 # MiKTeX calls latex2html htlatex 598 IF (NOT ${LATEX2HTML_CONVERTER}) 599 FIND_PROGRAM(HTLATEX_CONVERTER 600 NAMES htlatex 601 PATHS ${MIKTEX_BINARY_PATH} 602 /usr/bin 603 ) 604 IF (HTLATEX_CONVERTER) 605 SET(USING_HTLATEX TRUE CACHE INTERNAL "True when using MiKTeX htlatex instead of latex2html" FORCE) 606 SET(LATEX2HTML_CONVERTER ${HTLATEX_CONVERTER} 607 CACHE FILEPATH "htlatex taking the place of latex2html" FORCE) 608 ELSE (HTLATEX_CONVERTER) 609 SET(USING_HTLATEX FALSE CACHE INTERNAL "True when using MiKTeX htlatex instead of latex2html" FORCE) 610 ENDIF (HTLATEX_CONVERTER) 611 ENDIF (NOT ${LATEX2HTML_CONVERTER}) 612 LATEX_WANTIT(LATEX2HTML_CONVERTER latex2html) 613 614 SET(LATEX_COMPILER_FLAGS "-interaction=nonstopmode" 615 CACHE STRING "Flags passed to latex.") 616 SET(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS} 617 CACHE STRING "Flags passed to pdflatex.") 618 SET(LATEX_SYNCTEX_FLAGS "-synctex=1" 619 CACHE STRING "latex/pdflatex flags used to create synctex file.") 620 SET(BIBTEX_COMPILER_FLAGS "" 621 CACHE STRING "Flags passed to bibtex.") 622 SET(MAKEINDEX_COMPILER_FLAGS "" 623 CACHE STRING "Flags passed to makeindex.") 624 SET(MAKEGLOSSARIES_COMPILER_FLAGS "" 625 CACHE STRING "Flags passed to makeglossaries.") 626 SET(MAKENOMENCLATURE_COMPILER_FLAGS "" 627 CACHE STRING "Flags passed to makenomenclature.") 628 SET(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter" 629 CACHE STRING "Flags passed to dvips.") 630 SET(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode" 631 CACHE STRING "Flags passed to ps2pdf.") 632 SET(PDFTOPS_CONVERTER_FLAGS -r 600 633 CACHE STRING "Flags passed to pdftops.") 634 SET(LATEX2HTML_CONVERTER_FLAGS "" 635 CACHE STRING "Flags passed to latex2html.") 636 MARK_AS_ADVANCED( 637 LATEX_COMPILER_FLAGS 638 PDFLATEX_COMPILER_FLAGS 639 LATEX_SYNCTEX_FLAGS 640 BIBTEX_COMPILER_FLAGS 641 MAKEINDEX_COMPILER_FLAGS 642 MAKEGLOSSARIES_COMPILER_FLAGS 643 MAKENOMENCLATURE_COMPILER_FLAGS 644 DVIPS_CONVERTER_FLAGS 645 PS2PDF_CONVERTER_FLAGS 646 PDFTOPS_CONVERTER_FLAGS 647 LATEX2HTML_CONVERTER_FLAGS 648 ) 649 SEPARATE_ARGUMENTS(LATEX_COMPILER_FLAGS) 650 SEPARATE_ARGUMENTS(PDFLATEX_COMPILER_FLAGS) 651 SEPARATE_ARGUMENTS(LATEX_SYNCTEX_FLAGS) 652 SEPARATE_ARGUMENTS(BIBTEX_COMPILER_FLAGS) 653 SEPARATE_ARGUMENTS(MAKEINDEX_COMPILER_FLAGS) 654 SEPARATE_ARGUMENTS(MAKEGLOSSARIES_COMPILER_FLAGS) 655 SEPARATE_ARGUMENTS(MAKENOMENCLATURE_COMPILER_FLAGS) 656 SEPARATE_ARGUMENTS(DVIPS_CONVERTER_FLAGS) 657 SEPARATE_ARGUMENTS(PS2PDF_CONVERTER_FLAGS) 658 SEPARATE_ARGUMENTS(PDFTOPS_CONVERTER_FLAGS) 659 SEPARATE_ARGUMENTS(LATEX2HTML_CONVERTER_FLAGS) 660 661 FIND_PROGRAM(IMAGEMAGICK_CONVERT convert 662 DOC "The convert program that comes with ImageMagick (available at http://www.imagemagick.org)." 663 ) 664 665 OPTION(LATEX_USE_SYNCTEX 666 "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." 667 OFF 668 ) 669 670 OPTION(LATEX_SMALL_IMAGES 671 "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." 672 OFF) 673 IF (LATEX_SMALL_IMAGES) 674 SET(LATEX_RASTER_SCALE 16 PARENT_SCOPE) 675 SET(LATEX_OPPOSITE_RASTER_SCALE 100 PARENT_SCOPE) 676 ELSE (LATEX_SMALL_IMAGES) 677 SET(LATEX_RASTER_SCALE 100 PARENT_SCOPE) 678 SET(LATEX_OPPOSITE_RASTER_SCALE 16 PARENT_SCOPE) 679 ENDIF (LATEX_SMALL_IMAGES) 680 681 # Just holds extensions for known image types. They should all be lower case. 682 # For historical reasons, these are all declared in the global scope. 683 SET(LATEX_DVI_VECTOR_IMAGE_EXTENSIONS .eps CACHE INTERNAL "") 684 SET(LATEX_DVI_RASTER_IMAGE_EXTENSIONS CACHE INTERNAL "") 685 SET(LATEX_DVI_IMAGE_EXTENSIONS 686 ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS} 687 ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS} 688 CACHE INTERNAL "" 689 ) 690 691 SET(LATEX_PDF_VECTOR_IMAGE_EXTENSIONS .pdf CACHE INTERNAL "") 692 SET(LATEX_PDF_RASTER_IMAGE_EXTENSIONS .png .jpeg .jpg CACHE INTERNAL "") 693 SET(LATEX_PDF_IMAGE_EXTENSIONS 694 ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS} 695 ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS} 696 CACHE INTERNAL "" 697 ) 698 699 SET(LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS .svg CACHE INTERNAL "") 700 SET(LATEX_OTHER_RASTER_IMAGE_EXTENSIONS .tif .tiff .gif CACHE INTERNAL "") 701 SET(LATEX_OTHER_IMAGE_EXTENSIONS 702 ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS} 703 ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS} 704 CACHE INTERNAL "" 705 ) 706 707 SET(LATEX_VECTOR_IMAGE_EXTENSIONS 708 ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS} 709 ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS} 710 ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS} 711 CACHE INTERNAL "" 712 ) 713 SET(LATEX_RASTER_IMAGE_EXTENSIONS 714 ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS} 715 ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS} 716 ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS} 717 CACHE INTERNAL "" 718 ) 719 SET(LATEX_IMAGE_EXTENSIONS 720 ${LATEX_DVI_IMAGE_EXTENSIONS} 721 ${LATEX_PDF_IMAGE_EXTENSIONS} 722 ${LATEX_OTHER_IMAGE_EXTENSIONS} 723 CACHE INTERNAL "" 724 ) 725ENDFUNCTION(LATEX_SETUP_VARIABLES) 726 727FUNCTION(LATEX_GET_OUTPUT_PATH var) 728 SET(latex_output_path) 729 IF (LATEX_OUTPUT_PATH) 730 GET_FILENAME_COMPONENT( 731 LATEX_OUTPUT_PATH_FULL "${LATEX_OUTPUT_PATH}" ABSOLUTE 732 ) 733 IF ("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 734 MESSAGE(SEND_ERROR "You cannot set LATEX_OUTPUT_PATH to the same directory that contains LaTeX input files.") 735 ELSE ("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 736 SET(latex_output_path "${LATEX_OUTPUT_PATH_FULL}") 737 ENDIF ("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 738 ELSE (LATEX_OUTPUT_PATH) 739 IF ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 740 MESSAGE(SEND_ERROR "LaTeX files must be built out of source or you must set LATEX_OUTPUT_PATH.") 741 ELSE ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 742 SET(latex_output_path "${CMAKE_CURRENT_BINARY_DIR}") 743 ENDIF ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") 744 ENDIF (LATEX_OUTPUT_PATH) 745 SET(${var} ${latex_output_path} PARENT_SCOPE) 746ENDFUNCTION(LATEX_GET_OUTPUT_PATH) 747 748FUNCTION(LATEX_ADD_CONVERT_COMMAND 749 output_path 750 input_path 751 output_extension 752 input_extension 753 flags 754 ) 755 SET (require_imagemagick_convert TRUE) 756 SET (convert_flags "") 757 IF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf") 758 # ImageMagick has broken eps to pdf conversion 759 # use ps2pdf instead 760 IF (PS2PDF_CONVERTER) 761 SET (require_imagemagick_convert FALSE) 762 SET (converter ${PS2PDF_CONVERTER}) 763 SET (convert_flags -dEPSCrop ${PS2PDF_CONVERTER_FLAGS}) 764 ELSE (PS2PDF_CONVERTER) 765 MESSAGE(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.") 766 ENDIF (PS2PDF_CONVERTER) 767 ELSEIF (${input_extension} STREQUAL ".pdf" AND ${output_extension} STREQUAL ".eps") 768 # ImageMagick can also be sketchy on pdf to eps conversion. Not good with 769 # color spaces and tends to unnecessarily rasterize. 770 # use pdftops instead 771 IF (PDFTOPS_CONVERTER) 772 SET (require_imagemagick_convert FALSE) 773 SET(converter ${PDFTOPS_CONVERTER}) 774 SET(convert_flags -eps ${PDFTOPS_CONVERTER_FLAGS}) 775 ELSE (PDFTOPS_CONVERTER) 776 MESSAGE(STATUS "Consider getting pdftops from Poppler to convert PDF images to EPS images.") 777 SET (convert_flags ${flags}) 778 ENDIF (PDFTOPS_CONVERTER) 779 ELSE (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf") 780 SET (convert_flags ${flags}) 781 ENDIF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf") 782 783 IF (require_imagemagick_convert) 784 IF (IMAGEMAGICK_CONVERT) 785 STRING(TOLOWER ${IMAGEMAGICK_CONVERT} IMAGEMAGICK_CONVERT_LOWERCASE) 786 IF (${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe") 787 MESSAGE(SEND_ERROR "IMAGEMAGICK_CONVERT set to Window's convert.exe for changing file systems rather than ImageMagick's convert for changing image formats. Please make sure ImageMagick is installed (available at http://www.imagemagick.org) and its convert program is used for IMAGEMAGICK_CONVERT. (It is helpful if ImageMagick's path is before the Windows system paths.)") 788 ELSE (${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe") 789 SET (converter ${IMAGEMAGICK_CONVERT}) 790 ENDIF (${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe") 791 ELSE (IMAGEMAGICK_CONVERT) 792 MESSAGE(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.") 793 ENDIF (IMAGEMAGICK_CONVERT) 794 ENDIF (require_imagemagick_convert) 795 796 ADD_CUSTOM_COMMAND(OUTPUT ${output_path} 797 COMMAND ${converter} 798 ARGS ${convert_flags} ${input_path} ${output_path} 799 DEPENDS ${input_path} 800 ) 801ENDFUNCTION(LATEX_ADD_CONVERT_COMMAND) 802 803# Makes custom commands to convert a file to a particular type. 804FUNCTION(LATEX_CONVERT_IMAGE 805 output_files_var 806 input_file 807 output_extension 808 convert_flags 809 output_extensions 810 other_files 811 ) 812 SET(output_file_list) 813 SET(input_dir ${CMAKE_CURRENT_SOURCE_DIR}) 814 LATEX_GET_OUTPUT_PATH(output_dir) 815 816 LATEX_GET_FILENAME_COMPONENT(extension "${input_file}" EXT) 817 818 # Check input filename for potential problems with LaTeX. 819 LATEX_GET_FILENAME_COMPONENT(name "${input_file}" NAME_WE) 820 IF (name MATCHES ".*\\..*") 821 STRING(REPLACE "." "-" suggested_name "${name}") 822 SET(suggested_name "${suggested_name}${extension}") 823 MESSAGE(WARNING "Some LaTeX distributions have problems with image file names with multiple extensions. Consider changing ${name}${extension} to something like ${suggested_name}.") 824 ENDIF (name MATCHES ".*\\..*") 825 826 STRING(REGEX REPLACE "\\.[^.]*\$" ${output_extension} output_file 827 "${input_file}") 828 829 LATEX_LIST_CONTAINS(is_type ${extension} ${output_extensions}) 830 IF (is_type) 831 IF (convert_flags) 832 LATEX_ADD_CONVERT_COMMAND(${output_dir}/${output_file} 833 ${input_dir}/${input_file} ${output_extension} ${extension} 834 "${convert_flags}") 835 SET(output_file_list ${output_file_list} ${output_dir}/${output_file}) 836 ELSE (convert_flags) 837 # As a shortcut, we can just copy the file. 838 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${input_file} 839 COMMAND ${CMAKE_COMMAND} 840 ARGS -E copy ${input_dir}/${input_file} ${output_dir}/${input_file} 841 DEPENDS ${input_dir}/${input_file} 842 ) 843 SET(output_file_list ${output_file_list} ${output_dir}/${input_file}) 844 ENDIF (convert_flags) 845 ELSE (is_type) 846 SET(do_convert TRUE) 847 # Check to see if there is another input file of the appropriate type. 848 FOREACH(valid_extension ${output_extensions}) 849 STRING(REGEX REPLACE "\\.[^.]*\$" ${output_extension} try_file 850 "${input_file}") 851 LATEX_LIST_CONTAINS(has_native_file "${try_file}" ${other_files}) 852 IF (has_native_file) 853 SET(do_convert FALSE) 854 ENDIF (has_native_file) 855 ENDFOREACH(valid_extension) 856 857 # If we still need to convert, do it. 858 IF (do_convert) 859 LATEX_ADD_CONVERT_COMMAND(${output_dir}/${output_file} 860 ${input_dir}/${input_file} ${output_extension} ${extension} 861 "${convert_flags}") 862 SET(output_file_list ${output_file_list} ${output_dir}/${output_file}) 863 ENDIF (do_convert) 864 ENDIF (is_type) 865 866 SET(${output_files_var} ${output_file_list} PARENT_SCOPE) 867ENDFUNCTION(LATEX_CONVERT_IMAGE) 868 869# Adds custom commands to process the given files for dvi and pdf builds. 870# Adds the output files to the given variables (does not replace). 871FUNCTION(LATEX_PROCESS_IMAGES dvi_outputs_var pdf_outputs_var) 872 LATEX_GET_OUTPUT_PATH(output_dir) 873 SET(dvi_outputs) 874 SET(pdf_outputs) 875 FOREACH(file ${ARGN}) 876 IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}") 877 LATEX_GET_FILENAME_COMPONENT(extension "${file}" EXT) 878 SET(convert_flags) 879 880 # Check to see if we need to downsample the image. 881 LATEX_LIST_CONTAINS(is_raster "${extension}" 882 ${LATEX_RASTER_IMAGE_EXTENSIONS}) 883 IF (LATEX_SMALL_IMAGES) 884 IF (is_raster) 885 SET(convert_flags -resize ${LATEX_RASTER_SCALE}%) 886 ENDIF (is_raster) 887 ENDIF (LATEX_SMALL_IMAGES) 888 889 # Make sure the output directory exists. 890 LATEX_GET_FILENAME_COMPONENT(path "${output_dir}/${file}" PATH) 891 MAKE_DIRECTORY("${path}") 892 893 # Do conversions for dvi. 894 LATEX_CONVERT_IMAGE(output_files "${file}" .eps "${convert_flags}" 895 "${LATEX_DVI_IMAGE_EXTENSIONS}" "${ARGN}") 896 SET(dvi_outputs ${dvi_outputs} ${output_files}) 897 898 # Do conversions for pdf. 899 IF (is_raster) 900 LATEX_CONVERT_IMAGE(output_files "${file}" .png "${convert_flags}" 901 "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}") 902 SET(pdf_outputs ${pdf_outputs} ${output_files}) 903 ELSE (is_raster) 904 LATEX_CONVERT_IMAGE(output_files "${file}" .pdf "${convert_flags}" 905 "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}") 906 SET(pdf_outputs ${pdf_outputs} ${output_files}) 907 ENDIF (is_raster) 908 ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}") 909 MESSAGE(WARNING "Could not find file ${CMAKE_CURRENT_SOURCE_DIR}/${file}. Are you sure you gave relative paths to IMAGES?") 910 ENDIF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}") 911 ENDFOREACH(file) 912 913 SET(${dvi_outputs_var} ${dvi_outputs} PARENT_SCOPE) 914 SET(${pdf_outputs_var} ${pdf_outputs} PARENT_SCOPE) 915ENDFUNCTION(LATEX_PROCESS_IMAGES) 916 917FUNCTION(ADD_LATEX_IMAGES) 918 MESSAGE(SEND_ERROR "The ADD_LATEX_IMAGES function is deprecated. Image directories are specified with LATEX_ADD_DOCUMENT.") 919ENDFUNCTION(ADD_LATEX_IMAGES) 920 921FUNCTION(LATEX_COPY_GLOBBED_FILES pattern dest) 922 FILE(GLOB file_list ${pattern}) 923 FOREACH(in_file ${file_list}) 924 LATEX_GET_FILENAME_COMPONENT(out_file ${in_file} NAME) 925 CONFIGURE_FILE(${in_file} ${dest}/${out_file} COPYONLY) 926 ENDFOREACH(in_file) 927ENDFUNCTION(LATEX_COPY_GLOBBED_FILES) 928 929FUNCTION(LATEX_COPY_INPUT_FILE file) 930 LATEX_GET_OUTPUT_PATH(output_dir) 931 932 IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}) 933 LATEX_GET_FILENAME_COMPONENT(path ${file} PATH) 934 FILE(MAKE_DIRECTORY ${output_dir}/${path}) 935 936 LATEX_LIST_CONTAINS(use_config ${file} ${LATEX_CONFIGURE}) 937 IF (use_config) 938 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file} 939 ${output_dir}/${file} 940 @ONLY 941 ) 942 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${file} 943 COMMAND ${CMAKE_COMMAND} 944 ARGS ${CMAKE_BINARY_DIR} 945 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file} 946 ) 947 ELSE (use_config) 948 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${file} 949 COMMAND ${CMAKE_COMMAND} 950 ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file} 951 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file} 952 ) 953 ENDIF (use_config) 954 ELSE (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}) 955 IF (EXISTS ${output_dir}/${file}) 956 # Special case: output exists but input does not. Assume that it was 957 # created elsewhere and skip the input file copy. 958 ELSE (EXISTS ${output_dir}/${file}) 959 MESSAGE("Could not find input file ${CMAKE_CURRENT_SOURCE_DIR}/${file}") 960 ENDIF (EXISTS ${output_dir}/${file}) 961 ENDIF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}) 962ENDFUNCTION(LATEX_COPY_INPUT_FILE) 963 964############################################################################# 965# Commands provided by the UseLATEX.cmake "package" 966############################################################################# 967 968FUNCTION(LATEX_USAGE command message) 969 MESSAGE(SEND_ERROR 970 "${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 [MULTIBIB_NEWCITES] <suffix_list>\n [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n [DEFAULT_PDF] [DEFAULT_SAFEPDF] [DEFAULT_PS] [NO_DEFAULT]\n [MANGLE_TARGET_NAMES])" 971 ) 972ENDFUNCTION(LATEX_USAGE command message) 973 974# Parses arguments to ADD_LATEX_DOCUMENT and ADD_LATEX_TARGETS and sets the 975# variables LATEX_TARGET, LATEX_IMAGE_DIR, LATEX_BIBFILES, LATEX_DEPENDS, and 976# LATEX_INPUTS. 977FUNCTION(PARSE_ADD_LATEX_ARGUMENTS command) 978 LATEX_PARSE_ARGUMENTS( 979 LATEX 980 "BIBFILES;MULTIBIB_NEWCITES;INPUTS;IMAGE_DIRS;IMAGES;CONFIGURE;DEPENDS" 981 "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;USE_NOMENCL;DEFAULT_PDF;DEFAULT_SAFEPDF;DEFAULT_PS;NO_DEFAULT;MANGLE_TARGET_NAMES" 982 ${ARGN} 983 ) 984 985 # The first argument is the target latex file. 986 IF (LATEX_DEFAULT_ARGS) 987 LIST(GET LATEX_DEFAULT_ARGS 0 latex_main_input) 988 LIST(REMOVE_AT LATEX_DEFAULT_ARGS 0) 989 LATEX_GET_FILENAME_COMPONENT(latex_target ${latex_main_input} NAME_WE) 990 SET(LATEX_MAIN_INPUT ${latex_main_input} CACHE INTERNAL "" FORCE) 991 SET(LATEX_TARGET ${latex_target} CACHE INTERNAL "" FORCE) 992 ELSE (LATEX_DEFAULT_ARGS) 993 LATEX_USAGE(${command} "No tex file target given to ${command}.") 994 ENDIF (LATEX_DEFAULT_ARGS) 995 996 IF (LATEX_DEFAULT_ARGS) 997 LATEX_USAGE(${command} "Invalid or depricated arguments: ${LATEX_DEFAULT_ARGS}") 998 ENDIF (LATEX_DEFAULT_ARGS) 999 1000 # Backward compatibility between 1.6.0 and 1.6.1. 1001 IF (LATEX_USE_GLOSSARIES) 1002 SET(LATEX_USE_GLOSSARY TRUE CACHE INTERNAL "" FORCE) 1003 ENDIF (LATEX_USE_GLOSSARIES) 1004ENDFUNCTION(PARSE_ADD_LATEX_ARGUMENTS) 1005 1006FUNCTION(ADD_LATEX_TARGETS_INTERNAL) 1007 IF (LATEX_USE_SYNCTEX) 1008 SET(synctex_flags ${LATEX_SYNCTEX_FLAGS}) 1009 ELSE (LATEX_USE_SYNCTEX) 1010 SET(synctex_flags) 1011 ENDIF (LATEX_USE_SYNCTEX) 1012 1013 # The commands to run LaTeX. They are repeated multiple times. 1014 SET(latex_build_command 1015 ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT} 1016 ) 1017 SET(pdflatex_build_command 1018 ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${synctex_flags} ${LATEX_MAIN_INPUT} 1019 ) 1020 1021 # Set up target names. 1022 IF (LATEX_MANGLE_TARGET_NAMES) 1023 SET(dvi_target ${LATEX_TARGET}_dvi) 1024 SET(pdf_target ${LATEX_TARGET}_pdf) 1025 SET(ps_target ${LATEX_TARGET}_ps) 1026 SET(safepdf_target ${LATEX_TARGET}_safepdf) 1027 SET(html_target ${LATEX_TARGET}_html) 1028 SET(auxclean_target ${LATEX_TARGET}_auxclean) 1029 ELSE (LATEX_MANGLE_TARGET_NAMES) 1030 SET(dvi_target dvi) 1031 SET(pdf_target pdf) 1032 SET(ps_target ps) 1033 SET(safepdf_target safepdf) 1034 SET(html_target html) 1035 SET(auxclean_target auxclean) 1036 ENDIF (LATEX_MANGLE_TARGET_NAMES) 1037 1038 # Probably not all of these will be generated, but they could be. 1039 # Note that the aux file is added later. 1040 SET(auxiliary_clean_files 1041 ${output_dir}/${LATEX_TARGET}.aux 1042 ${output_dir}/${LATEX_TARGET}.bbl 1043 ${output_dir}/${LATEX_TARGET}.blg 1044 ${output_dir}/${LATEX_TARGET}-blx.bib 1045 ${output_dir}/${LATEX_TARGET}.glg 1046 ${output_dir}/${LATEX_TARGET}.glo 1047 ${output_dir}/${LATEX_TARGET}.gls 1048 ${output_dir}/${LATEX_TARGET}.idx 1049 ${output_dir}/${LATEX_TARGET}.ilg 1050 ${output_dir}/${LATEX_TARGET}.ind 1051 ${output_dir}/${LATEX_TARGET}.ist 1052 ${output_dir}/${LATEX_TARGET}.log 1053 ${output_dir}/${LATEX_TARGET}.out 1054 ${output_dir}/${LATEX_TARGET}.toc 1055 ${output_dir}/${LATEX_TARGET}.lof 1056 ${output_dir}/${LATEX_TARGET}.xdy 1057 ${output_dir}/${LATEX_TARGET}.synctex.gz 1058 ${output_dir}/${LATEX_TARGET}.synctex.bak.gz 1059 ${output_dir}/${LATEX_TARGET}.dvi 1060 ${output_dir}/${LATEX_TARGET}.ps 1061 ${output_dir}/${LATEX_TARGET}.pdf 1062 ) 1063 1064 SET(image_list ${LATEX_IMAGES}) 1065 1066 # For each directory in LATEX_IMAGE_DIRS, glob all the image files and 1067 # place them in LATEX_IMAGES. 1068 FOREACH(dir ${LATEX_IMAGE_DIRS}) 1069 IF (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}) 1070 MESSAGE(WARNING "Image directory ${CMAKE_CURRENT_SOURCE_DIR}/${dir} does not exist. Are you sure you gave relative directories to IMAGE_DIRS?") 1071 ENDIF (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}) 1072 FOREACH(extension ${LATEX_IMAGE_EXTENSIONS}) 1073 FILE(GLOB files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*${extension}) 1074 FOREACH(file ${files}) 1075 LATEX_GET_FILENAME_COMPONENT(filename ${file} NAME) 1076 SET(image_list ${image_list} ${dir}/${filename}) 1077 ENDFOREACH(file) 1078 ENDFOREACH(extension) 1079 ENDFOREACH(dir) 1080 1081 LATEX_PROCESS_IMAGES(dvi_images pdf_images ${image_list}) 1082 1083 SET(make_dvi_command 1084 ${CMAKE_COMMAND} -E chdir ${output_dir} 1085 ${latex_build_command}) 1086 SET(make_pdf_command 1087 ${CMAKE_COMMAND} -E chdir ${output_dir} 1088 ${pdflatex_build_command} 1089 ) 1090 1091 SET(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images}) 1092 SET(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images}) 1093 FOREACH(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS}) 1094 SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${input}) 1095 SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${input}) 1096 IF (${input} MATCHES "\\.tex$") 1097 # Dependent .tex files might have their own .aux files created. Make 1098 # sure these get cleaned as well. This might replicate the cleaning 1099 # of the main .aux file, which is OK. 1100 STRING(REGEX REPLACE "\\.tex$" "" input_we ${input}) 1101 SET(auxiliary_clean_files ${auxiliary_clean_files} 1102 ${output_dir}/${input_we}.aux 1103 ${output_dir}/${input}.aux 1104 ) 1105 ENDIF (${input} MATCHES "\\.tex$") 1106 ENDFOREACH(input) 1107 1108 IF (LATEX_USE_GLOSSARY) 1109 FOREACH(dummy 0 1) # Repeat these commands twice. 1110 SET(make_dvi_command ${make_dvi_command} 1111 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1112 ${CMAKE_COMMAND} 1113 -D LATEX_BUILD_COMMAND=makeglossaries 1114 -D LATEX_TARGET=${LATEX_TARGET} 1115 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} 1116 -D XINDY_COMPILER=${XINDY_COMPILER} 1117 -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS} 1118 -P ${LATEX_USE_LATEX_LOCATION} 1119 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1120 ${latex_build_command} 1121 ) 1122 SET(make_pdf_command ${make_pdf_command} 1123 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1124 ${CMAKE_COMMAND} 1125 -D LATEX_BUILD_COMMAND=makeglossaries 1126 -D LATEX_TARGET=${LATEX_TARGET} 1127 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} 1128 -D XINDY_COMPILER=${XINDY_COMPILER} 1129 -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS} 1130 -P ${LATEX_USE_LATEX_LOCATION} 1131 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1132 ${pdflatex_build_command} 1133 ) 1134 ENDFOREACH(dummy) 1135 ENDIF (LATEX_USE_GLOSSARY) 1136 1137 IF (LATEX_USE_NOMENCL) 1138 FOREACH(dummy 0 1) # Repeat these commands twice. 1139 SET(make_dvi_command ${make_dvi_command} 1140 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1141 ${CMAKE_COMMAND} 1142 -D LATEX_BUILD_COMMAND=makenomenclature 1143 -D LATEX_TARGET=${LATEX_TARGET} 1144 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} 1145 -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS} 1146 -P ${LATEX_USE_LATEX_LOCATION} 1147 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1148 ${latex_build_command} 1149 ) 1150 SET(make_pdf_command ${make_pdf_command} 1151 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1152 ${CMAKE_COMMAND} 1153 -D LATEX_BUILD_COMMAND=makenomenclature 1154 -D LATEX_TARGET=${LATEX_TARGET} 1155 -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} 1156 -D MAKENOMENCLATURE_COMPILER_FLAGS=${MAKENOMENCLATURE_COMPILER_FLAGS} 1157 -P ${LATEX_USE_LATEX_LOCATION} 1158 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1159 ${pdflatex_build_command} 1160 ) 1161 ENDFOREACH(dummy) 1162 ENDIF (LATEX_USE_NOMENCL) 1163 1164 IF (LATEX_BIBFILES) 1165 IF (LATEX_MULTIBIB_NEWCITES) 1166 FOREACH (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES}) 1167 LATEX_GET_FILENAME_COMPONENT(multibib_target ${multibib_auxfile} NAME_WE) 1168 SET(make_dvi_command ${make_dvi_command} 1169 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1170 ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${multibib_target}) 1171 SET(make_pdf_command ${make_pdf_command} 1172 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1173 ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${multibib_target}) 1174 SET(auxiliary_clean_files ${auxiliary_clean_files} 1175 ${output_dir}/${multibib_target}.aux) 1176 ENDFOREACH (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES}) 1177 ELSE (LATEX_MULTIBIB_NEWCITES) 1178 SET(make_dvi_command ${make_dvi_command} 1179 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1180 ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${LATEX_TARGET}) 1181 SET(make_pdf_command ${make_pdf_command} 1182 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1183 ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${LATEX_TARGET}) 1184 ENDIF (LATEX_MULTIBIB_NEWCITES) 1185 1186 FOREACH (bibfile ${LATEX_BIBFILES}) 1187 SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${bibfile}) 1188 SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${bibfile}) 1189 ENDFOREACH (bibfile ${LATEX_BIBFILES}) 1190 ELSE (LATEX_BIBFILES) 1191 IF (LATEX_MULTIBIB_NEWCITES) 1192 MESSAGE(WARNING "MULTIBIB_NEWCITES has no effect without BIBFILES option.") 1193 ENDIF (LATEX_MULTIBIB_NEWCITES) 1194 ENDIF (LATEX_BIBFILES) 1195 1196 IF (LATEX_USE_INDEX) 1197 SET(make_dvi_command ${make_dvi_command} 1198 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1199 ${latex_build_command} 1200 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1201 ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx) 1202 SET(make_pdf_command ${make_pdf_command} 1203 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1204 ${pdflatex_build_command} 1205 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1206 ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx) 1207 ENDIF (LATEX_USE_INDEX) 1208 1209 SET(make_dvi_command ${make_dvi_command} 1210 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1211 ${latex_build_command} 1212 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1213 ${latex_build_command}) 1214 SET(make_pdf_command ${make_pdf_command} 1215 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1216 ${pdflatex_build_command} 1217 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1218 ${pdflatex_build_command}) 1219 1220 IF (LATEX_USE_SYNCTEX) 1221 IF (NOT GZIP) 1222 MESSAGE(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program. Set GZIP variable.") 1223 ENDIF (NOT GZIP) 1224 SET(make_dvi_command ${make_dvi_command} 1225 COMMAND ${CMAKE_COMMAND} 1226 -D LATEX_BUILD_COMMAND=correct_synctex 1227 -D LATEX_TARGET=${LATEX_TARGET} 1228 -D GZIP=${GZIP} 1229 -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" 1230 -D "LATEX_BINARY_DIRECTORY=${output_dir}" 1231 -P ${LATEX_USE_LATEX_LOCATION} 1232 ) 1233 SET(make_pdf_command ${make_pdf_command} 1234 COMMAND ${CMAKE_COMMAND} 1235 -D LATEX_BUILD_COMMAND=correct_synctex 1236 -D LATEX_TARGET=${LATEX_TARGET} 1237 -D GZIP=${GZIP} 1238 -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" 1239 -D "LATEX_BINARY_DIRECTORY=${output_dir}" 1240 -P ${LATEX_USE_LATEX_LOCATION} 1241 ) 1242 ENDIF (LATEX_USE_SYNCTEX) 1243 1244 # Add commands and targets for building dvi outputs. 1245 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi 1246 COMMAND ${make_dvi_command} 1247 DEPENDS ${make_dvi_depends} 1248 ) 1249 IF (LATEX_NO_DEFAULT OR LATEX_DEFAULT_PDF OR LATEX_DEFAULT_SAFEPDF OR DEFAULT_PS) 1250 ADD_CUSTOM_TARGET(${dvi_target} 1251 DEPENDS ${output_dir}/${LATEX_TARGET}.dvi) 1252 ELSE (LATEX_NO_DEFAULT OR LATEX_DEFAULT_PDF OR LATEX_DEFAULT_SAFEPDF OR DEFAULT_PS) 1253 ADD_CUSTOM_TARGET(${dvi_target} ALL 1254 DEPENDS ${output_dir}/${LATEX_TARGET}.dvi) 1255 ENDIF (LATEX_NO_DEFAULT OR LATEX_DEFAULT_PDF OR LATEX_DEFAULT_SAFEPDF OR DEFAULT_PS) 1256 1257 # Add commands and targets for building pdf outputs (with pdflatex). 1258 IF (PDFLATEX_COMPILER) 1259 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.pdf 1260 COMMAND ${make_pdf_command} 1261 DEPENDS ${make_pdf_depends} 1262 ) 1263 IF (LATEX_DEFAULT_PDF) 1264 ADD_CUSTOM_TARGET(${pdf_target} ALL 1265 DEPENDS ${output_dir}/${LATEX_TARGET}.pdf) 1266 ELSE (LATEX_DEFAULT_PDF) 1267 ADD_CUSTOM_TARGET(${pdf_target} 1268 DEPENDS ${output_dir}/${LATEX_TARGET}.pdf) 1269 ENDIF (LATEX_DEFAULT_PDF) 1270 ENDIF (PDFLATEX_COMPILER) 1271 1272 IF (DVIPS_CONVERTER) 1273 ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.ps 1274 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1275 ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_FLAGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi 1276 DEPENDS ${output_dir}/${LATEX_TARGET}.dvi) 1277 IF (LATEX_DEFAULT_PS) 1278 ADD_CUSTOM_TARGET(${ps_target} ALL 1279 DEPENDS ${output_dir}/${LATEX_TARGET}.ps) 1280 ELSE (LATEX_DEFAULT_PS) 1281 ADD_CUSTOM_TARGET(${ps_target} 1282 DEPENDS ${output_dir}/${LATEX_TARGET}.ps) 1283 ENDIF (LATEX_DEFAULT_PS) 1284 IF (PS2PDF_CONVERTER) 1285 # Since both the pdf and safepdf targets have the same output, we 1286 # cannot properly do the dependencies for both. When selecting safepdf, 1287 # simply force a recompile every time. 1288 IF (LATEX_DEFAULT_SAFEPDF) 1289 ADD_CUSTOM_TARGET(${safepdf_target} ALL 1290 ${CMAKE_COMMAND} -E chdir ${output_dir} 1291 ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_FLAGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf 1292 ) 1293 ELSE (LATEX_DEFAULT_SAFEPDF) 1294 ADD_CUSTOM_TARGET(${safepdf_target} 1295 ${CMAKE_COMMAND} -E chdir ${output_dir} 1296 ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_FLAGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf 1297 ) 1298 ENDIF (LATEX_DEFAULT_SAFEPDF) 1299 ADD_DEPENDENCIES(${safepdf_target} ${ps_target}) 1300 ENDIF (PS2PDF_CONVERTER) 1301 ENDIF (DVIPS_CONVERTER) 1302 1303 IF (LATEX2HTML_CONVERTER) 1304 IF (USING_HTLATEX) 1305 # htlatex places the output in a different location 1306 SET (HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html") 1307 ELSE (USING_HTLATEX) 1308 SET (HTML_OUTPUT "${output_dir}/${LATEX_TARGET}/${LATEX_TARGET}.html") 1309 ENDIF (USING_HTLATEX) 1310 ADD_CUSTOM_COMMAND(OUTPUT ${HTML_OUTPUT} 1311 COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} 1312 ${LATEX2HTML_CONVERTER} ${LATEX2HTML_CONVERTER_FLAGS} ${LATEX_MAIN_INPUT} 1313 DEPENDS ${output_dir}/${LATEX_TARGET}.tex 1314 ) 1315 ADD_CUSTOM_TARGET(${html_target} 1316 DEPENDS ${HTML_OUTPUT} 1317 ) 1318 ADD_DEPENDENCIES(${html_target} ${dvi_target}) 1319 ENDIF (LATEX2HTML_CONVERTER) 1320 1321 SET_DIRECTORY_PROPERTIES(. 1322 ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}" 1323 ) 1324 1325 ADD_CUSTOM_TARGET(${auxclean_target} 1326 COMMENT "Cleaning auxiliary LaTeX files." 1327 COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files} 1328 ) 1329ENDFUNCTION(ADD_LATEX_TARGETS_INTERNAL) 1330 1331FUNCTION(ADD_LATEX_TARGETS) 1332 LATEX_GET_OUTPUT_PATH(output_dir) 1333 PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_TARGETS ${ARGV}) 1334 1335 ADD_LATEX_TARGETS_INTERNAL() 1336ENDFUNCTION(ADD_LATEX_TARGETS) 1337 1338FUNCTION(ADD_LATEX_DOCUMENT) 1339 LATEX_GET_OUTPUT_PATH(output_dir) 1340 IF (output_dir) 1341 PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_DOCUMENT ${ARGV}) 1342 1343 LATEX_COPY_INPUT_FILE(${LATEX_MAIN_INPUT}) 1344 1345 FOREACH (bib_file ${LATEX_BIBFILES}) 1346 LATEX_COPY_INPUT_FILE(${bib_file}) 1347 ENDFOREACH (bib_file) 1348 1349 FOREACH (input ${LATEX_INPUTS}) 1350 LATEX_COPY_INPUT_FILE(${input}) 1351 ENDFOREACH(input) 1352 1353 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.cls ${output_dir}) 1354 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir}) 1355 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir}) 1356 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir}) 1357 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir}) 1358 LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.fd ${output_dir}) 1359 1360 ADD_LATEX_TARGETS_INTERNAL() 1361 ENDIF (output_dir) 1362ENDFUNCTION(ADD_LATEX_DOCUMENT) 1363 1364############################################################################# 1365# Actually do stuff 1366############################################################################# 1367 1368IF (LATEX_BUILD_COMMAND) 1369 SET(command_handled) 1370 1371 IF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries) 1372 LATEX_MAKEGLOSSARIES() 1373 SET(command_handled TRUE) 1374 ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries) 1375 1376 IF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature) 1377 LATEX_MAKENOMENCLATURE() 1378 SET(command_handled TRUE) 1379 ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature) 1380 1381 IF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex) 1382 LATEX_CORRECT_SYNCTEX() 1383 SET(command_handled TRUE) 1384 ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex) 1385 1386 IF (NOT command_handled) 1387 MESSAGE(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}") 1388 ENDIF (NOT command_handled) 1389 1390ELSE (LATEX_BUILD_COMMAND) 1391 # Must be part of the actual configure (included from CMakeLists.txt). 1392 LATEX_SETUP_VARIABLES() 1393ENDIF (LATEX_BUILD_COMMAND) 1394