FindLATEX.cmake 6.7 KB

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