FindTCL.cmake 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #.rst:
  2. # FindTCL
  3. # -------
  4. #
  5. # TK_INTERNAL_PATH was removed.
  6. #
  7. # This module finds if Tcl is installed and determines where the include
  8. # files and libraries are. It also determines what the name of the
  9. # library is. This code sets the following variables:
  10. #
  11. # ::
  12. #
  13. # TCL_FOUND = Tcl was found
  14. # TK_FOUND = Tk was found
  15. # TCLTK_FOUND = Tcl and Tk were found
  16. # TCL_LIBRARY = path to Tcl library (tcl tcl80)
  17. # TCL_INCLUDE_PATH = path to where tcl.h can be found
  18. # TCL_TCLSH = path to tclsh binary (tcl tcl80)
  19. # TK_LIBRARY = path to Tk library (tk tk80 etc)
  20. # TK_INCLUDE_PATH = path to where tk.h can be found
  21. # TK_WISH = full path to the wish executable
  22. #
  23. #
  24. #
  25. # In an effort to remove some clutter and clear up some issues for
  26. # people who are not necessarily Tcl/Tk gurus/developpers, some
  27. # variables were moved or removed. Changes compared to CMake 2.4 are:
  28. #
  29. # ::
  30. #
  31. # => they were only useful for people writing Tcl/Tk extensions.
  32. # => these libs are not packaged by default with Tcl/Tk distributions.
  33. # Even when Tcl/Tk is built from source, several flavors of debug libs
  34. # are created and there is no real reason to pick a single one
  35. # specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx).
  36. # Let's leave that choice to the user by allowing him to assign
  37. # TCL_LIBRARY to any Tcl library, debug or not.
  38. # => this ended up being only a Win32 variable, and there is a lot of
  39. # confusion regarding the location of this file in an installed Tcl/Tk
  40. # tree anyway (see 8.5 for example). If you need the internal path at
  41. # this point it is safer you ask directly where the *source* tree is
  42. # and dig from there.
  43. #=============================================================================
  44. # Copyright 2001-2009 Kitware, Inc.
  45. #
  46. # Distributed under the OSI-approved BSD License (the "License");
  47. # see accompanying file Copyright.txt for details.
  48. #
  49. # This software is distributed WITHOUT ANY WARRANTY; without even the
  50. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  51. # See the License for more information.
  52. #=============================================================================
  53. # (To distribute this file outside of CMake, substitute the full
  54. # License text for the above reference.)
  55. include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
  56. include(${CMAKE_CURRENT_LIST_DIR}/FindTclsh.cmake)
  57. include(${CMAKE_CURRENT_LIST_DIR}/FindWish.cmake)
  58. if(TCLSH_VERSION_STRING)
  59. set(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}")
  60. else()
  61. get_filename_component(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
  62. get_filename_component(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
  63. string(REGEX REPLACE
  64. "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
  65. endif()
  66. get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
  67. get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
  68. string(REGEX REPLACE
  69. "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
  70. get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
  71. get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
  72. get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
  73. get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
  74. string(REGEX REPLACE
  75. "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
  76. get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
  77. get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
  78. string(REGEX REPLACE
  79. "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
  80. set(TCLTK_POSSIBLE_LIB_PATHS
  81. "${TCL_INCLUDE_PATH_PARENT}/lib"
  82. "${TK_INCLUDE_PATH_PARENT}/lib"
  83. "${TCL_LIBRARY_PATH}"
  84. "${TK_LIBRARY_PATH}"
  85. "${TCL_TCLSH_PATH_PARENT}/lib"
  86. "${TK_WISH_PATH_PARENT}/lib"
  87. /usr/local/lib/tcl/tcl8.5
  88. /usr/local/lib/tcl/tk8.5
  89. /usr/local/lib/tcl/tcl8.4
  90. /usr/local/lib/tcl/tk8.4
  91. )
  92. if(WIN32)
  93. get_filename_component(
  94. ActiveTcl_CurrentVersion
  95. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
  96. NAME)
  97. set(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  98. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
  99. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
  100. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
  101. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
  102. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
  103. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
  104. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
  105. "$ENV{ProgramFiles}/Tcl/Lib"
  106. "C:/Program Files/Tcl/lib"
  107. "C:/Tcl/lib"
  108. )
  109. endif()
  110. find_library(TCL_LIBRARY
  111. NAMES
  112. tcl
  113. tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION}
  114. tcl86 tcl8.6
  115. tcl85 tcl8.5
  116. tcl84 tcl8.4
  117. tcl83 tcl8.3
  118. tcl82 tcl8.2
  119. tcl80 tcl8.0
  120. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  121. )
  122. find_library(TK_LIBRARY
  123. NAMES
  124. tk
  125. tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION}
  126. tk86 tk8.6
  127. tk85 tk8.5
  128. tk84 tk8.4
  129. tk83 tk8.3
  130. tk82 tk8.2
  131. tk80 tk8.0
  132. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  133. )
  134. CMAKE_FIND_FRAMEWORKS(Tcl)
  135. CMAKE_FIND_FRAMEWORKS(Tk)
  136. set(TCL_FRAMEWORK_INCLUDES)
  137. if(Tcl_FRAMEWORKS)
  138. if(NOT TCL_INCLUDE_PATH)
  139. foreach(dir ${Tcl_FRAMEWORKS})
  140. set(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers)
  141. endforeach()
  142. endif()
  143. endif()
  144. set(TK_FRAMEWORK_INCLUDES)
  145. if(Tk_FRAMEWORKS)
  146. if(NOT TK_INCLUDE_PATH)
  147. foreach(dir ${Tk_FRAMEWORKS})
  148. set(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES}
  149. ${dir}/Headers ${dir}/PrivateHeaders)
  150. endforeach()
  151. endif()
  152. endif()
  153. set(TCLTK_POSSIBLE_INCLUDE_PATHS
  154. "${TCL_LIBRARY_PATH_PARENT}/include"
  155. "${TK_LIBRARY_PATH_PARENT}/include"
  156. "${TCL_INCLUDE_PATH}"
  157. "${TK_INCLUDE_PATH}"
  158. ${TCL_FRAMEWORK_INCLUDES}
  159. ${TK_FRAMEWORK_INCLUDES}
  160. "${TCL_TCLSH_PATH_PARENT}/include"
  161. "${TK_WISH_PATH_PARENT}/include"
  162. /usr/include/tcl${TK_LIBRARY_VERSION}
  163. /usr/include/tcl${TCL_LIBRARY_VERSION}
  164. /usr/include/tcl8.6
  165. /usr/include/tcl8.5
  166. /usr/include/tcl8.4
  167. /usr/include/tcl8.3
  168. /usr/include/tcl8.2
  169. /usr/include/tcl8.0
  170. /usr/local/include/tcl8.6
  171. /usr/local/include/tk8.6
  172. /usr/local/include/tcl8.5
  173. /usr/local/include/tk8.5
  174. /usr/local/include/tcl8.4
  175. /usr/local/include/tk8.4
  176. )
  177. if(WIN32)
  178. set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  179. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include"
  180. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
  181. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include"
  182. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include"
  183. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include"
  184. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include"
  185. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include"
  186. "$ENV{ProgramFiles}/Tcl/include"
  187. "C:/Program Files/Tcl/include"
  188. "C:/Tcl/include"
  189. )
  190. endif()
  191. find_path(TCL_INCLUDE_PATH
  192. NAMES tcl.h
  193. HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  194. )
  195. find_path(TK_INCLUDE_PATH
  196. NAMES tk.h
  197. HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  198. )
  199. # handle the QUIETLY and REQUIRED arguments and set TCL_FOUND to TRUE if
  200. # all listed variables are TRUE
  201. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  202. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
  203. set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
  204. set(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
  205. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_INCLUDE_PATH)
  206. set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
  207. set(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
  208. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH)
  209. mark_as_advanced(
  210. TCL_INCLUDE_PATH
  211. TK_INCLUDE_PATH
  212. TCL_LIBRARY
  213. TK_LIBRARY
  214. )