FindTCL.cmake 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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. INCLUDE(CMakeFindFrameworks)
  34. INCLUDE(FindTclsh)
  35. INCLUDE(FindWish)
  36. GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
  37. GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
  38. STRING(REGEX REPLACE
  39. "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
  40. GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH)
  41. GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
  42. STRING(REGEX REPLACE
  43. "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
  44. GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
  45. GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
  46. GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
  47. GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
  48. STRING(REGEX REPLACE
  49. "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
  50. GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
  51. GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
  52. STRING(REGEX REPLACE
  53. "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
  54. SET(TCLTK_POSSIBLE_LIB_PATHS
  55. "${TCL_INCLUDE_PATH_PARENT}/lib"
  56. "${TK_INCLUDE_PATH_PARENT}/lib"
  57. "${TCL_LIBRARY_PATH}"
  58. "${TK_LIBRARY_PATH}"
  59. "${TCL_TCLSH_PATH_PARENT}/lib"
  60. "${TK_WISH_PATH_PARENT}/lib"
  61. /usr/lib
  62. /usr/local/lib
  63. )
  64. IF(WIN32)
  65. GET_FILENAME_COMPONENT(
  66. ActiveTcl_CurrentVersion
  67. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
  68. NAME)
  69. SET(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  70. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
  71. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
  72. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
  73. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
  74. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
  75. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
  76. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
  77. "$ENV{ProgramFiles}/Tcl/Lib"
  78. "C:/Program Files/Tcl/lib"
  79. "C:/Tcl/lib"
  80. )
  81. ENDIF(WIN32)
  82. FIND_LIBRARY(TCL_LIBRARY
  83. NAMES
  84. tcl
  85. tcl${TK_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION}
  86. tcl86 tcl8.6
  87. tcl85 tcl8.5
  88. tcl84 tcl8.4
  89. tcl83 tcl8.3
  90. tcl82 tcl8.2
  91. tcl80 tcl8.0
  92. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  93. )
  94. FIND_LIBRARY(TK_LIBRARY
  95. NAMES
  96. tk
  97. tk${TCL_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION}
  98. tk86 tk8.6
  99. tk85 tk8.5
  100. tk84 tk8.4
  101. tk83 tk8.3
  102. tk82 tk8.2
  103. tk80 tk8.0
  104. PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
  105. )
  106. CMAKE_FIND_FRAMEWORKS(Tcl)
  107. CMAKE_FIND_FRAMEWORKS(Tk)
  108. SET(TCL_FRAMEWORK_INCLUDES)
  109. IF(Tcl_FRAMEWORKS)
  110. IF(NOT TCL_INCLUDE_PATH)
  111. FOREACH(dir ${Tcl_FRAMEWORKS})
  112. SET(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers)
  113. ENDFOREACH(dir)
  114. ENDIF(NOT TCL_INCLUDE_PATH)
  115. ENDIF(Tcl_FRAMEWORKS)
  116. SET(TK_FRAMEWORK_INCLUDES)
  117. IF(Tk_FRAMEWORKS)
  118. IF(NOT TK_INCLUDE_PATH)
  119. FOREACH(dir ${Tk_FRAMEWORKS})
  120. SET(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES}
  121. ${dir}/Headers ${dir}/PrivateHeaders)
  122. ENDFOREACH(dir)
  123. ENDIF(NOT TK_INCLUDE_PATH)
  124. ENDIF(Tk_FRAMEWORKS)
  125. SET(TCLTK_POSSIBLE_INCLUDE_PATHS
  126. "${TCL_LIBRARY_PATH_PARENT}/include"
  127. "${TK_LIBRARY_PATH_PARENT}/include"
  128. "${TCL_INCLUDE_PATH}"
  129. "${TK_INCLUDE_PATH}"
  130. ${TCL_FRAMEWORK_INCLUDES}
  131. ${TK_FRAMEWORK_INCLUDES}
  132. "${TCL_TCLSH_PATH_PARENT}/include"
  133. "${TK_WISH_PATH_PARENT}/include"
  134. /usr/include
  135. /usr/local/include
  136. /usr/include/tcl${TK_LIBRARY_VERSION}
  137. /usr/include/tcl${TCL_LIBRARY_VERSION}
  138. /usr/include/tcl8.6
  139. /usr/include/tcl8.5
  140. /usr/include/tcl8.4
  141. /usr/include/tcl8.3
  142. /usr/include/tcl8.2
  143. /usr/include/tcl8.0
  144. )
  145. IF(WIN32)
  146. SET(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  147. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include"
  148. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
  149. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include"
  150. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include"
  151. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include"
  152. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include"
  153. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include"
  154. "$ENV{ProgramFiles}/Tcl/include"
  155. "C:/Program Files/Tcl/include"
  156. "C:/Tcl/include"
  157. )
  158. ENDIF(WIN32)
  159. FIND_PATH(TCL_INCLUDE_PATH
  160. NAMES tcl.h
  161. PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  162. NO_DEFAULT_PATH
  163. )
  164. FIND_PATH(TCL_INCLUDE_PATH
  165. NAMES tcl.h
  166. PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  167. )
  168. FIND_PATH(TK_INCLUDE_PATH
  169. NAMES tk.h
  170. PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  171. NO_DEFAULT_PATH
  172. )
  173. FIND_PATH(TK_INCLUDE_PATH
  174. NAMES tk.h
  175. PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
  176. )
  177. # handle the QUIETLY and REQUIRED arguments and set TCL_FOUND to TRUE if
  178. # all listed variables are TRUE
  179. INCLUDE(FindPackageHandleStandardArgs)
  180. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
  181. SET(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
  182. SET(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
  183. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_INCLUDE_PATH)
  184. SET(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
  185. SET(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
  186. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH)
  187. MARK_AS_ADVANCED(
  188. TCL_INCLUDE_PATH
  189. TK_INCLUDE_PATH
  190. TCL_LIBRARY
  191. TK_LIBRARY
  192. )