FindLATEX.cmake 6.1 KB

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