FindTCL.cmake 7.7 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. GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
  49. GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
  50. STRING(REGEX REPLACE
  51. "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
  52. GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH)
  53. GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
  54. STRING(REGEX REPLACE
  55. "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
  56. GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
  57. GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
  58. GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
  59. GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
  60. STRING(REGEX REPLACE
  61. "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
  62. GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
  63. GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
  64. STRING(REGEX REPLACE
  65. "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
  66. SET(TCLTK_POSSIBLE_LIB_PATHS
  67. "${TCL_INCLUDE_PATH_PARENT}/lib"
  68. "${TK_INCLUDE_PATH_PARENT}/lib"
  69. "${TCL_LIBRARY_PATH}"
  70. "${TK_LIBRARY_PATH}"
  71. "${TCL_TCLSH_PATH_PARENT}/lib"
  72. "${TK_WISH_PATH_PARENT}/lib"
  73. /usr/lib
  74. /usr/local/lib
  75. )
  76. IF(WIN32)
  77. GET_FILENAME_COMPONENT(
  78. ActiveTcl_CurrentVersion
  79. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
  80. NAME)
  81. SET(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  82. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
  83. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
  84. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
  85. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
  86. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
  87. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
  88. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
  89. "$ENV{ProgramFiles}/Tcl/Lib"
  90. "C:/Program Files/Tcl/lib"
  91. "C:/Tcl/lib"
  92. )
  93. ENDIF(WIN32)
  94. FIND_LIBRARY(TCL_LIBRARY
  95. NAMES
  96. tcl
  97. tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION}
  98. tcl86 tcl8.6
  99. tcl85 tcl8.5
  100. tcl84 tcl8.4
  101. tcl83 tcl8.3
  102. tcl82 tcl8.2
  103. tcl80 tcl8.0
  104. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  105. )
  106. FIND_LIBRARY(TK_LIBRARY
  107. NAMES
  108. tk
  109. tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION}
  110. tk86 tk8.6
  111. tk85 tk8.5
  112. tk84 tk8.4
  113. tk83 tk8.3
  114. tk82 tk8.2
  115. tk80 tk8.0
  116. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  117. )
  118. CMAKE_FIND_FRAMEWORKS(Tcl)
  119. CMAKE_FIND_FRAMEWORKS(Tk)
  120. SET(TCL_FRAMEWORK_INCLUDES)
  121. IF(Tcl_FRAMEWORKS)
  122. IF(NOT TCL_INCLUDE_PATH)
  123. FOREACH(dir ${Tcl_FRAMEWORKS})
  124. SET(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers)
  125. ENDFOREACH(dir)
  126. ENDIF(NOT TCL_INCLUDE_PATH)
  127. ENDIF(Tcl_FRAMEWORKS)
  128. SET(TK_FRAMEWORK_INCLUDES)
  129. IF(Tk_FRAMEWORKS)
  130. IF(NOT TK_INCLUDE_PATH)
  131. FOREACH(dir ${Tk_FRAMEWORKS})
  132. SET(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES}
  133. ${dir}/Headers ${dir}/PrivateHeaders)
  134. ENDFOREACH(dir)
  135. ENDIF(NOT TK_INCLUDE_PATH)
  136. ENDIF(Tk_FRAMEWORKS)
  137. SET(TCLTK_POSSIBLE_INCLUDE_PATHS
  138. "${TCL_LIBRARY_PATH_PARENT}/include"
  139. "${TK_LIBRARY_PATH_PARENT}/include"
  140. "${TCL_INCLUDE_PATH}"
  141. "${TK_INCLUDE_PATH}"
  142. ${TCL_FRAMEWORK_INCLUDES}
  143. ${TK_FRAMEWORK_INCLUDES}
  144. "${TCL_TCLSH_PATH_PARENT}/include"
  145. "${TK_WISH_PATH_PARENT}/include"
  146. /usr/include
  147. /usr/local/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(WIN32)
  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. )