FindTCL.cmake 7.6 KB

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