0032315: Configuration, CMake - fix building Draw Harness plugins as static libraries
[occt.git] / adm / cmake / tcl.cmake
CommitLineData
9f33b387 1# tcl
ad211ad3 2
a34bddcf 3if (NOT DEFINED INSTALL_TCL)
316d77d9 4 set (INSTALL_TCL OFF CACHE BOOL "${INSTALL_TCL_DESCR}")
9f33b387 5endif()
ad211ad3 6
9f33b387 7# tcl directory
8if (NOT DEFINED 3RDPARTY_TCL_DIR)
9 set (3RDPARTY_TCL_DIR "" CACHE PATH "The directory containing tcl")
10endif()
ad211ad3 11
9f33b387 12# tcl include directory
13if (NOT DEFINED 3RDPARTY_TCL_INCLUDE_DIR)
14 set (3RDPARTY_TCL_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tcl")
15endif()
ad211ad3 16
9f33b387 17
a34bddcf 18# tcl library file (with absolute path)
19if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
20 set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library" FORCE)
21endif()
9f33b387 22
a34bddcf 23# tcl library directory
24if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
25 set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
26endif()
9f33b387 27
a34bddcf 28# tcl shared library (with absolute path)
29if (WIN32)
30 if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
31 set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
3321f684 32 endif()
9f33b387 33endif()
34
a34bddcf 35# tcl shared library directory
36if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
37 set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
38endif()
39
40
9f33b387 41# search for tcl in user defined directory
42if (NOT 3RDPARTY_TCL_DIR AND 3RDPARTY_DIR)
ad211ad3 43 FIND_PRODUCT_DIR("${3RDPARTY_DIR}" tcl TCL_DIR_NAME)
9f33b387 44 if (TCL_DIR_NAME)
45 set (3RDPARTY_TCL_DIR "${3RDPARTY_DIR}/${TCL_DIR_NAME}" CACHE PATH "The directory containing tcl" FORCE)
46 endif()
47endif()
ad211ad3 48
9f33b387 49# define paths for default engine
50if (3RDPARTY_TCL_DIR AND EXISTS "${3RDPARTY_TCL_DIR}")
51 set (TCL_INCLUDE_PATH "${3RDPARTY_TCL_DIR}/include")
52endif()
53
82f443b6 54# check tcl include dir, library dir and shared library dir
55COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
19286d7c 56
82f443b6 57# use default (CMake) TCL search
a3d2cb24 58find_package(TCL QUIET)
9f33b387 59
82f443b6 60# tcl include dir
61if (NOT 3RDPARTY_TCL_INCLUDE_DIR)
62 if (TCL_INCLUDE_PATH AND EXISTS "${TCL_INCLUDE_PATH}")
63 set (3RDPARTY_TCL_INCLUDE_DIR "${TCL_INCLUDE_PATH}" CACHE FILEPATH "The directory containing headers of TCL" FORCE)
9f33b387 64 endif()
82f443b6 65endif()
9f33b387 66
a34bddcf 67# tcl dir and library
68if (NOT 3RDPARTY_TCL_LIBRARY)
69 if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
70 set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
9f33b387 71
a34bddcf 72 if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
73 get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
74 set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
9f33b387 75 endif()
9f33b387 76 endif()
a34bddcf 77endif()
9f33b387 78
a34bddcf 79if (WIN32)
80 if (NOT 3RDPARTY_TCL_DLL)
81 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
82
83 set (DLL_FOLDER_FOR_SEARCH "")
84 if (3RDPARTY_TCL_DLL_DIR)
85 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
86 elseif (3RDPARTY_TCL_DIR)
87 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
88 elseif (3RDPARTY_TCL_LIBRARY_DIR)
89 get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
90 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
9f33b387 91 endif()
a34bddcf 92
93 set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
94 find_library (3RDPARTY_TCL_DLL NAMES ${CSF_TclLibs}
95 PATHS "${DLL_FOLDER_FOR_SEARCH}"
96 NO_DEFAULT_PATH)
82f443b6 97 endif()
98endif()
9f33b387 99
82f443b6 100COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
9f33b387 101
a34bddcf 102# tcl dir and library
103if (NOT 3RDPARTY_TCL_LIBRARY)
104 set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
105 find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
106 PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
107 NO_DEFAULT_PATH)
9f33b387 108
a34bddcf 109 # search in another place if previous search doesn't find anything
110 find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
111 PATHS "${3RDPARTY_TCL_DIR}/lib"
112 NO_DEFAULT_PATH)
9f33b387 113
a34bddcf 114 if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
115 set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
116 endif()
9f33b387 117
a34bddcf 118 if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
119 get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
120 set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
9f33b387 121 endif()
a34bddcf 122endif()
19286d7c 123
a34bddcf 124set (3RDPARTY_TCL_LIBRARY_VERSION "")
125if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
126 get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
127 string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
9f33b387 128
a34bddcf 129 if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
130 set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
131 else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
132 message (STATUS "Info: TCL version isn't found")
9f33b387 133 endif()
a34bddcf 134endif()
9f33b387 135
a34bddcf 136set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
137if (3RDPARTY_TCL_LIBRARY_VERSION)
138 string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
139 string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
140 set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
141endif()
19286d7c 142
a34bddcf 143if (WIN32)
144 if (NOT 3RDPARTY_TCL_DLL)
145 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
82f443b6 146
a34bddcf 147 set (DLL_FOLDER_FOR_SEARCH "")
148 if (3RDPARTY_TCL_DLL_DIR)
149 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
150 elseif (3RDPARTY_TCL_DIR)
151 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
152 else()
153 get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
154 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
9f33b387 155 endif()
a34bddcf 156
157 set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
158 find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
159 PATHS "${DLL_FOLDER_FOR_SEARCH}"
160 NO_DEFAULT_PATH)
161
162 if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
163 set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
9f33b387 164 endif()
165 endif()
a34bddcf 166 if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
167 get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
168 set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
9f33b387 169 endif()
a34bddcf 170endif()
171
172# include found paths to common variables
173if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
174 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
175else()
176 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
177endif()
9f33b387 178
a34bddcf 179if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
180 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
181else()
182 list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
183endif()
184
185if (WIN32)
186 if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
187 list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
3321f684 188 else()
a34bddcf 189 list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_TCL_DLL_DIR)
3321f684 190 endif()
a34bddcf 191endif()
192
193# install tcl
194if (INSTALL_TCL)
195 # include occt macros. compiler_bitness, os_wiht_bit, compiler
196 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
197
198 OCCT_MAKE_OS_WITH_BITNESS()
199 OCCT_MAKE_COMPILER_SHORT_NAME()
9f33b387 200
201 if (WIN32)
a34bddcf 202 # tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
096ef695 203
a34bddcf 204 # collect and install all dlls from tcl dll dirs
205 file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
206
207 if (SINGLE_GENERATOR)
208 install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR_BIN}")
096ef695 209 else()
a34bddcf 210 install (FILES ${TCL_DLLS}
211 CONFIGURATIONS Release
212 DESTINATION "${INSTALL_DIR_BIN}")
213 install (FILES ${TCL_DLLS}
214 CONFIGURATIONS RelWithDebInfo
215 DESTINATION "${INSTALL_DIR_BIN}i")
216 install (FILES ${TCL_DLLS}
217 CONFIGURATIONS Debug
218 DESTINATION "${INSTALL_DIR_BIN}d")
096ef695 219 endif()
a34bddcf 220 else()
221 get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
096ef695 222
a34bddcf 223 if (SINGLE_GENERATOR)
224 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR_LIB}")
096ef695 225 else()
a34bddcf 226 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
227 CONFIGURATIONS Release
228 DESTINATION "${INSTALL_DIR_LIB}")
229 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
230 CONFIGURATIONS RelWithDebInfo
231 DESTINATION "${INSTALL_DIR_LIB}i")
232 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
233 CONFIGURATIONS Debug
234 DESTINATION "${INSTALL_DIR_LIB}d")
096ef695 235 endif()
a34bddcf 236 endif()
9f33b387 237
a34bddcf 238 if (TCL_TCLSH_VERSION)
239 # tcl is required to install in lib folder (without)
240 install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8" DESTINATION "${INSTALL_DIR_LIB}")
241 install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR_LIB}")
9f33b387 242 else()
a34bddcf 243 message (STATUS "\nWarning: tclX.X subdir won't be copied during the installation process.")
244 message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
9f33b387 245 endif()
0a66e59d 246
a34bddcf 247 set (USED_3RDPARTY_TCL_DIR "")
248else()
249 # the library directory for using by the executable
250 if (WIN32)
251 set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
252 else()
253 set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
254 endif()
9f33b387 255endif()
256
a34bddcf 257mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
258
82f443b6 259if (TK_FOUND AND 3RDPARTY_TCL_DIR)
d3ff0ff2 260
261 get_filename_component (TK_WISH_ABSOLUTE "${TK_WISH}" ABSOLUTE)
262 get_filename_component (3RDPARTY_TCL_DIR_ABSOLUTE "${3RDPARTY_TCL_DIR}" ABSOLUTE)
263
264 string (FIND "${TK_WISH_ABSOLUTE}" "${3RDPARTY_TCL_DIR_ABSOLUTE}" THE_SAME_FOLDER)
265
266 if (${THE_SAME_FOLDER} EQUAL 0)
82f443b6 267 set (3RDPARTY_TCLTK_DIR "${3RDPARTY_TCL_DIR}")
a6874708 268 message (STATUS "Info: TK is used from TCL folder: ${3RDPARTY_TCLTK_DIR}")
82f443b6 269 endif()
270endif()
9f33b387 271
272# unset all redundant variables
273#TCL
274OCCT_CHECK_AND_UNSET (TCL_LIBRARY)
275OCCT_CHECK_AND_UNSET (TCL_INCLUDE_PATH)
276OCCT_CHECK_AND_UNSET (TCL_TCLSH)
277#TK
278OCCT_CHECK_AND_UNSET (TK_LIBRARY)
279OCCT_CHECK_AND_UNSET (TK_INCLUDE_PATH)
280OCCT_CHECK_AND_UNSET (TK_WISH)
3321f684 281