123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968 |
- if(__USE_LATEX_INCLUDED)
- return()
- endif()
- set(__USE_LATEX_INCLUDED TRUE)
- set(LATEX_USE_LATEX_LOCATION ${CMAKE_CURRENT_LIST_FILE}
- CACHE INTERNAL "Location of UseLATEX.cmake file." FORCE
- )
- include(CMakeParseArguments)
- function(latex_list_contains var value)
- set(input_list ${ARGN})
- list(FIND input_list "${value}" index)
- if(index GREATER -1)
- set(${var} TRUE PARENT_SCOPE)
- else()
- set(${var} PARENT_SCOPE)
- endif()
- endfunction(latex_list_contains)
- function(latex_file_match variable filename regexp default)
-
-
- file(READ ${filename} file_contents)
- string(REGEX MATCHALL "${regexp}"
- match_result ${file_contents}
- )
- if(match_result)
- set(${variable} "${match_result}" PARENT_SCOPE)
- else()
- set(${variable} "${default}" PARENT_SCOPE)
- endif()
- endfunction(latex_file_match)
- function(latex_get_filename_component varname filename type)
- set(result)
- if("${type}" STREQUAL "NAME_WE")
- get_filename_component(name ${filename} NAME)
- string(REGEX REPLACE "\\.[^.]*\$" "" result "${name}")
- elseif("${type}" STREQUAL "EXT")
- get_filename_component(name ${filename} NAME)
- string(REGEX MATCH "\\.[^.]*\$" result "${name}")
- else()
- get_filename_component(result ${filename} ${type})
- endif()
- set(${varname} "${result}" PARENT_SCOPE)
- endfunction(latex_get_filename_component)
- function(latex_execute_latex)
- if(NOT LATEX_TARGET)
- message(SEND_ERROR "Need to define LATEX_TARGET")
- endif()
- if(NOT LATEX_WORKING_DIRECTORY)
- message(SEND_ERROR "Need to define LATEX_WORKING_DIRECTORY")
- endif()
- if(NOT LATEX_FULL_COMMAND)
- message(SEND_ERROR "Need to define LATEX_FULL_COMMAND")
- endif()
- if(NOT LATEX_OUTPUT_FILE)
- message(SEND_ERROR "Need to define LATEX_OUTPUT_FILE")
- endif()
- set(full_command_original "${LATEX_FULL_COMMAND}")
-
-
- if (CMAKE_VERSION VERSION_GREATER 3.8)
- set(separate_arguments_mode NATIVE_COMMAND)
- else()
- if (WIN32)
- set(separate_arguments_mode WINDOWS_COMMAND)
- else()
- set(separate_arguments_mode UNIX_COMMAND)
- endif()
- endif()
-
-
-
-
- separate_arguments(LATEX_FULL_COMMAND UNIX_COMMAND "${LATEX_FULL_COMMAND}")
- separate_arguments(LATEX_WORKING_DIRECTORY_SEP UNIX_COMMAND "${LATEX_WORKING_DIRECTORY}")
- execute_process(
- COMMAND ${LATEX_FULL_COMMAND}
- WORKING_DIRECTORY "${LATEX_WORKING_DIRECTORY_SEP}"
- RESULT_VARIABLE execute_result
- )
- if(NOT ${execute_result} EQUAL 0)
-
-
- file(REMOVE "${LATEX_WORKING_DIRECTORY}/${LATEX_OUTPUT_FILE}")
- message("\n\nLaTeX command failed")
- message("${full_command_original}")
- message("Log output:")
- file(READ "${LATEX_WORKING_DIRECTORY}/${LATEX_TARGET}.log" log_output)
- message("${log_output}")
- message(FATAL_ERROR
- "Successfully executed LaTeX, but LaTeX returned an error.")
- endif()
- endfunction(latex_execute_latex)
- function(latex_makeglossaries)
-
-
- message("**************************** In makeglossaries")
- if(NOT LATEX_TARGET)
- message(SEND_ERROR "Need to define LATEX_TARGET")
- endif()
- set(aux_file ${LATEX_TARGET}.aux)
- if(NOT EXISTS ${aux_file})
- message(SEND_ERROR "${aux_file} does not exist. Run latex on your target file.")
- endif()
- latex_file_match(newglossary_lines ${aux_file}
- "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
- "@newglossary{main}{glg}{gls}{glo}"
- )
- latex_file_match(istfile_line ${aux_file}
- "@istfilename[ \t]*{([^}]*)}"
- "@istfilename{${LATEX_TARGET}.ist}"
- )
- string(REGEX REPLACE "@istfilename[ \t]*{([^}]*)}" "\\1"
- istfile ${istfile_line}
- )
- string(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}")
- if(use_xindy)
- message("*************** Using xindy")
- if(NOT XINDY_COMPILER)
- message(SEND_ERROR "Need to define XINDY_COMPILER")
- endif()
- else()
- message("*************** Using makeindex")
- if(NOT MAKEINDEX_COMPILER)
- message(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
- endif()
- endif()
- foreach(newglossary ${newglossary_lines})
- string(REGEX REPLACE
- "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
- "\\1" glossary_name ${newglossary}
- )
- string(REGEX REPLACE
- "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
- "${LATEX_TARGET}.\\2" glossary_log ${newglossary}
- )
- string(REGEX REPLACE
- "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
- "${LATEX_TARGET}.\\3" glossary_out ${newglossary}
- )
- string(REGEX REPLACE
- "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
- "${LATEX_TARGET}.\\4" glossary_in ${newglossary}
- )
- if(use_xindy)
- latex_file_match(xdylanguage_line ${aux_file}
- "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
- "@xdylanguage{${glossary_name}}{english}"
- )
- string(REGEX REPLACE
- "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}"
- "\\1"
- language
- ${xdylanguage_line}
- )
-
-
-
- if(${language} STREQUAL "frenchb")
- set(language "french")
- elseif(${language} MATCHES "^n?germanb?$")
- set(language "german")
- elseif(${language} STREQUAL "magyar")
- set(language "hungarian")
- elseif(${language} STREQUAL "lsorbian")
- set(language "lower-sorbian")
- elseif(${language} STREQUAL "norsk")
- set(language "norwegian")
- elseif(${language} STREQUAL "portuges")
- set(language "portuguese")
- elseif(${language} STREQUAL "russianb")
- set(language "russian")
- elseif(${language} STREQUAL "slovene")
- set(language "slovenian")
- elseif(${language} STREQUAL "ukraineb")
- set(language "ukrainian")
- elseif(${language} STREQUAL "usorbian")
- set(language "upper-sorbian")
- endif()
- if(language)
- set(language_flags "-L ${language}")
- else()
- set(language_flags "")
- endif()
- latex_file_match(codepage_line ${aux_file}
- "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
- "@gls@codepage{${glossary_name}}{utf}"
- )
- string(REGEX REPLACE
- "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}"
- "\\1"
- codepage
- ${codepage_line}
- )
- if(codepage)
- set(codepage_flags "-C ${codepage}")
- else()
-
-
-
- set(codepage_flags "")
- endif()
- message("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}"
- )
- exec_program(${XINDY_COMPILER}
- ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
- ${language_flags}
- ${codepage_flags}
- -I xindy
- -M ${glossary_name}
- -t ${glossary_log}
- -o ${glossary_out}
- ${glossary_in}
- OUTPUT_VARIABLE xindy_output
- )
- message("${xindy_output}")
-
-
-
-
- if("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$")
- message("*************** Retrying xindy with default codepage.")
- exec_program(${XINDY_COMPILER}
- ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
- ${language_flags}
- -I xindy
- -M ${glossary_name}
- -t ${glossary_log}
- -o ${glossary_out}
- ${glossary_in}
- )
- endif()
- else()
- message("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
- exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS}
- -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
- )
- endif()
- endforeach(newglossary)
- endfunction(latex_makeglossaries)
- function(latex_makenomenclature)
- message("**************************** In makenomenclature")
- if(NOT LATEX_TARGET)
- message(SEND_ERROR "Need to define LATEX_TARGET")
- endif()
- if(NOT MAKEINDEX_COMPILER)
- message(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
- endif()
- set(nomencl_out ${LATEX_TARGET}.nls)
- set(nomencl_in ${LATEX_TARGET}.nlo)
- exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_ARGS}
- ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out}
- )
- endfunction(latex_makenomenclature)
- function(latex_correct_synctex)
- message("**************************** In correct SyncTeX")
- if(NOT LATEX_TARGET)
- message(SEND_ERROR "Need to define LATEX_TARGET")
- endif()
- if(NOT GZIP)
- message(SEND_ERROR "Need to define GZIP")
- endif()
- if(NOT LATEX_SOURCE_DIRECTORY)
- message(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY")
- endif()
- if(NOT LATEX_BINARY_DIRECTORY)
- message(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY")
- endif()
- message("${LATEX_BINARY_DIRECTORY}")
- message("${LATEX_SOURCE_DIRECTORY}")
- set(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex)
- set(synctex_file_gz ${synctex_file}.gz)
- if(EXISTS ${synctex_file_gz})
- message("Making backup of synctex file.")
- configure_file(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY)
- message("Uncompressing synctex file.")
- exec_program(${GZIP}
- ARGS --decompress ${synctex_file_gz}
- )
- message("Reading synctex file.")
- file(READ ${synctex_file} synctex_data)
- message("Replacing output paths with input paths.")
- foreach(extension tex cls bst clo sty ist fd)
-
- string(REGEX REPLACE
- "(Input:[0-9]+:)([^/\n][^\n]\\.${extension}*)"
- "\\1${LATEX_SOURCE_DIRECTORY}/\\2"
- synctex_data
- "${synctex_data}"
- )
-
- string(REGEX REPLACE
- "(Input:[0-9]+:)${LATEX_BINARY_DIRECTORY}([^\n]*\\.${extension})"
- "\\1${LATEX_SOURCE_DIRECTORY}\\2"
- synctex_data
- "${synctex_data}"
- )
- endforeach(extension)
- message("Writing synctex file.")
- file(WRITE ${synctex_file} "${synctex_data}")
- message("Compressing synctex file.")
- exec_program(${GZIP}
- ARGS ${synctex_file}
- )
- else()
- message(SEND_ERROR "File ${synctex_file_gz} not found. Perhaps synctex is not supported by your LaTeX compiler.")
- endif()
- endfunction(latex_correct_synctex)
- function(latex_check_important_warnings)
- set(log_file ${LATEX_TARGET}.log)
- message("\nChecking ${log_file} for important warnings.")
- if(NOT LATEX_TARGET)
- message(SEND_ERROR "Need to define LATEX_TARGET")
- endif()
- if(NOT EXISTS ${log_file})
- message("Could not find log file: ${log_file}")
- return()
- endif()
- set(found_error)
- file(READ ${log_file} log)
-
- string(REGEX MATCHALL
- "\n[^\n]*Reference[^\n]*undefined[^\n]*"
- reference_warnings
- "${log}")
- if(reference_warnings)
- set(found_error TRUE)
- message("\nFound missing reference warnings.")
- foreach(warning ${reference_warnings})
- string(STRIP "${warning}" warning_no_newline)
- message("${warning_no_newline}")
- endforeach(warning)
- endif()
-
- string(REGEX MATCHALL
- "\nPackage natbib Warning:[^\n]*"
- natbib_warnings
- "${log}")
- if(natbib_warnings)
- set(found_error TRUE)
- message("\nFound natbib package warnings.")
- foreach(warning ${natbib_warnings})
- string(STRIP "${warning}" warning_no_newline)
- message("${warning_no_newline}")
- endforeach(warning)
- endif()
-
- string(REGEX MATCHALL
- "\nOverfull[^\n]*"
- overfull_warnings
- "${log}")
- if(overfull_warnings)
- set(found_error TRUE)
- message("\nFound overfull warnings. These are indicative of layout errors.")
- foreach(warning ${overfull_warnings})
- string(STRIP "${warning}" warning_no_newline)
- message("${warning_no_newline}")
- endforeach(warning)
- endif()
-
- string(REGEX MATCHALL
- "\nMissing character:[^\n]*"
- invalid_character_warnings
- "${log}")
- if(invalid_character_warnings)
- set(found_error TRUE)
- message("\nFound invalid character warnings. These characters are likely not printed correctly.")
- foreach(warning ${invalid_character_warnings})
- string(STRIP "${warning}" warning_no_newline)
- message("${warning_no_newline}")
- endforeach(warning)
- endif()
- if(found_error)
- latex_get_filename_component(log_file_path ${log_file} ABSOLUTE)
- message("\nConsult ${log_file_path} for more information on LaTeX build.")
- else()
- message("No known important warnings found.")
- endif(found_error)
- endfunction(latex_check_important_warnings)
- function(latex_needit VAR NAME)
- if(NOT ${VAR})
- message(SEND_ERROR "I need the ${NAME} command.")
- endif()
- endfunction(latex_needit)
- function(latex_wantit VAR NAME)
- if(NOT ${VAR})
- message(STATUS "I could not find the ${NAME} command.")
- endif()
- endfunction(latex_wantit)
- function(latex_setup_variables)
- set(LATEX_OUTPUT_PATH "${LATEX_OUTPUT_PATH}"
- CACHE PATH "If non empty, specifies the location to place LaTeX output."
- )
- find_package(LATEX)
- find_program(XINDY_COMPILER
- NAME xindy
- PATHS ${MIKTEX_BINARY_PATH} /usr/bin
- )
- find_package(UnixCommands)
- find_program(PDFTOPS_CONVERTER
- NAMES pdftops
- DOC "The pdf to ps converter program from the Poppler package."
- )
- find_program(HTLATEX_COMPILER
- NAMES htlatex
- PATHS ${MIKTEX_BINARY_PATH}
- /usr/bin
- )
- mark_as_advanced(
- LATEX_COMPILER
- PDFLATEX_COMPILER
- BIBTEX_COMPILER
- BIBER_COMPILER
- MAKEINDEX_COMPILER
- XINDY_COMPILER
- DVIPS_CONVERTER
- PS2PDF_CONVERTER
- PDFTOPS_CONVERTER
- LATEX2HTML_CONVERTER
- HTLATEX_COMPILER
- )
- latex_needit(LATEX_COMPILER latex)
- latex_wantit(PDFLATEX_COMPILER pdflatex)
- latex_wantit(HTLATEX_COMPILER htlatex)
- latex_needit(BIBTEX_COMPILER bibtex)
- latex_wantit(BIBER_COMPILER biber)
- latex_needit(MAKEINDEX_COMPILER makeindex)
- latex_wantit(DVIPS_CONVERTER dvips)
- latex_wantit(PS2PDF_CONVERTER ps2pdf)
- latex_wantit(PDFTOPS_CONVERTER pdftops)
- set(LATEX_COMPILER_FLAGS "-interaction=batchmode -file-line-error"
- CACHE STRING "Flags passed to latex.")
- set(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS}
- CACHE STRING "Flags passed to pdflatex.")
- set(HTLATEX_COMPILER_TEX4HT_FLAGS "html"
- CACHE STRING "Options for the tex4ht.sty and *.4ht style files.")
- set(HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS ""
- CACHE STRING "Options for the text4ht postprocessor.")
- set(HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS ""
- CACHE STRING "Options for the t4ht postprocessor.")
- set(HTLATEX_COMPILER_LATEX_FLAGS ${LATEX_COMPILER_FLAGS}
- CACHE STRING "Flags passed from htlatex to the LaTeX compiler.")
- set(LATEX_SYNCTEX_FLAGS "-synctex=1"
- CACHE STRING "latex/pdflatex flags used to create synctex file.")
- set(BIBTEX_COMPILER_FLAGS ""
- CACHE STRING "Flags passed to bibtex.")
- set(BIBER_COMPILER_FLAGS ""
- CACHE STRING "Flags passed to biber.")
- set(MAKEINDEX_COMPILER_FLAGS ""
- CACHE STRING "Flags passed to makeindex.")
- set(MAKEGLOSSARIES_COMPILER_FLAGS ""
- CACHE STRING "Flags passed to makeglossaries.")
- set(MAKENOMENCLATURE_COMPILER_FLAGS ""
- CACHE STRING "Flags passed to makenomenclature.")
- set(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter"
- CACHE STRING "Flags passed to dvips.")
- if(NOT WIN32)
- set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode"
- CACHE STRING "Flags passed to ps2pdf.")
- else()
-
-
-
-
- set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct#100 -dCompatibilityLevel#1.3 -dSubsetFonts#true -dEmbedAllFonts#true -dAutoFilterColorImages#false -dAutoFilterGrayImages#false -dColorImageFilter#/FlateEncode -dGrayImageFilter#/FlateEncode -dMonoImageFilter#/FlateEncode"
- CACHE STRING "Flags passed to ps2pdf.")
- endif()
- set(PDFTOPS_CONVERTER_FLAGS ""
- CACHE STRING "Flags passed to pdftops.")
- mark_as_advanced(
- LATEX_COMPILER_FLAGS
- PDFLATEX_COMPILER_FLAGS
- HTLATEX_COMPILER_TEX4HT_FLAGS
- HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS
- HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS
- HTLATEX_COMPILER_LATEX_FLAGS
- LATEX_SYNCTEX_FLAGS
- BIBTEX_COMPILER_FLAGS
- BIBER_COMPILER_FLAGS
- MAKEINDEX_COMPILER_FLAGS
- MAKEGLOSSARIES_COMPILER_FLAGS
- MAKENOMENCLATURE_COMPILER_FLAGS
- DVIPS_CONVERTER_FLAGS
- PS2PDF_CONVERTER_FLAGS
- PDFTOPS_CONVERTER_FLAGS
- )
-
-
-
-
-
-
- separate_arguments(LATEX_COMPILER_FLAGS)
- separate_arguments(PDFLATEX_COMPILER_FLAGS)
- separate_arguments(HTLATEX_COMPILER_LATEX_FLAGS)
- separate_arguments(LATEX_SYNCTEX_FLAGS)
- separate_arguments(BIBTEX_COMPILER_FLAGS)
- separate_arguments(BIBER_COMPILER_FLAGS)
- separate_arguments(MAKEINDEX_COMPILER_FLAGS)
- separate_arguments(MAKEGLOSSARIES_COMPILER_FLAGS)
- separate_arguments(MAKENOMENCLATURE_COMPILER_FLAGS)
- separate_arguments(DVIPS_CONVERTER_FLAGS)
- separate_arguments(PS2PDF_CONVERTER_FLAGS)
- separate_arguments(PDFTOPS_CONVERTER_FLAGS)
-
-
-
-
-
- set(LATEX_COMPILER_ARGS "${LATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(PDFLATEX_COMPILER_ARGS "${PDFLATEX_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(HTLATEX_COMPILER_ARGS "${HTLATEX_COMPILER_LATEX_FLAGS}" CACHE INTERNAL "")
- set(LATEX_SYNCTEX_ARGS "${LATEX_SYNCTEX_FLAGS}" CACHE INTERNAL "")
- set(BIBTEX_COMPILER_ARGS "${BIBTEX_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(BIBER_COMPILER_ARGS "${BIBER_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(MAKEINDEX_COMPILER_ARGS "${MAKEINDEX_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(MAKEGLOSSARIES_COMPILER_ARGS "${MAKEGLOSSARIES_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(MAKENOMENCLATURE_COMPILER_ARGS "${MAKENOMENCLATURE_COMPILER_FLAGS}" CACHE INTERNAL "")
- set(DVIPS_CONVERTER_ARGS "${DVIPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
- set(PS2PDF_CONVERTER_ARGS "${PS2PDF_CONVERTER_FLAGS}" CACHE INTERNAL "")
- set(PDFTOPS_CONVERTER_ARGS "${PDFTOPS_CONVERTER_FLAGS}" CACHE INTERNAL "")
- find_program(IMAGEMAGICK_CONVERT
- NAMES magick convert
- DOC "The convert program that comes with ImageMagick (available at http://www.imagemagick.org)."
- )
- mark_as_advanced(IMAGEMAGICK_CONVERT)
- if(DEFINED ENV{LATEX_DEFAULT_BUILD})
- set(default_build $ENV{LATEX_DEFAULT_BUILD})
- else()
- set(default_build pdf)
- endif()
- set(LATEX_DEFAULT_BUILD "${default_build}" CACHE STRING
- "Choose the default type of LaTeX build. Valid options are pdf, dvi, ps, safepdf, html"
- )
- set_property(CACHE LATEX_DEFAULT_BUILD
- PROPERTY STRINGS pdf dvi ps safepdf html
- )
- option(LATEX_USE_SYNCTEX
- "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."
- OFF
- )
- option(LATEX_SMALL_IMAGES
- "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 distribution and can make it faster to read dvi files."
- OFF)
- if(LATEX_SMALL_IMAGES)
- set(LATEX_RASTER_SCALE 16 PARENT_SCOPE)
- set(LATEX_OPPOSITE_RASTER_SCALE 100 PARENT_SCOPE)
- else()
- set(LATEX_RASTER_SCALE 100 PARENT_SCOPE)
- set(LATEX_OPPOSITE_RASTER_SCALE 16 PARENT_SCOPE)
- endif()
-
-
- set(LATEX_DVI_VECTOR_IMAGE_EXTENSIONS .eps CACHE INTERNAL "")
- set(LATEX_DVI_RASTER_IMAGE_EXTENSIONS CACHE INTERNAL "")
- set(LATEX_DVI_IMAGE_EXTENSIONS
- ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS}
- ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- set(LATEX_PDF_VECTOR_IMAGE_EXTENSIONS .pdf CACHE INTERNAL "")
- set(LATEX_PDF_RASTER_IMAGE_EXTENSIONS .jpeg .jpg .png CACHE INTERNAL "")
- set(LATEX_PDF_IMAGE_EXTENSIONS
- ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS}
- ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- set(LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS .ai .dot .svg CACHE INTERNAL "")
- set(LATEX_OTHER_RASTER_IMAGE_EXTENSIONS
- .bmp .bmp2 .bmp3 .dcm .dcx .ico .gif .pict .ppm .tif .tiff
- CACHE INTERNAL "")
- set(LATEX_OTHER_IMAGE_EXTENSIONS
- ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS}
- ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- set(LATEX_VECTOR_IMAGE_EXTENSIONS
- ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS}
- ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS}
- ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- set(LATEX_RASTER_IMAGE_EXTENSIONS
- ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS}
- ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS}
- ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- set(LATEX_IMAGE_EXTENSIONS
- ${LATEX_DVI_IMAGE_EXTENSIONS}
- ${LATEX_PDF_IMAGE_EXTENSIONS}
- ${LATEX_OTHER_IMAGE_EXTENSIONS}
- CACHE INTERNAL ""
- )
- endfunction(latex_setup_variables)
- function(latex_setup_targets)
- if(NOT TARGET pdf)
- add_custom_target(pdf)
- endif()
- if(NOT TARGET dvi)
- add_custom_target(dvi)
- endif()
- if(NOT TARGET ps)
- add_custom_target(ps)
- endif()
- if(NOT TARGET safepdf)
- add_custom_target(safepdf)
- endif()
- if(NOT TARGET html)
- add_custom_target(html)
- endif()
- if(NOT TARGET auxclean)
- add_custom_target(auxclean)
- endif()
- endfunction(latex_setup_targets)
- function(latex_get_output_path var)
- set(latex_output_path)
- if(LATEX_OUTPUT_PATH)
- get_filename_component(
- LATEX_OUTPUT_PATH_FULL "${LATEX_OUTPUT_PATH}" ABSOLUTE
- )
- if("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
- message(SEND_ERROR "You cannot set LATEX_OUTPUT_PATH to the same directory that contains LaTeX input files.")
- else()
- set(latex_output_path "${LATEX_OUTPUT_PATH_FULL}")
- endif()
- else()
- if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
- message(SEND_ERROR "LaTeX files must be built out of source or you must set LATEX_OUTPUT_PATH.")
- else()
- set(latex_output_path "${CMAKE_CURRENT_BINARY_DIR}")
- endif()
- endif()
- set(${var} ${latex_output_path} PARENT_SCOPE)
- endfunction(latex_get_output_path)
- function(latex_add_convert_command
- output_path
- input_path
- output_extension
- input_extension
- flags
- )
- set(require_imagemagick_convert TRUE)
- set(convert_flags "")
- if(${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
-
-
- if(PS2PDF_CONVERTER)
- set(require_imagemagick_convert FALSE)
- set(converter ${PS2PDF_CONVERTER})
- set(convert_flags -dEPSCrop ${PS2PDF_CONVERTER_ARGS})
- else()
- message(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.")
- endif()
- elseif(${input_extension} STREQUAL ".pdf" AND ${output_extension} STREQUAL ".eps")
-
-
-
- if(PDFTOPS_CONVERTER)
- set(require_imagemagick_convert FALSE)
- set(converter ${PDFTOPS_CONVERTER})
- set(convert_flags -eps ${PDFTOPS_CONVERTER_ARGS})
- else()
- message(STATUS "Consider getting pdftops from Poppler to convert PDF images to EPS images.")
- set(convert_flags ${flags})
- endif()
- else()
- set(convert_flags ${flags})
- endif()
- if(require_imagemagick_convert)
- if(IMAGEMAGICK_CONVERT)
- string(TOLOWER ${IMAGEMAGICK_CONVERT} IMAGEMAGICK_CONVERT_LOWERCASE)
- if(${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe")
- 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). If you have a recent version of ImageMagick (7.0 or higher), use the magick program instead of convert for IMAGEMAGICK_CONVERT.")
- else()
- set(converter ${IMAGEMAGICK_CONVERT})
-
-
- add_custom_command(OUTPUT ${output_path}
- COMMAND ${converter}
- ARGS ${input_path} ${convert_flags} ${output_path}
- DEPENDS ${input_path}
- )
- endif()
- else()
- message(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.")
- endif()
- else()
- add_custom_command(OUTPUT ${output_path}
- COMMAND ${converter}
- ARGS ${convert_flags} ${input_path} ${output_path}
- DEPENDS ${input_path}
- )
- endif()
- endfunction(latex_add_convert_command)
- function(latex_convert_image
- output_files_var
- input_file
- output_extension
- convert_flags
- output_extensions
- other_files
- )
- set(output_file_list)
- set(input_dir ${CMAKE_CURRENT_SOURCE_DIR})
- latex_get_output_path(output_dir)
- latex_get_filename_component(extension "${input_file}" EXT)
-
- latex_get_filename_component(name "${input_file}" NAME_WE)
- set(suggested_name "${name}")
- if(suggested_name MATCHES ".*\\..*")
- string(REPLACE "." "-" suggested_name "${suggested_name}")
- endif()
- if(suggested_name MATCHES ".* .*")
- string(REPLACE " " "-" suggested_name "${suggested_name}")
- endif()
- if(NOT suggested_name STREQUAL name)
- message(WARNING "Some LaTeX distributions have problems with image file names with multiple extensions or spaces. Consider changing ${name}${extension} to something like ${suggested_name}${extension}.")
- endif()
- string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} output_file
- "${input_file}")
- latex_list_contains(is_type ${extension} ${output_extensions})
- if(is_type)
- if(convert_flags)
- latex_add_convert_command(${output_dir}/${output_file}
- ${input_dir}/${input_file} ${output_extension} ${extension}
- "${convert_flags}")
- set(output_file_list ${output_dir}/${output_file})
- else()
-
- add_custom_command(OUTPUT ${output_dir}/${input_file}
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy ${input_dir}/${input_file} ${output_dir}/${input_file}
- DEPENDS ${input_dir}/${input_file}
- )
- set(output_file_list ${output_dir}/${input_file})
- endif()
- else()
- set(do_convert TRUE)
-
- foreach(valid_extension ${output_extensions})
- string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} try_file
- "${input_file}")
- latex_list_contains(has_native_file "${try_file}" ${other_files})
- if(has_native_file)
- set(do_convert FALSE)
- endif()
- endforeach(valid_extension)
-
- if(do_convert)
- latex_add_convert_command(${output_dir}/${output_file}
- ${input_dir}/${input_file} ${output_extension} ${extension}
- "${convert_flags}")
- set(output_file_list ${output_dir}/${output_file})
- endif()
- endif()
- set(${output_files_var} ${output_file_list} PARENT_SCOPE)
- endfunction(latex_convert_image)
- function(latex_process_images dvi_outputs_var pdf_outputs_var)
- latex_get_output_path(output_dir)
- set(dvi_outputs)
- set(pdf_outputs)
- foreach(file ${ARGN})
- if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
- latex_get_filename_component(extension "${file}" EXT)
- set(convert_flags)
-
- latex_list_contains(is_raster "${extension}"
- ${LATEX_RASTER_IMAGE_EXTENSIONS})
- if(LATEX_SMALL_IMAGES)
- if(is_raster)
- set(convert_flags -resize ${LATEX_RASTER_SCALE}%)
- endif()
- endif()
-
- latex_get_filename_component(path "${output_dir}/${file}" PATH)
- make_directory("${path}")
-
- latex_convert_image(output_files "${file}" .eps "${convert_flags}"
- "${LATEX_DVI_IMAGE_EXTENSIONS}" "${ARGN}")
- list(APPEND dvi_outputs ${output_files})
-
- if(is_raster)
- latex_convert_image(output_files "${file}" .png "${convert_flags}"
- "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
- list(APPEND pdf_outputs ${output_files})
- else()
- latex_convert_image(output_files "${file}" .pdf "${convert_flags}"
- "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
- list(APPEND pdf_outputs ${output_files})
- endif()
- else()
- message(WARNING "Could not find file ${CMAKE_CURRENT_SOURCE_DIR}/${file}. Are you sure you gave relative paths to IMAGES?")
- endif()
- endforeach(file)
- set(${dvi_outputs_var} ${dvi_outputs} PARENT_SCOPE)
- set(${pdf_outputs_var} ${pdf_outputs} PARENT_SCOPE)
- endfunction(latex_process_images)
- function(latex_copy_globbed_files pattern dest)
- file(GLOB file_list ${pattern})
- foreach(in_file ${file_list})
- latex_get_filename_component(out_file ${in_file} NAME)
- configure_file(${in_file} ${dest}/${out_file} COPYONLY)
- endforeach(in_file)
- endfunction(latex_copy_globbed_files)
- function(latex_copy_input_file file)
- latex_get_output_path(output_dir)
- if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
- latex_get_filename_component(path ${file} PATH)
- file(MAKE_DIRECTORY ${output_dir}/${path})
- latex_list_contains(use_config ${file} ${LATEX_CONFIGURE})
- if(use_config)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${file}
- ${output_dir}/${file}
- @ONLY
- )
- add_custom_command(OUTPUT ${output_dir}/${file}
- COMMAND ${CMAKE_COMMAND}
- ARGS ${CMAKE_BINARY_DIR}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
- )
- else()
- add_custom_command(OUTPUT ${output_dir}/${file}
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
- )
- endif()
- else()
- if(EXISTS ${output_dir}/${file})
-
-
- else()
- message("Could not find input file ${CMAKE_CURRENT_SOURCE_DIR}/${file}")
- endif()
- endif()
- endfunction(latex_copy_input_file)
- function(latex_usage command message)
- message(SEND_ERROR
- "${message}\n Usage: ${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_BIBLATEX] [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n [FORCE_PDF] [FORCE_DVI] [FORCE_HTML]\n [TARGET_NAME] <name>\n [EXCLUDE_FROM_ALL]\n [EXCLUDE_FROM_DEFAULTS])"
- )
- endfunction(latex_usage command message)
- function(parse_add_latex_arguments command latex_main_input)
- set(options
- USE_BIBLATEX
- USE_INDEX
- USE_GLOSSARY
- USE_NOMENCL
- FORCE_PDF
- FORCE_DVI
- FORCE_HTML
- EXCLUDE_FROM_ALL
- EXCLUDE_FROM_DEFAULTS
-
- USE_GLOSSARIES
- DEFAULT_PDF
- DEFAULT_SAFEPDF
- DEFAULT_PS
- NO_DEFAULT
- MANGLE_TARGET_NAMES
- )
- set(oneValueArgs
- TARGET_NAME
- )
- set(multiValueArgs
- BIBFILES
- MULTIBIB_NEWCITES
- INPUTS
- IMAGE_DIRS
- IMAGES
- CONFIGURE
- DEPENDS
- INDEX_NAMES
- )
- cmake_parse_arguments(
- LATEX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
- if(LATEX_UNPARSED_ARGUMENTS)
- latex_usage(${command} "Invalid or deprecated arguments: ${LATEX_UNPARSED_ARGUMENTS}")
- endif()
- if(LATEX_USE_GLOSSARIES)
- latex_usage(${command} "USE_GLOSSARIES option removed in version 1.6.1. Use USE_GLOSSARY instead.")
- endif()
- if(LATEX_DEFAULT_PDF)
- latex_usage(${command} "DEFAULT_PDF option removed in version 2.0. Use FORCE_PDF option or LATEX_DEFAULT_BUILD CMake variable instead.")
- endif()
- if(LATEX_DEFAULT_SAFEPDF)
- latex_usage(${command} "DEFAULT_SAFEPDF option removed in version 2.0. Use LATEX_DEFAULT_BUILD CMake variable instead.")
- endif()
- if(LATEX_DEFAULT_DVI)
- latex_usage(${command} "DEFAULT_DVI option removed in version 2.0. Use FORCE_DVI option or LATEX_DEFAULT_BUILD CMake variable instead.")
- endif()
- if(LATEX_NO_DEFAULT)
- latex_usage(${command} "NO_DEFAULT option removed in version 2.0. Use EXCLUDE_FROM_ALL instead.")
- endif()
- if(LATEX_MANGLE_TARGET_NAMES)
- latex_usage(${command} "MANGLE_TARGET_NAMES option removed in version 2.0. All LaTeX targets use mangled names now.")
- endif()
-
- latex_get_filename_component(latex_target ${latex_main_input} NAME_WE)
- set(LATEX_MAIN_INPUT ${latex_main_input} PARENT_SCOPE)
- set(LATEX_TARGET ${latex_target} PARENT_SCOPE)
-
- foreach(arg_name ${options} ${oneValueArgs} ${multiValueArgs})
- set(var_name LATEX_${arg_name})
- set(${var_name} ${${var_name}} PARENT_SCOPE)
- endforeach(arg_name)
- endfunction(parse_add_latex_arguments)
- function(add_latex_targets_internal)
- latex_get_output_path(output_dir)
- if(LATEX_USE_SYNCTEX)
- set(synctex_flags ${LATEX_SYNCTEX_ARGS})
- else()
- set(synctex_flags)
- endif()
-
- set(latex_build_command
- ${LATEX_COMPILER} ${LATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
- )
- if(LATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
-
-
- set(latex_build_command
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=execute_latex
- -D LATEX_TARGET=${LATEX_TARGET}
- -D LATEX_WORKING_DIRECTORY="${output_dir}"
- -D LATEX_FULL_COMMAND="${latex_build_command}"
- -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.dvi"
- -P "${LATEX_USE_LATEX_LOCATION}"
- )
- endif()
- set(pdflatex_build_command
- ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT}
- )
- if(PDFLATEX_COMPILER_ARGS MATCHES ".*batchmode.*")
-
-
- set(pdflatex_build_command
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=execute_latex
- -D LATEX_TARGET=${LATEX_TARGET}
- -D LATEX_WORKING_DIRECTORY="${output_dir}"
- -D LATEX_FULL_COMMAND="${pdflatex_build_command}"
- -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.pdf"
- -P "${LATEX_USE_LATEX_LOCATION}"
- )
- endif()
- if(NOT LATEX_TARGET_NAME)
-
-
- string(REPLACE " " "_" LATEX_TARGET_NAME ${LATEX_TARGET})
- endif()
-
-
- get_filename_component(LATEX_MAIN_INPUT_SUBDIR ${LATEX_MAIN_INPUT} DIRECTORY)
-
- set(dvi_target ${LATEX_TARGET_NAME}_dvi)
- set(pdf_target ${LATEX_TARGET_NAME}_pdf)
- set(ps_target ${LATEX_TARGET_NAME}_ps)
- set(safepdf_target ${LATEX_TARGET_NAME}_safepdf)
- set(html_target ${LATEX_TARGET_NAME}_html)
- set(auxclean_target ${LATEX_TARGET_NAME}_auxclean)
-
-
- set(auxiliary_clean_files
- ${output_dir}/${LATEX_TARGET}.aux
- ${output_dir}/${LATEX_TARGET}.bbl
- ${output_dir}/${LATEX_TARGET}.blg
- ${output_dir}/${LATEX_TARGET}-blx.bib
- ${output_dir}/${LATEX_TARGET}.glg
- ${output_dir}/${LATEX_TARGET}.glo
- ${output_dir}/${LATEX_TARGET}.gls
- ${output_dir}/${LATEX_TARGET}.idx
- ${output_dir}/${LATEX_TARGET}.ilg
- ${output_dir}/${LATEX_TARGET}.ind
- ${output_dir}/${LATEX_TARGET}.ist
- ${output_dir}/${LATEX_TARGET}.log
- ${output_dir}/${LATEX_TARGET}.out
- ${output_dir}/${LATEX_TARGET}.toc
- ${output_dir}/${LATEX_TARGET}.lof
- ${output_dir}/${LATEX_TARGET}.xdy
- ${output_dir}/${LATEX_TARGET}.synctex.gz
- ${output_dir}/${LATEX_TARGET}.synctex.bak.gz
- ${output_dir}/${LATEX_TARGET}.dvi
- ${output_dir}/${LATEX_TARGET}.ps
- ${output_dir}/${LATEX_TARGET}.pdf
- )
- set(image_list ${LATEX_IMAGES})
-
-
- foreach(dir ${LATEX_IMAGE_DIRS})
- if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
- message(WARNING "Image directory ${CMAKE_CURRENT_SOURCE_DIR}/${dir} does not exist. Are you sure you gave relative directories to IMAGE_DIRS?")
- endif()
- foreach(extension ${LATEX_IMAGE_EXTENSIONS})
- file(GLOB files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*${extension})
- foreach(file ${files})
- latex_get_filename_component(filename ${file} NAME)
- list(APPEND image_list ${dir}/${filename})
- endforeach(file)
- endforeach(extension)
- endforeach(dir)
- latex_process_images(dvi_images pdf_images ${image_list})
- set(make_dvi_command
- ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command})
- set(make_pdf_command
- ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command}
- )
- set(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images})
- set(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images})
- foreach(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
- list(APPEND make_dvi_depends ${output_dir}/${input})
- list(APPEND make_pdf_depends ${output_dir}/${input})
- if(${input} MATCHES "\\.tex$")
-
-
-
- string(REGEX REPLACE "\\.tex$" "" input_we ${input})
- list(APPEND auxiliary_clean_files
- ${output_dir}/${input_we}.aux
- ${output_dir}/${input}.aux
- )
- endif()
- endforeach(input)
- set(all_latex_sources ${LATEX_MAIN_INPUT} ${LATEX_INPUTS} ${image_list})
- if(LATEX_USE_GLOSSARY)
- foreach(dummy 0 1)
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=makeglossaries
- -D LATEX_TARGET=${LATEX_TARGET}
- -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
- -D XINDY_COMPILER=${XINDY_COMPILER}
- -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
- -P ${LATEX_USE_LATEX_LOCATION}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command}
- )
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=makeglossaries
- -D LATEX_TARGET=${LATEX_TARGET}
- -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
- -D XINDY_COMPILER=${XINDY_COMPILER}
- -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS}
- -P ${LATEX_USE_LATEX_LOCATION}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command}
- )
- endforeach(dummy)
- endif()
- if(LATEX_USE_NOMENCL)
- foreach(dummy 0 1)
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=makenomenclature
- -D LATEX_TARGET=${LATEX_TARGET}
- -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
- -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
- -P ${LATEX_USE_LATEX_LOCATION}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command}
- )
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=makenomenclature
- -D LATEX_TARGET=${LATEX_TARGET}
- -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
- -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS}
- -P ${LATEX_USE_LATEX_LOCATION}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command}
- )
- endforeach(dummy)
- endif()
- if(LATEX_BIBFILES)
- if(LATEX_USE_BIBLATEX)
- if(NOT BIBER_COMPILER)
- message(SEND_ERROR "I need the biber command.")
- endif()
- set(bib_compiler ${BIBER_COMPILER})
- set(bib_compiler_flags ${BIBER_COMPILER_ARGS})
- if (LATEX_USE_BIBLATEX_CONFIG)
- list(APPEND auxiliary_clean_files ${output_dir}/biblatex.cfg)
- list(APPEND make_dvi_depends ${output_dir}/biblatex.cfg)
- list(APPEND make_pdf_depends ${output_dir}/biblatex.cfg)
- endif()
- else()
- set(bib_compiler ${BIBTEX_COMPILER})
- set(bib_compiler_flags ${BIBTEX_COMPILER_ARGS})
- endif()
- if(LATEX_MULTIBIB_NEWCITES)
- foreach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES})
- latex_get_filename_component(multibib_target ${multibib_auxfile} NAME_WE)
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${bib_compiler} ${bib_compiler_flags} ${multibib_target})
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${bib_compiler} ${bib_compiler_flags} ${multibib_target})
- set(auxiliary_clean_files ${auxiliary_clean_files}
- ${output_dir}/${multibib_target}.aux)
- endforeach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES})
- else()
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET})
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET})
- endif()
- foreach (bibfile ${LATEX_BIBFILES})
- list(APPEND make_dvi_depends ${output_dir}/${bibfile})
- list(APPEND make_pdf_depends ${output_dir}/${bibfile})
- endforeach (bibfile ${LATEX_BIBFILES})
- else()
- if(LATEX_MULTIBIB_NEWCITES)
- message(WARNING "MULTIBIB_NEWCITES has no effect without BIBFILES option.")
- endif()
- endif()
- if(LATEX_USE_INDEX)
- if(LATEX_INDEX_NAMES)
- set(INDEX_NAMES ${LATEX_INDEX_NAMES})
- else()
- set(INDEX_NAMES ${LATEX_TARGET})
- endif()
- foreach(idx_name ${INDEX_NAMES})
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx)
- set(auxiliary_clean_files ${auxiliary_clean_files}
- ${output_dir}/${idx_name}.idx
- ${output_dir}/${idx_name}.ilg
- ${output_dir}/${idx_name}.ind)
- endforeach()
- else()
- if(LATEX_INDEX_NAMES)
- message(WARNING "INDEX_NAMES has no effect without USE_INDEX option.")
- endif()
- endif()
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command})
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command})
-
-
- if(LATEX_USE_BIBLATEX)
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${latex_build_command})
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${pdflatex_build_command})
- endif()
- if(LATEX_USE_SYNCTEX)
- if(NOT GZIP)
- message(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program. Set GZIP variable.")
- endif()
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=correct_synctex
- -D LATEX_TARGET=${LATEX_TARGET}
- -D GZIP=${GZIP}
- -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
- -D "LATEX_BINARY_DIRECTORY=${output_dir}"
- -P ${LATEX_USE_LATEX_LOCATION}
- )
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=correct_synctex
- -D LATEX_TARGET=${LATEX_TARGET}
- -D GZIP=${GZIP}
- -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
- -D "LATEX_BINARY_DIRECTORY=${output_dir}"
- -P ${LATEX_USE_LATEX_LOCATION}
- )
- endif()
-
- set(make_dvi_command ${make_dvi_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=check_important_warnings
- -D LATEX_TARGET=${LATEX_TARGET}
- -P ${LATEX_USE_LATEX_LOCATION}
- )
- set(make_pdf_command ${make_pdf_command}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${CMAKE_COMMAND}
- -D LATEX_BUILD_COMMAND=check_important_warnings
- -D LATEX_TARGET=${LATEX_TARGET}
- -P ${LATEX_USE_LATEX_LOCATION}
- )
-
- string(TOLOWER "${LATEX_DEFAULT_BUILD}" default_build)
- if((NOT LATEX_FORCE_PDF) AND (NOT LATEX_FORCE_DVI) AND (NOT LATEX_FORCE_HTML))
- set(no_force TRUE)
- endif()
-
- if(LATEX_FORCE_PDF OR no_force)
- if(LATEX_FORCE_PDF)
- set(default_build pdf)
- endif()
- if(PDFLATEX_COMPILER)
- add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.pdf
- COMMAND ${make_pdf_command}
- DEPENDS ${make_pdf_depends}
- )
- add_custom_target(${pdf_target}
- DEPENDS ${output_dir}/${LATEX_TARGET}.pdf
- SOURCES ${all_latex_sources}
- )
- if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
- add_dependencies(pdf ${pdf_target})
- endif()
- endif()
- endif()
-
- if(LATEX_FORCE_DVI OR LATEX_FORCE_HTML OR no_force)
- if(LATEX_FORCE_DVI)
- if((NOT default_build STREQUAL dvi) AND
- (NOT default_build STREQUAL ps) AND
- (NOT default_build STREQUAL safepdf))
- set(default_build dvi)
- endif()
- endif()
- add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi
- COMMAND ${make_dvi_command}
- DEPENDS ${make_dvi_depends}
- )
- add_custom_target(${dvi_target}
- DEPENDS ${output_dir}/${LATEX_TARGET}.dvi
- SOURCES ${all_latex_sources}
- )
- if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
- add_dependencies(dvi ${dvi_target})
- endif()
- if(DVIPS_CONVERTER)
- add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.ps
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_ARGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi
- DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
- add_custom_target(${ps_target}
- DEPENDS ${output_dir}/${LATEX_TARGET}.ps
- SOURCES ${all_latex_sources}
- )
- if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
- add_dependencies(ps ${ps_target})
- endif()
- if(PS2PDF_CONVERTER)
-
-
-
- add_custom_target(${safepdf_target}
- ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_ARGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf
- DEPENDS ${ps_target}
- )
- if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
- add_dependencies(safepdf ${safepdf_target})
- endif()
- endif()
- endif()
- endif()
- if(LATEX_FORCE_HTML OR no_force)
- if (LATEX_FORCE_HTML)
- set(default_build html)
- endif()
- if(HTLATEX_COMPILER AND LATEX_MAIN_INPUT_SUBDIR)
- message(STATUS
- "Disabling HTML build for ${LATEX_TARGET_NAME}.tex because the main file is in subdirectory ${LATEX_MAIN_INPUT_SUBDIR}"
- )
-
-
-
-
-
-
-
- elseif(HTLATEX_COMPILER)
-
- set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html")
- add_custom_command(OUTPUT ${HTML_OUTPUT}
- COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
- ${HTLATEX_COMPILER} ${LATEX_MAIN_INPUT}
- "${HTLATEX_COMPILER_TEX4HT_FLAGS}"
- "${HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS}"
- "${HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS}"
- ${HTLATEX_COMPILER_ARGS}
- DEPENDS
- ${output_dir}/${LATEX_TARGET}.tex
- ${output_dir}/${LATEX_TARGET}.dvi
- VERBATIM
- )
- add_custom_target(${html_target}
- DEPENDS ${HTML_OUTPUT} ${dvi_target}
- SOURCES ${all_latex_sources}
- )
- if(NOT LATEX_EXCLUDE_FROM_DEFAULTS)
- add_dependencies(html ${html_target})
- endif()
- endif()
- endif()
-
- if("${default_build}" STREQUAL "pdf")
- add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${pdf_target})
- elseif("${default_build}" STREQUAL "dvi")
- add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${dvi_target})
- elseif("${default_build}" STREQUAL "ps")
- add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${ps_target})
- elseif("${default_build}" STREQUAL "safepdf")
- add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${safepdf_target})
- elseif("${default_build}" STREQUAL "html")
- add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${html_target})
- else()
- message(SEND_ERROR "LATEX_DEFAULT_BUILD set to an invalid value. See the documentation for that variable.")
- endif()
- if(NOT LATEX_EXCLUDE_FROM_ALL)
- add_custom_target(_${LATEX_TARGET_NAME} ALL DEPENDS ${LATEX_TARGET_NAME})
- endif()
- set_directory_properties(.
- ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}"
- )
- add_custom_target(${auxclean_target}
- COMMENT "Cleaning auxiliary LaTeX files."
- COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files}
- )
- add_dependencies(auxclean ${auxclean_target})
- endfunction(add_latex_targets_internal)
- function(add_latex_targets latex_main_input)
- latex_get_output_path(output_dir)
- parse_add_latex_arguments(ADD_LATEX_TARGETS ${latex_main_input} ${ARGN})
- add_latex_targets_internal()
- endfunction(add_latex_targets)
- function(add_latex_document latex_main_input)
- latex_get_output_path(output_dir)
- if(output_dir)
- parse_add_latex_arguments(add_latex_document ${latex_main_input} ${ARGN})
- latex_copy_input_file(${LATEX_MAIN_INPUT})
- foreach (bib_file ${LATEX_BIBFILES})
- latex_copy_input_file(${bib_file})
- endforeach (bib_file)
- if (LATEX_USE_BIBLATEX AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/biblatex.cfg)
- latex_copy_input_file(biblatex.cfg)
- set(LATEX_USE_BIBLATEX_CONFIG TRUE)
- endif()
- foreach (input ${LATEX_INPUTS})
- latex_copy_input_file(${input})
- endforeach(input)
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.cls ${output_dir})
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir})
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir})
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir})
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir})
- latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.fd ${output_dir})
- add_latex_targets_internal()
- endif()
- endfunction(add_latex_document)
- if(LATEX_BUILD_COMMAND)
- set(command_handled)
- if("${LATEX_BUILD_COMMAND}" STREQUAL execute_latex)
- latex_execute_latex()
- set(command_handled TRUE)
- endif()
- if("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
- latex_makeglossaries()
- set(command_handled TRUE)
- endif()
- if("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature)
- latex_makenomenclature()
- set(command_handled TRUE)
- endif()
- if("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex)
- latex_correct_synctex()
- set(command_handled TRUE)
- endif()
- if("${LATEX_BUILD_COMMAND}" STREQUAL check_important_warnings)
- latex_check_important_warnings()
- set(command_handled TRUE)
- endif()
- if(NOT command_handled)
- message(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}")
- endif()
- else()
-
- latex_setup_variables()
- latex_setup_targets()
- endif()
|