FindLATEX.cmake 7.9 KB

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