FindLATEX.cmake 6.5 KB

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