1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindLATEX 6--------- 7 8Find LaTeX 9 10This module finds an installed LaTeX and determines the location 11of the compiler. Additionally the module looks for Latex-related 12software like BibTeX. 13 14.. versionadded:: 3.2 15 Component processing; support for htlatex, pdftops, Biber, xindy, XeLaTeX, 16 LuaLaTeX. 17 18This module sets the following result variables:: 19 20 LATEX_FOUND: whether found Latex and requested components 21 LATEX_<component>_FOUND: whether found <component> 22 LATEX_COMPILER: path to the LaTeX compiler 23 PDFLATEX_COMPILER: path to the PdfLaTeX compiler 24 XELATEX_COMPILER: path to the XeLaTeX compiler 25 LUALATEX_COMPILER: path to the LuaLaTeX compiler 26 BIBTEX_COMPILER: path to the BibTeX compiler 27 BIBER_COMPILER: path to the Biber compiler 28 MAKEINDEX_COMPILER: path to the MakeIndex compiler 29 XINDY_COMPILER: path to the xindy compiler 30 DVIPS_CONVERTER: path to the DVIPS converter 31 DVIPDF_CONVERTER: path to the DVIPDF converter 32 PS2PDF_CONVERTER: path to the PS2PDF converter 33 PDFTOPS_CONVERTER: path to the pdftops converter 34 LATEX2HTML_CONVERTER: path to the LaTeX2Html converter 35 HTLATEX_COMPILER: path to the htlatex compiler 36 37Possible components are:: 38 39 PDFLATEX 40 XELATEX 41 LUALATEX 42 BIBTEX 43 BIBER 44 MAKEINDEX 45 XINDY 46 DVIPS 47 DVIPDF 48 PS2PDF 49 PDFTOPS 50 LATEX2HTML 51 HTLATEX 52 53Example Usages:: 54 55 find_package(LATEX) 56 find_package(LATEX COMPONENTS PDFLATEX) 57 find_package(LATEX COMPONENTS BIBTEX PS2PDF) 58#]=======================================================================] 59 60if (WIN32) 61 # Try to find the MikTex binary path (look for its package manager). 62 find_path(MIKTEX_BINARY_PATH mpm.exe 63 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin" 64 "$ENV{LOCALAPPDATA}/Programs/MiKTeX/miktex/bin" 65 "$ENV{LOCALAPPDATA}/Programs/MiKTeX/miktex/bin/x64" 66 "$ENV{APPDATA}/Programs/MiKTeX/miktex/bin" 67 "$ENV{APPDATA}/Programs/MiKTeX/miktex/bin/x64" 68 DOC 69 "Path to the MikTex binary directory." 70 ) 71 mark_as_advanced(MIKTEX_BINARY_PATH) 72 73 # Try to find the GhostScript binary path (look for gswin32). 74 get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00 75 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\8.00;GS_DLL]" PATH 76 ) 77 78 get_filename_component(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04 79 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\7.04;GS_DLL]" PATH 80 ) 81 82 find_path(GHOSTSCRIPT_BINARY_PATH gswin32.exe 83 ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00} 84 ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04} 85 DOC "Path to the GhostScript binary directory." 86 ) 87 mark_as_advanced(GHOSTSCRIPT_BINARY_PATH) 88 89 find_path(GHOSTSCRIPT_LIBRARY_PATH ps2pdf13.bat 90 "${GHOSTSCRIPT_BINARY_PATH}/../lib" 91 DOC "Path to the GhostScript library directory." 92 ) 93 mark_as_advanced(GHOSTSCRIPT_LIBRARY_PATH) 94endif () 95 96# try to find Latex and the related programs 97find_program(LATEX_COMPILER 98 NAMES latex 99 PATHS ${MIKTEX_BINARY_PATH} 100 /usr/bin 101) 102 103# find pdflatex 104find_program(PDFLATEX_COMPILER 105 NAMES pdflatex 106 PATHS ${MIKTEX_BINARY_PATH} 107 /usr/bin 108) 109if (PDFLATEX_COMPILER) 110 set(LATEX_PDFLATEX_FOUND TRUE) 111else() 112 set(LATEX_PDFLATEX_FOUND FALSE) 113endif() 114 115# find xelatex 116find_program(XELATEX_COMPILER 117 NAMES xelatex 118 PATHS ${MIKTEX_BINARY_PATH} 119 /usr/bin 120) 121if (XELATEX_COMPILER) 122 set(LATEX_XELATEX_FOUND TRUE) 123else() 124 set(LATEX_XELATEX_FOUND FALSE) 125endif() 126 127# find lualatex 128find_program(LUALATEX_COMPILER 129 NAMES lualatex 130 PATHS ${MIKTEX_BINARY_PATH} 131 /usr/bin 132) 133if (LUALATEX_COMPILER) 134 set(LATEX_LUALATEX_FOUND TRUE) 135else() 136 set(LATEX_LUALATEX_FOUND FALSE) 137endif() 138 139# find bibtex 140find_program(BIBTEX_COMPILER 141 NAMES bibtex 142 PATHS ${MIKTEX_BINARY_PATH} 143 /usr/bin 144) 145if (BIBTEX_COMPILER) 146 set(LATEX_BIBTEX_FOUND TRUE) 147else() 148 set(LATEX_BIBTEX_FOUND FALSE) 149endif() 150 151# find biber 152find_program(BIBER_COMPILER 153 NAMES biber 154 PATHS ${MIKTEX_BINARY_PATH} 155 /usr/bin 156) 157if (BIBER_COMPILER) 158 set(LATEX_BIBER_FOUND TRUE) 159else() 160 set(LATEX_BIBER_FOUND FALSE) 161endif() 162 163# find makeindex 164find_program(MAKEINDEX_COMPILER 165 NAMES makeindex 166 PATHS ${MIKTEX_BINARY_PATH} 167 /usr/bin 168) 169if (MAKEINDEX_COMPILER) 170 set(LATEX_MAKEINDEX_FOUND TRUE) 171else() 172 set(LATEX_MAKEINDEX_FOUND FALSE) 173endif() 174 175# find xindy 176find_program(XINDY_COMPILER 177 NAMES xindy 178 PATHS ${MIKTEX_BINARY_PATH} 179 /usr/bin 180) 181if (XINDY_COMPILER) 182 set(LATEX_XINDY_FOUND TRUE) 183else() 184 set(LATEX_XINDY_FOUND FALSE) 185endif() 186 187# find dvips 188find_program(DVIPS_CONVERTER 189 NAMES dvips 190 PATHS ${MIKTEX_BINARY_PATH} 191 /usr/bin 192) 193if (DVIPS_CONVERTER) 194 set(LATEX_DVIPS_FOUND TRUE) 195else() 196 set(LATEX_DVIPS_FOUND FALSE) 197endif() 198 199# find dvipdf 200find_program(DVIPDF_CONVERTER 201 NAMES dvipdfm dvipdft dvipdf 202 PATHS ${MIKTEX_BINARY_PATH} 203 /usr/bin 204) 205if (DVIPDF_CONVERTER) 206 set(LATEX_DVIPDF_FOUND TRUE) 207else() 208 set(LATEX_DVIPDF_FOUND FALSE) 209endif() 210 211# find ps2pdf 212if (WIN32) 213 find_program(PS2PDF_CONVERTER 214 NAMES ps2pdf14.bat ps2pdf14 ps2pdf 215 PATHS ${GHOSTSCRIPT_LIBRARY_PATH} 216 ${MIKTEX_BINARY_PATH} 217 ) 218else () 219 find_program(PS2PDF_CONVERTER 220 NAMES ps2pdf14 ps2pdf 221 ) 222endif () 223if (PS2PDF_CONVERTER) 224 set(LATEX_PS2PDF_FOUND TRUE) 225else() 226 set(LATEX_PS2PDF_FOUND FALSE) 227endif() 228 229# find pdftops 230find_program(PDFTOPS_CONVERTER 231 NAMES pdftops 232 PATHS ${MIKTEX_BINARY_PATH} 233 /usr/bin 234) 235if (PDFTOPS_CONVERTER) 236 set(LATEX_PDFTOPS_FOUND TRUE) 237else() 238 set(LATEX_PDFTOPS_FOUND FALSE) 239endif() 240 241# find latex2html 242find_program(LATEX2HTML_CONVERTER 243 NAMES latex2html 244 PATHS ${MIKTEX_BINARY_PATH} 245 /usr/bin 246) 247if (LATEX2HTML_CONVERTER) 248 set(LATEX_LATEX2HTML_FOUND TRUE) 249else() 250 set(LATEX_LATEX2HTML_FOUND FALSE) 251endif() 252 253# find htlatex 254find_program(HTLATEX_COMPILER 255 NAMES htlatex 256 PATHS ${MIKTEX_BINARY_PATH} 257 /usr/bin 258) 259if (HTLATEX_COMPILER) 260 set(LATEX_HTLATEX_FOUND TRUE) 261else() 262 set(LATEX_HTLATEX_FOUND FALSE) 263endif() 264 265 266mark_as_advanced( 267 LATEX_COMPILER 268 PDFLATEX_COMPILER 269 XELATEX_COMPILER 270 LUALATEX_COMPILER 271 BIBTEX_COMPILER 272 BIBER_COMPILER 273 MAKEINDEX_COMPILER 274 XINDY_COMPILER 275 DVIPS_CONVERTER 276 DVIPDF_CONVERTER 277 PS2PDF_CONVERTER 278 PDFTOPS_CONVERTER 279 LATEX2HTML_CONVERTER 280 HTLATEX_COMPILER 281) 282 283include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 284find_package_handle_standard_args(LATEX 285 REQUIRED_VARS LATEX_COMPILER 286 HANDLE_COMPONENTS 287) 288