3 if (NOT DEFINED INSTALL_TCL)
4 set (INSTALL_TCL OFF CACHE BOOL "Is tcl lib required to be copied into install directory")
8 if (NOT DEFINED 3RDPARTY_TCL_DIR)
9 set (3RDPARTY_TCL_DIR "" CACHE PATH "The directory containing tcl")
12 # tcl include directory
13 if (NOT DEFINED 3RDPARTY_TCL_INCLUDE_DIR)
14 set (3RDPARTY_TCL_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tcl")
17 # tk include directory
18 if (NOT DEFINED 3RDPARTY_TK_INCLUDE_DIR)
19 set (3RDPARTY_TK_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tk")
22 # tcl library file (with absolute path)
23 if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
24 set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library" FORCE)
27 # tcl library directory
28 if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
29 set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
32 # tk library file (with absolute path)
33 if (NOT DEFINED 3RDPARTY_TK_LIBRARY OR NOT 3RDPARTY_TK_LIBRARY_DIR)
34 set (3RDPARTY_TK_LIBRARY "" CACHE FILEPATH "tk library" FORCE)
37 # tk library directory
38 if (NOT DEFINED 3RDPARTY_TK_LIBRARY_DIR)
39 set (3RDPARTY_TK_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tk library")
42 # tcl shared library (with absolute path)
44 if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
45 set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
49 # tcl shared library directory
50 if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
51 set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
54 # tk shared library (with absolute path)
56 if (NOT DEFINED 3RDPARTY_TK_DLL OR NOT 3RDPARTY_TK_DLL_DIR)
57 set (3RDPARTY_TK_DLL "" CACHE FILEPATH "tk shared library" FORCE)
61 # tk shared library directory
62 if (WIN32 AND NOT DEFINED 3RDPARTY_TK_DLL_DIR)
63 set (3RDPARTY_TK_DLL_DIR "" CACHE FILEPATH "The directory containing tk shared library")
66 # search for tcl in user defined directory
67 if (NOT 3RDPARTY_TCL_DIR AND 3RDPARTY_DIR)
68 FIND_PRODUCT_DIR("${3RDPARTY_DIR}" tcl TCL_DIR_NAME)
70 set (3RDPARTY_TCL_DIR "${3RDPARTY_DIR}/${TCL_DIR_NAME}" CACHE PATH "The directory containing tcl" FORCE)
74 # define paths for default engine
75 if (3RDPARTY_TCL_DIR AND EXISTS "${3RDPARTY_TCL_DIR}")
76 set (TCL_INCLUDE_PATH "${3RDPARTY_TCL_DIR}/include")
79 # check tcl/tk include dir, library dir and shared library dir
80 macro (DIR_SUBDIR_FILE_FIT LIBNAME)
81 if (3RDPARTY_TCL_DIR AND EXISTS "${3RDPARTY_TCL_DIR}")
83 if (3RDPARTY_${LIBNAME}_INCLUDE_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_INCLUDE_DIR}")
84 string (REGEX MATCH "${3RDPARTY_TCL_DIR}" DOES_PATH_CONTAIN "${3RDPARTY_${LIBNAME}_INCLUDE_DIR}")
85 if (NOT DOES_PATH_CONTAIN)
86 set (3RDPARTY_${LIBNAME}_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of ${LIBNAME}" FORCE)
89 set (3RDPARTY_${LIBNAME}_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of ${LIBNAME}" FORCE)
93 if (3RDPARTY_${LIBNAME}_LIBRARY_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}")
95 string (REGEX MATCH "${3RDPARTY_TCL_DIR}" DOES_PATH_CONTAIN "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}")
96 if (NOT DOES_PATH_CONTAIN)
97 set (3RDPARTY_${LIBNAME}_LIBRARY_DIR "" CACHE FILEPATH "The directory containing ${LIBNAME} library" FORCE)
100 set (3RDPARTY_${LIBNAME}_LIBRARY_DIR "" CACHE FILEPATH "The directory containing ${LIBNAME} library" FORCE)
103 # tcl/tk shared library dir
105 if (3RDPARTY_${LIBNAME}_DLL_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_DLL_DIR}")
106 string (REGEX MATCH "${3RDPARTY_TCL_DIR}" DOES_PATH_CONTAIN "${3RDPARTY_${LIBNAME}_DLL_DIR}")
107 if (NOT DOES_PATH_CONTAIN)
108 set (3RDPARTY_${LIBNAME}_DLL_DIR "" CACHE FILEPATH "The directory containing ${LIBNAME} shared library" FORCE)
111 set (3RDPARTY_${LIBNAME}_DLL_DIR "" CACHE FILEPATH "The directory containing ${LIBNAME} shared library" FORCE)
116 # check tcl/tk library
117 if (3RDPARTY_${LIBNAME}_LIBRARY_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}")
118 if (3RDPARTY_${LIBNAME}_LIBRARY AND EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY}")
119 string (REGEX MATCH "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}" DOES_PATH_CONTAIN "${3RDPARTY_${LIBNAME}_LIBRARY}")
121 if (NOT DOES_PATH_CONTAIN)
122 set (3RDPARTY_${LIBNAME}_LIBRARY "" CACHE FILEPATH "${LIBNAME} library" FORCE)
125 set (3RDPARTY_${LIBNAME}_LIBRARY "" CACHE FILEPATH "${LIBNAME} library" FORCE)
128 set (3RDPARTY_${LIBNAME}_LIBRARY "" CACHE FILEPATH "${LIBNAME} library" FORCE)
131 # check tcl/tk shared library
133 if (3RDPARTY_${LIBNAME}_DLL_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_DLL_DIR}")
134 if (3RDPARTY_${LIBNAME}_DLL AND EXISTS "${3RDPARTY_${LIBNAME}_DLL}")
135 string (REGEX MATCH "${3RDPARTY_${LIBNAME}_DLL_DIR}" DOES_PATH_CONTAIN "${3RDPARTY_${LIBNAME}_DLL}")
137 if (NOT DOES_PATH_CONTAIN)
138 set (3RDPARTY_${LIBNAME}_DLL "" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
141 set (3RDPARTY_${LIBNAME}_DLL "" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
144 set (3RDPARTY_${LIBNAME}_DLL "" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
150 DIR_SUBDIR_FILE_FIT(TCL)
151 DIR_SUBDIR_FILE_FIT(TK)
154 # use default (CMake) TCL search
157 foreach (LIBNAME TCL TK)
158 string (TOLOWER "${LIBNAME}" LIBNAME_L)
161 if (NOT 3RDPARTY_${LIBNAME}_INCLUDE_DIR)
162 if (${LIBNAME}_INCLUDE_PATH AND EXISTS "${${LIBNAME}_INCLUDE_PATH}")
163 set (3RDPARTY_${LIBNAME}_INCLUDE_DIR "${${LIBNAME}_INCLUDE_PATH}" CACHE FILEPATH "The directory containing headers of ${LIBNAME}" FORCE)
167 # tcl/tk dir and library
168 if (NOT 3RDPARTY_${LIBNAME}_LIBRARY)
169 if (${LIBNAME}_LIBRARY AND EXISTS "${${LIBNAME}_LIBRARY}")
170 set (3RDPARTY_${LIBNAME}_LIBRARY "${${LIBNAME}_LIBRARY}" CACHE FILEPATH "${LIBNAME} library" FORCE)
172 if (NOT 3RDPARTY_${LIBNAME}_LIBRARY_DIR)
173 get_filename_component (3RDPARTY_${LIBNAME}_LIBRARY_DIR "${3RDPARTY_${LIBNAME}_LIBRARY}" PATH)
174 set (3RDPARTY_${LIBNAME}_LIBRARY_DIR "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}" CACHE FILEPATH "The directory containing ${LIBNAME} library" FORCE)
181 if (NOT 3RDPARTY_${LIBNAME}_DLL)
182 set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
184 set (DLL_FOLDER_FOR_SEARCH "")
185 if (3RDPARTY_${LIBNAME}_DLL_DIR)
186 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_${LIBNAME}_DLL_DIR}")
187 elseif (3RDPARTY_TCL_DIR)
188 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
189 elseif (3RDPARTY_${LIBNAME}_LIBRARY_DIR)
190 get_filename_component (3RDPARTY_${LIBNAME}_LIBRARY_DIR_PARENT "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}" PATH)
191 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_${LIBNAME}_LIBRARY_DIR_PARENT}/bin")
194 set (3RDPARTY_${LIBNAME}_DLL "3RDPARTY_${LIBNAME}_DLL-NOTFOUND" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
195 find_library (3RDPARTY_${LIBNAME}_DLL NAMES ${LIBNAME_L}86 ${LIBNAME_L}85
196 PATHS "${DLL_FOLDER_FOR_SEARCH}"
201 DIR_SUBDIR_FILE_FIT(${LIBNAME})
204 # tcl/tk dir and library
205 if (NOT 3RDPARTY_${LIBNAME}_LIBRARY)
206 set (3RDPARTY_${LIBNAME}_LIBRARY "3RDPARTY_${LIBNAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "${LIBNAME} library" FORCE)
207 find_library (3RDPARTY_${LIBNAME}_LIBRARY NAMES ${LIBNAME_L}8.6 ${LIBNAME_L}86 ${LIBNAME_L}8.5 ${LIBNAME_L}85
208 PATHS "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}"
211 # search in another place if previous search doesn't find anything
212 find_library (3RDPARTY_${LIBNAME}_LIBRARY NAMES ${LIBNAME_L}8.6 ${LIBNAME_L}86 ${LIBNAME_L}8.5 ${LIBNAME_L}85
213 PATHS "${3RDPARTY_TCL_DIR}/lib"
217 if (NOT 3RDPARTY_${LIBNAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY}")
218 set (3RDPARTY_${LIBNAME}_LIBRARY "" CACHE FILEPATH "${LIBNAME} library" FORCE)
221 if (NOT 3RDPARTY_${LIBNAME}_LIBRARY_DIR AND 3RDPARTY_${LIBNAME}_LIBRARY)
222 get_filename_component (3RDPARTY_${LIBNAME}_LIBRARY_DIR "${3RDPARTY_${LIBNAME}_LIBRARY}" PATH)
223 set (3RDPARTY_${LIBNAME}_LIBRARY_DIR "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}" CACHE FILEPATH "The directory containing ${LIBNAME} library" FORCE)
227 set (3RDPARTY_${LIBNAME}_LIBRARY_VERSION "")
228 if (3RDPARTY_${LIBNAME}_LIBRARY AND EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY}")
229 get_filename_component (${LIBNAME}_LIBRARY_NAME "${3RDPARTY_${LIBNAME}_LIBRARY}" NAME)
230 string(REGEX REPLACE "^.*${LIBNAME_L}([0-9]\\.*[0-9]).*$" "\\1" ${LIBNAME}_LIBRARY_VERSION "${${LIBNAME}_LIBRARY_NAME}")
232 if (NOT "${${LIBNAME}_LIBRARY_VERSION}" STREQUAL "${${LIBNAME}_LIBRARY_NAME}")
233 set (3RDPARTY_${LIBNAME}_LIBRARY_VERSION "${${LIBNAME}_LIBRARY_VERSION}")
234 else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
235 message (STATUS "Info: ${LIBNAME} version isn't found")
239 set (3RDPARTY_${LIBNAME}_LIBRARY_VERSION_WITH_DOT "")
240 if (3RDPARTY_${LIBNAME}_LIBRARY_VERSION)
241 string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_${LIBNAME}_MAJOR_VERSION "${3RDPARTY_${LIBNAME}_LIBRARY_VERSION}")
242 string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_${LIBNAME}_MINOR_VERSION "${3RDPARTY_${LIBNAME}_LIBRARY_VERSION}")
243 set (3RDPARTY_${LIBNAME}_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_${LIBNAME}_MAJOR_VERSION}.${3RDPARTY_${LIBNAME}_MINOR_VERSION}")
247 if (NOT 3RDPARTY_${LIBNAME}_DLL)
248 set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
250 set (DLL_FOLDER_FOR_SEARCH "")
251 if (3RDPARTY_${LIBNAME}_DLL_DIR)
252 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_${LIBNAME}_DLL_DIR}")
253 elseif (3RDPARTY_TCL_DIR)
254 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
256 get_filename_component (3RDPARTY_${LIBNAME}_LIBRARY_DIR_PARENT "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}" PATH)
257 set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_${LIBNAME}_LIBRARY_DIR_PARENT}/bin")
260 set (3RDPARTY_${LIBNAME}_DLL "3RDPARTY_${LIBNAME}_DLL-NOTFOUND" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
261 find_library (3RDPARTY_${LIBNAME}_DLL NAMES ${LIBNAME_L}${3RDPARTY_${LIBNAME}_LIBRARY_VERSION}
262 PATHS "${DLL_FOLDER_FOR_SEARCH}"
265 if (NOT 3RDPARTY_${LIBNAME}_DLL OR NOT EXISTS "${3RDPARTY_${LIBNAME}_DLL}")
266 set (3RDPARTY_${LIBNAME}_DLL "" CACHE FILEPATH "${LIBNAME} shared library" FORCE)
269 if (NOT 3RDPARTY_${LIBNAME}_DLL_DIR AND 3RDPARTY_${LIBNAME}_DLL)
270 get_filename_component (3RDPARTY_${LIBNAME}_DLL_DIR "${3RDPARTY_${LIBNAME}_DLL}" PATH)
271 set (3RDPARTY_${LIBNAME}_DLL_DIR "${3RDPARTY_${LIBNAME}_DLL_DIR}" CACHE FILEPATH "The directory containing ${LIBNAME} shared library" FORCE)
276 # include found paths to common variables
277 if (3RDPARTY_${LIBNAME}_INCLUDE_DIR AND EXISTS "${3RDPARTY_${LIBNAME}_INCLUDE_DIR}")
278 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_${LIBNAME}_INCLUDE_DIR}")
280 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${LIBNAME}_INCLUDE_DIR)
283 if (3RDPARTY_${LIBNAME}_LIBRARY AND EXISTS "${3RDPARTY_${LIBNAME}_LIBRARY}")
284 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIBNAME}_LIBRARY_DIR}")
286 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${LIBNAME}_LIBRARY_DIR})
290 if (3RDPARTY_${LIBNAME}_DLL OR EXISTS "${3RDPARTY_${LIBNAME}_DLL}")
291 list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_${LIBNAME}_DLL_DIR}")
293 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${LIBNAME}_DLL_DIR)
300 # include occt macros. compiler_bitness, os_wiht_bit, compiler
301 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
303 OCCT_MAKE_OS_WITH_BITNESS()
304 OCCT_MAKE_COMPILER_SHORT_NAME()
307 # tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
309 # collect and install all dlls from tcl/tk dll dirs
310 file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
311 file (GLOB TK_DLLS "${3RDPARTY_TK_DLL_DIR}/*.dll")
312 install (FILES ${TCL_DLLS} ${TK_DLLS}
313 CONFIGURATIONS Release
314 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
315 install (FILES ${TCL_DLLS} ${TK_DLLS}
316 CONFIGURATIONS RelWithDebInfo
317 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
318 install (FILES ${TCL_DLLS} ${TK_DLLS}
320 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
322 get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
323 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
324 CONFIGURATIONS Release
325 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
326 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
327 CONFIGURATIONS RelWithDebInfo
328 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
329 install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
331 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
333 get_filename_component(3RDPARTY_TK_LIBRARY_REALPATH ${3RDPARTY_TK_LIBRARY} REALPATH)
334 install (FILES ${3RDPARTY_TK_LIBRARY_REALPATH}
335 CONFIGURATIONS Release
336 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
337 install (FILES ${3RDPARTY_TK_LIBRARY_REALPATH}
338 CONFIGURATIONS RelWithDebInfo
339 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
340 install (FILES ${3RDPARTY_TK_LIBRARY_REALPATH}
342 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
345 if (TCL_TCLSH_VERSION)
346 # tcl is required to install in lib folder (without)
347 install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
348 install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
349 install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tk${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
351 message (STATUS "\nWarning: tclX.X and tkX.X subdirs won't be copyied during the installation process.")
352 message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
355 set (USED_3RDPARTY_TCL_DIR "")
357 # the library directory for using by the executable
359 set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
361 set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
365 mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TK_LIBRARY 3RDPARTY_TCL_DLL 3RDPARTY_TK_DLL)
367 # unset all redundant variables
369 OCCT_CHECK_AND_UNSET (TCL_LIBRARY)
370 OCCT_CHECK_AND_UNSET (TCL_INCLUDE_PATH)
371 OCCT_CHECK_AND_UNSET (TCL_TCLSH)
373 OCCT_CHECK_AND_UNSET (TK_LIBRARY)
374 OCCT_CHECK_AND_UNSET (TK_INCLUDE_PATH)
375 OCCT_CHECK_AND_UNSET (TK_WISH)