FindTclsh.cmake 3.25 KB
Newer Older
1
2
3
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#.rst:
# FindTclsh
# ---------
#
# Find tclsh
#
# This module finds if TCL is installed and determines where the include
# files and libraries are.  It also determines what the name of the
# library is.  This code sets the following variables:
#
# ::
#
#   TCLSH_FOUND = TRUE if tclsh has been found
#   TCL_TCLSH = the path to the tclsh executable
#
# In cygwin, look for the cygwin version first.  Don't look for it later
# to avoid finding the cygwin version on a Win32 build.
Alexander Neundorf's avatar
   
Alexander Neundorf committed
21

22
23
if(CYGWIN)
  find_program(TCL_TCLSH NAMES cygtclsh83 cygtclsh80)
24
endif()
Ken Martin's avatar
Ken Martin committed
25

26
27
28
get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
string(REGEX REPLACE
Sebastien Barre's avatar
Sebastien Barre committed
29
  "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
30

31
32
get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
33

34
35
36
get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
string(REGEX REPLACE
Sebastien Barre's avatar
Sebastien Barre committed
37
  "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
38

39
40
41
get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
string(REGEX REPLACE
Sebastien Barre's avatar
Sebastien Barre committed
42
  "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
43

44
set(TCLTK_POSSIBLE_BIN_PATHS
45
46
47
48
  "${TCL_INCLUDE_PATH_PARENT}/bin"
  "${TK_INCLUDE_PATH_PARENT}/bin"
  "${TCL_LIBRARY_PATH_PARENT}/bin"
  "${TK_LIBRARY_PATH_PARENT}/bin"
Sebastien Barre's avatar
Sebastien Barre committed
49
  "${TK_WISH_PATH_PARENT}/bin"
Sebastien Barre's avatar
Sebastien Barre committed
50
51
  )

52
53
if(WIN32)
  get_filename_component(
54
55
    ActiveTcl_CurrentVersion
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
Sebastien Barre's avatar
Sebastien Barre committed
56
    NAME)
57
  set(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS}
Sebastien Barre's avatar
Sebastien Barre committed
58
59
60
61
62
63
64
65
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin"
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin"
    )
66
endif()
67

68
set(TCL_TCLSH_NAMES
Sebastien Barre's avatar
Sebastien Barre committed
69
  tclsh
Sebastien Barre's avatar
Sebastien Barre committed
70
  tclsh${TCL_LIBRARY_VERSION} tclsh${TK_LIBRARY_VERSION} tclsh${TK_WISH_VERSION}
71
  tclsh87 tclsh8.7
Sebastien Barre's avatar
Sebastien Barre committed
72
73
74
75
76
77
  tclsh86 tclsh8.6
  tclsh85 tclsh8.5
  tclsh84 tclsh8.4
  tclsh83 tclsh8.3
  tclsh82 tclsh8.2
  tclsh80 tclsh8.0
Sebastien Barre's avatar
Sebastien Barre committed
78
  )
Sebastien Barre's avatar
Sebastien Barre committed
79

80
find_program(TCL_TCLSH
Sebastien Barre's avatar
Sebastien Barre committed
81
  NAMES ${TCL_TCLSH_NAMES}
82
  HINTS ${TCLTK_POSSIBLE_BIN_PATHS}
Sebastien Barre's avatar
Sebastien Barre committed
83
  )
Sebastien Barre's avatar
Sebastien Barre committed
84

85
86
if(TCL_TCLSH)
   execute_process(COMMAND "${CMAKE_COMMAND}" -E echo puts "\$tcl_version"
87
88
89
90
                   COMMAND "${TCL_TCLSH}"
                   OUTPUT_VARIABLE TCLSH_VERSION_STRING
                   ERROR_QUIET
                   OUTPUT_STRIP_TRAILING_WHITESPACE)
91
endif()
92

93
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
94
95
96
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tclsh
                                  REQUIRED_VARS TCL_TCLSH
                                  VERSION_VAR TCLSH_VERSION_STRING)
Alexander Neundorf's avatar
   
Alexander Neundorf committed
97

98
mark_as_advanced(TCL_TCLSH)