Imported Upstream version 3.12.1
[platform/upstream/cmake.git] / Modules / FindTclsh.cmake
1 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
3
4 #.rst:
5 # FindTclsh
6 # ---------
7 #
8 # Find tclsh
9 #
10 # This module finds if TCL is installed and determines where the include
11 # files and libraries are.  It also determines what the name of the
12 # library is.  This code sets the following variables:
13 #
14 # ::
15 #
16 #   TCLSH_FOUND = TRUE if tclsh has been found
17 #   TCL_TCLSH = the path to the tclsh executable
18 #
19 # In cygwin, look for the cygwin version first.  Don't look for it later
20 # to avoid finding the cygwin version on a Win32 build.
21
22 if(CYGWIN)
23   find_program(TCL_TCLSH NAMES cygtclsh83 cygtclsh80)
24 endif()
25
26 get_filename_component(TK_WISH_PATH "${TK_WISH}" PATH)
27 get_filename_component(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
28 string(REGEX REPLACE
29   "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}")
30
31 get_filename_component(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
32 get_filename_component(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
33
34 get_filename_component(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
35 get_filename_component(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
36 string(REGEX REPLACE
37   "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}")
38
39 get_filename_component(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
40 get_filename_component(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
41 string(REGEX REPLACE
42   "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}")
43
44 set(TCLTK_POSSIBLE_BIN_PATHS
45   "${TCL_INCLUDE_PATH_PARENT}/bin"
46   "${TK_INCLUDE_PATH_PARENT}/bin"
47   "${TCL_LIBRARY_PATH_PARENT}/bin"
48   "${TK_LIBRARY_PATH_PARENT}/bin"
49   "${TK_WISH_PATH_PARENT}/bin"
50   )
51
52 if(WIN32)
53   get_filename_component(
54     ActiveTcl_CurrentVersion
55     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
56     NAME)
57   set(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS}
58     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin"
59     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin"
60     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin"
61     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin"
62     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin"
63     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin"
64     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin"
65     )
66 endif()
67
68 set(TCL_TCLSH_NAMES
69   tclsh
70   tclsh${TCL_LIBRARY_VERSION} tclsh${TK_LIBRARY_VERSION} tclsh${TK_WISH_VERSION}
71   tclsh87 tclsh8.7
72   tclsh86 tclsh8.6
73   tclsh85 tclsh8.5
74   tclsh84 tclsh8.4
75   tclsh83 tclsh8.3
76   tclsh82 tclsh8.2
77   tclsh80 tclsh8.0
78   )
79
80 find_program(TCL_TCLSH
81   NAMES ${TCL_TCLSH_NAMES}
82   HINTS ${TCLTK_POSSIBLE_BIN_PATHS}
83   )
84
85 if(TCL_TCLSH)
86    execute_process(COMMAND "${CMAKE_COMMAND}" -E echo puts "\$tcl_version"
87                    COMMAND "${TCL_TCLSH}"
88                    OUTPUT_VARIABLE TCLSH_VERSION_STRING
89                    ERROR_QUIET
90                    OUTPUT_STRIP_TRAILING_WHITESPACE)
91 endif()
92
93 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
94 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tclsh
95                                   REQUIRED_VARS TCL_TCLSH
96                                   VERSION_VAR TCLSH_VERSION_STRING)
97
98 mark_as_advanced(TCL_TCLSH)