0024924: ShapeFix_SplitTool doesn't verify the new range after cutting an edge
[occt.git] / CMakeLists.txt
... / ...
CommitLineData
1cmake_minimum_required ( VERSION 2.6)
2
3if (NOT BUILD_CONFIGURATION)
4 set(BUILD_CONFIGURATION "Release" CACHE STRING "Build type of OCCT" FORCE)
5 SET_PROPERTY(CACHE BUILD_CONFIGURATION PROPERTY STRINGS Release Debug RelWithDebInfo)
6endif()
7
8set(CMAKE_CONFIGURATION_TYPES ${BUILD_CONFIGURATION} CACHE INTERNAL "" FORCE)
9
10project(OCCT)
11
12set_property(GLOBAL PROPERTY USE_FOLDERS ON)
13
14set(BUILD_SHARED_LIBS ON)
15
16IF("${BUILD_CONFIGURATION}" STREQUAL "${CMAKE_BUILD_TYPE}")
17 SET(CHANGES_ARE_NEEDED OFF)
18ELSE()
19 SET(CHANGES_ARE_NEEDED ON)
20ENDIF()
21
22MATH(EXPR COMPILER_BITNESS "32 + 32*(${CMAKE_SIZEOF_VOID_P}/8)")
23
24SET(CMAKE_BUILD_TYPE ${BUILD_CONFIGURATION} CACHE INTERNAL "Build type of OCCT" FORCE )
25
26SET(INSTALL_DIR "" CACHE PATH "Directory that will contain install files of OCCT" )
27SET(CMAKE_INSTALL_PREFIX "${INSTALL_DIR}" CACHE INTERNAL "" FORCE )
28
29set(BUILD_PATCH_DIR "" CACHE PATH "directory with occt patch")
30
31set (BUILD_TOOLKITS "" CACHE STRING "Toolkits are also included in OCCT")
32separate_arguments(BUILD_TOOLKITS)
33
34IF(MSVC)
35 SET(BUILD_Samples OFF CACHE BOOL "OCCT samples building")
36ENDIF()
37
38# consider for patch existence
39SET (IS_PATCH_CURRENT "NO")
40SET (TK_ROOT_DIR ${CMAKE_SOURCE_DIR})
41IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "")
42 SET (IS_PATCH_CURRENT "YES")
43 SET (TK_ROOT_DIR ${BUILD_PATCH_DIR})
44ENDIF()
45
46# include the list of patch modules if the one exists
47# or include the list of original modules
48IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/cmake/CMakeModules.txt")
49 MESSAGE(STATUS "Info: the list of patched modules is included")
50 include(${BUILD_PATCH_DIR}/adm/cmake/CMakeModules.txt)
51ELSE()
52 include(adm/cmake/CMakeModules.txt)
53ENDIF()
54
55if (WIN32)
56 set(SCRIPT_EXT bat)
57else()
58 set(SCRIPT_EXT sh)
59endif()
60
61if (MSVC)
62 add_definitions(/fp:precise)
63endif()
64
65# choose SSE2 option for appropriate MSVC compilers
66if (MSVC80 OR MSVC90 OR MSVC10)
67 if (${COMPILER_BITNESS} STREQUAL 32)
68 add_definitions(/arch:SSE2)
69 endif()
70endif()
71
72# set compiler short name
73if (MSVC)
74 if (MSVC70)
75 set (COMPILER vc7)
76 elseif (MSVC80)
77 set (COMPILER vc8)
78 elseif (MSVC90)
79 set (COMPILER vc9)
80 elseif (MSVC10)
81 set (COMPILER vc10)
82 elseif (MSVC11)
83 set (COMPILER vc11)
84 endif()
85elseif (DEFINED CMAKE_COMPILER_IS_GNUCC)
86 set (COMPILER gcc)
87elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX)
88 set (COMPILER gxx)
89elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
90 set (COMPILER clang)
91elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
92 set (COMPILER icc)
93else()
94 set (COMPILER ${CMAKE_GENERATOR})
95 string (REGEX REPLACE " " "" COMPILER ${COMPILER})
96endif()
97
98if (WIN32)
99 SET(OS_WITH_BIT "win${COMPILER_BITNESS}")
100elseif(APPLE)
101 SET(OS_WITH_BIT "mac${COMPILER_BITNESS}")
102else()
103 SET(OS_WITH_BIT "lin${COMPILER_BITNESS}")
104endif()
105
106add_definitions(-DCSFDB)
107if(WIN32)
108 add_definitions(/DWNT -wd4996)
109elseif(APPLE)
110 add_definitions(-fexceptions -fPIC -DOCC_CONVERT_SIGNALS -DHAVE_WOK_CONFIG_H -DHAVE_CONFIG_H)
111else()
112 add_definitions(-fexceptions -fPIC -DOCC_CONVERT_SIGNALS -DHAVE_WOK_CONFIG_H -DHAVE_CONFIG_H -DLIN)
113endif()
114
115# enable structured exceptions for MSVC
116string(REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}")
117IF(ISFLAG)
118 STRING(REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
119ELSEIF(WIN32)
120 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -EHa")
121ENDIF()
122
123# enable parallel compilation on MSVC 9 and above
124IF(WIN32)
125 IF(NOT DEFINED MSVC70 AND NOT DEFINED MSVC80)
126 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP")
127 ENDIF()
128ENDIF()
129
130# increase compiler warnings level (-W4 for MSVC, -Wall for GCC)
131IF(MSVC)
132 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
133 string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
134 else()
135 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
136 endif()
137elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
138 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
139endif()
140
141SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
142SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception")
143
144SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEB")
145SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEB")
146
147set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/out/lib)
148set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/out/lib)
149set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/out/bin)
150
151# RESOURCES
152install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/DrawResources" DESTINATION "${INSTALL_DIR}/src" )
153install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/StdResource" DESTINATION "${INSTALL_DIR}/src" )
154install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/SHMessage" DESTINATION "${INSTALL_DIR}/src" )
155install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/Textures" DESTINATION "${INSTALL_DIR}/src" )
156install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/Shaders" DESTINATION "${INSTALL_DIR}/src" )
157install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/XSMessage" DESTINATION "${INSTALL_DIR}/src" )
158install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/XSTEPResource" DESTINATION "${INSTALL_DIR}/src" )
159install(DIRECTORY "${CMAKE_SOURCE_DIR}/src/XmlOcafResource" DESTINATION "${INSTALL_DIR}/src" )
160
161install(FILES "${CMAKE_SOURCE_DIR}/src/UnitsAPI/Lexi_Expr.dat" DESTINATION "${INSTALL_DIR}/src/UnitsAPI" )
162install(FILES "${CMAKE_SOURCE_DIR}/src/UnitsAPI/Units.dat" DESTINATION "${INSTALL_DIR}/src/UnitsAPI" )
163install(FILES "${CMAKE_SOURCE_DIR}/src/TObj/TObj.msg" DESTINATION "${INSTALL_DIR}/src/TObj" )
164
165IF("${BUILD_CONFIGURATION}" STREQUAL "Debug")
166 SET(3RDPARTY_BUILD_SUFFIX "") # debug == release
167 SET(BUILD_SUFFIX "d")
168ELSE()
169 SET(3RDPARTY_BUILD_SUFFIX "")
170 SET(BUILD_SUFFIX "")
171ENDIF()
172
173FUNCTION(SUBDIRECTORY_NAMES MAIN_DIRECTORY RESULT)
174 file(GLOB SUB_ITEMS "${MAIN_DIRECTORY}/*")
175
176 foreach(ITEM ${SUB_ITEMS})
177 if(IS_DIRECTORY "${ITEM}")
178 GET_FILENAME_COMPONENT(ITEM_NAME "${ITEM}" NAME)
179 LIST(APPEND LOCAL_RESULT "${ITEM_NAME}")
180 endif()
181 endforeach()
182 set (${RESULT} ${LOCAL_RESULT} PARENT_SCOPE)
183ENDFUNCTION()
184
185FUNCTION(FIND_PRODUCT_DIR ROOT_DIR PRODUCT_NAME RESULT)
186 string( TOLOWER "${PRODUCT_NAME}" lower_PRODUCT_NAME )
187
188 LIST(APPEND SEARCH_TEMPLATES "${lower_PRODUCT_NAME}.*${COMPILER}.*${COMPILER_BITNESS}")
189 LIST(APPEND SEARCH_TEMPLATES "${lower_PRODUCT_NAME}.*[0-9.]+.*${COMPILER}.*${COMPILER_BITNESS}")
190 LIST(APPEND SEARCH_TEMPLATES "${lower_PRODUCT_NAME}.*[0-9.]+.*${COMPILER_BITNESS}")
191 LIST(APPEND SEARCH_TEMPLATES "${lower_PRODUCT_NAME}.*[0-9.]+")
192 LIST(APPEND SEARCH_TEMPLATES "${lower_PRODUCT_NAME}")
193
194 SUBDIRECTORY_NAMES( "${ROOT_DIR}" SUBDIR_NAME_LIST)
195
196 FOREACH( SEARCH_TEMPLATE ${SEARCH_TEMPLATES})
197 IF(LOCAL_RESULT)
198 BREAK()
199 ENDIF()
200
201 FOREACH(SUBDIR_NAME ${SUBDIR_NAME_LIST})
202 string( TOLOWER "${SUBDIR_NAME}" lower_SUBDIR_NAME )
203
204 STRING(REGEX MATCH "${SEARCH_TEMPLATE}" DUMMY_VAR "${lower_SUBDIR_NAME}")
205 IF(DUMMY_VAR)
206 LIST(APPEND LOCAL_RESULT ${SUBDIR_NAME})
207 ENDIF()
208 ENDFOREACH()
209 ENDFOREACH()
210
211 IF(LOCAL_RESULT)
212 LIST(LENGTH "${LOCAL_RESULT}" LOC_LEN)
213 MATH(EXPR LAST_ELEMENT_INDEX "${LOC_LEN}-1")
214 LIST(GET LOCAL_RESULT ${LAST_ELEMENT_INDEX} DUMMY)
215 SET(${RESULT} ${DUMMY} PARENT_SCOPE)
216 ENDIF()
217ENDFUNCTION()
218
219IF(WIN32)
220 SET(DLL_SO "dll")
221 SET(DLL_SO_FOLDER "bin")
222 SET(DLL_SO_PREFIX "")
223ELSEIF(APPLE)
224 SET(DLL_SO "dylib")
225 SET(DLL_SO_FOLDER "lib")
226 SET(DLL_SO_PREFIX "lib")
227ELSE()
228 SET(DLL_SO "so")
229 SET(DLL_SO_FOLDER "lib")
230 SET(DLL_SO_PREFIX "lib")
231ENDIF()
232
233SET(3RDPARTY_DIR ${CMAKE_SOURCE_DIR} CACHE PATH "Directory contains required 3rdparty products")
234SET(3RDPARTY_INCLUDE_DIRS "")
235SET(3RDPARTY_NOT_INCLUDED)
236
237IF(APPLE)
238 SET(USE_GLX OFF CACHE BOOL "whether use X11 OpenGL on OSX or not")
239ENDIF()
240
241SET(USE_GL2PS OFF CACHE BOOL "whether use gl2ps product or not")
242SET(USE_FREEIMAGE OFF CACHE BOOL "whether use freeimage product or not")
243SET(USE_TBB OFF CACHE BOOL "whether use tbb product or not")
244SET(USE_OPENCL OFF CACHE BOOL "whether use OpenCL or not")
245
246SET(INSTALL_TESTS OFF CACHE BOOL "Is tests copy to install directory")
247
248MACRO (CHECK_AND_UNSET VARNAME)
249 IF(DEFINED ${VARNAME})
250 UNSET(${VARNAME} CACHE)
251 ENDIF()
252ENDMACRO()
253
254MACRO (CHECK_AND_UNSET_GROUP VARNAME)
255 CHECK_AND_UNSET ("${VARNAME}_DIR")
256 CHECK_AND_UNSET ("${VARNAME}_INCLUDE_DIR")
257 CHECK_AND_UNSET ("${VARNAME}_DLL")
258 CHECK_AND_UNSET ("${VARNAME}_LIBRARY")
259ENDMACRO()
260
261MACRO(THIRDPARTY_PRODUCT PRODUCT_NAME HEADER_NAME LIBRARY_NAME)
262 IF(NOT DEFINED 3RDPARTY_${PRODUCT_NAME}_DIR)
263 SET(3RDPARTY_${PRODUCT_NAME}_DIR "" CACHE PATH "Directory contains ${PRODUCT_NAME} product")
264 ENDIF()
265
266 IF(3RDPARTY_DIR AND ("${3RDPARTY_${PRODUCT_NAME}_DIR}" STREQUAL "" OR CHANGES_ARE_NEEDED))
267 FIND_PRODUCT_DIR("${3RDPARTY_DIR}" ${PRODUCT_NAME} ${PRODUCT_NAME}_DIR_NAME)
268 IF("${${PRODUCT_NAME}_DIR_NAME}" STREQUAL "")
269 MESSAGE(STATUS "${PRODUCT_NAME} DON'T FIND")
270 ELSE()
271 SET(3RDPARTY_${PRODUCT_NAME}_DIR "${3RDPARTY_DIR}/${${PRODUCT_NAME}_DIR_NAME}" CACHE PATH "Directory contains ${PRODUCT_NAME} product" FORCE)
272 ENDIF()
273 ENDIF()
274
275 SET(INSTALL_${PRODUCT_NAME} OFF CACHE BOOL "Is ${PRODUCT_NAME} lib copy to install directory")
276
277 IF(3RDPARTY_${PRODUCT_NAME}_DIR)
278 IF("${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND")
279 SET(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "Directory contains headers of the ${PRODUCT_NAME} product" FORCE)
280 if ("${PRODUCT_NAME}" STREQUAL "FREETYPE")
281 FIND_PATH(3RDPARTY_FREETYPE_INCLUDE_DIR ${HEADER_NAME} PATHS "${3RDPARTY_FREETYPE_DIR}/include" "${3RDPARTY_FREETYPE_DIR}/include/freetype2" NO_DEFAULT_PATH)
282 else()
283 FIND_PATH(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR ${HEADER_NAME} PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/include" NO_DEFAULT_PATH)
284 endif()
285 ENDIF()
286
287 IF("${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND")
288 SET(3RDPARTY_${PRODUCT_NAME}_LIBRARY "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Path to library of the ${PRODUCT_NAME} product" FORCE)
289 FIND_LIBRARY(3RDPARTY_${PRODUCT_NAME}_LIBRARY ${LIBRARY_NAME} PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/lib" NO_DEFAULT_PATH)
290 ENDIF()
291
292 IF("${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "" OR CHANGES_ARE_NEEDED OR "${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND")
293 SET(3RDPARTY_${PRODUCT_NAME}_DLL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Path to shared library of the ${PRODUCT_NAME} product" FORCE)
294 FIND_FILE(3RDPARTY_${PRODUCT_NAME}_DLL "${DLL_SO_PREFIX}${LIBRARY_NAME}.${DLL_SO}" PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}/${DLL_SO_FOLDER}" NO_DEFAULT_PATH)
295 ENDIF()
296
297 MARK_AS_ADVANCED(3RDPARTY_${PRODUCT_NAME}_DIR)
298 ELSE()
299
300 ENDIF()
301
302 # check default path (with additions) for header search
303 IF("${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND")
304 SET(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR "3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "Directory contains headers of the ${PRODUCT_NAME} product" FORCE)
305 FIND_PATH(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR ${HEADER_NAME} ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_HEADER})
306 ENDIF()
307
308 # check default path (with additions) for library search
309 IF("${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND")
310 SET(3RDPARTY_${PRODUCT_NAME}_LIBRARY "3RDPARTY_${PRODUCT_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "Directory contains library of the ${PRODUCT_NAME} product" FORCE)
311 FIND_LIBRARY(3RDPARTY_${PRODUCT_NAME}_LIBRARY ${LIBRARY_NAME} ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_LIB})
312 ENDIF()
313
314 # check default path (with additions) for DLL search
315 IF("${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "" OR "${3RDPARTY_${PRODUCT_NAME}_DLL}" STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND")
316 SET(3RDPARTY_${PRODUCT_NAME}_DLL "3RDPARTY_${PRODUCT_NAME}_DLL-NOTFOUND" CACHE FILEPATH "Directory contains shared library of the ${PRODUCT_NAME} product" FORCE)
317 FIND_FILE(3RDPARTY_${PRODUCT_NAME}_DLL "${DLL_SO_PREFIX}${LIBRARY_NAME}.${DLL_SO}" ${3RDPARTY_${PRODUCT_NAME}_ADDITIONAL_PATH_FOR_DLL})
318 ENDIF()
319
320 IF(3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR)
321 SET(3RDPARTY_INCLUDE_DIRS "${3RDPARTY_INCLUDE_DIRS};${3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR}")
322 ELSE()
323 LIST(APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_INCLUDE_DIR)
324 ENDIF()
325
326 IF(3RDPARTY_${PRODUCT_NAME}_LIBRARY)
327 GET_FILENAME_COMPONENT(3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR "${3RDPARTY_${PRODUCT_NAME}_LIBRARY}" PATH)
328 SET(3RDPARTY_LIBRARY_DIRS "${3RDPARTY_LIBRARY_DIRS};${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR}")
329 ELSE()
330 LIST(APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_LIBRARY)
331 ENDIF()
332
333 IF(3RDPARTY_${PRODUCT_NAME}_DLL)
334 #
335 ELSE()
336 LIST(APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_${PRODUCT_NAME}_DLL)
337 ENDIF()
338
339 IF(INSTALL_${PRODUCT_NAME})
340 INSTALL(FILES "${3RDPARTY_${PRODUCT_NAME}_DLL}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${DLL_SO_FOLDER}${BUILD_SUFFIX}")
341 SET(3RDPARTY_${PRODUCT_NAME}_DLL_DIR "")
342 ELSE()
343 GET_FILENAME_COMPONENT(3RDPARTY_${PRODUCT_NAME}_DLL_DIR "${3RDPARTY_${PRODUCT_NAME}_DLL}" PATH)
344 ENDIF()
345ENDMACRO()
346
347# TCL
348INCLUDE(adm/templates/tcl.cmake)
349
350#install tcltk
351IF(INSTALL_TCL)
352 SET(3RDPARTY_TCL_DLL_DIR "")
353 SET(3RDPARTY_TCL_LIB_DIR "")
354
355 GET_FILENAME_COMPONENT(3RDPARTY_TCL_LIB_DIR_INSIDE "${3RDPARTY_TCL_LIBRARY}" PATH)
356 GET_FILENAME_COMPONENT(3RDPARTY_TCL_DLL_DIR_INSIDE "${3RDPARTY_TCL_DLL}" PATH)
357
358 IF (IS_TCL_VERSION_FOUND)
359 SET (TCL_VERSION ${TCL_MAJOR_VERSION}${TCL_SEP}${TCL_MINOR_VERSION})
360 SET (TCL_FOLDER_VERSION ${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION})
361 ELSE()
362 SET (TCL_VERSION "")
363
364 #TODO SEARCH tclX.X & tkX.X subdirs
365 SET (TCL_FOLDER_VERSION "")
366 ENDIF()
367
368 INSTALL(FILES "${3RDPARTY_TCL_DLL_DIR_INSIDE}/${DLL_SO_PREFIX}tcl${TCL_VERSION}.${DLL_SO}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${DLL_SO_FOLDER}${BUILD_SUFFIX}")
369 INSTALL(FILES "${3RDPARTY_TCL_DLL_DIR_INSIDE}/${DLL_SO_PREFIX}tk${TCL_VERSION}.${DLL_SO}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${DLL_SO_FOLDER}${BUILD_SUFFIX}")
370
371 IF (IS_TCL_VERSION_FOUND)
372 # tcl is required to install in lib folder (without ${BUILD_SUFFIX})
373 INSTALL(DIRECTORY "${3RDPARTY_TCL_LIB_DIR_INSIDE}/tcl8" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
374 INSTALL(DIRECTORY "${3RDPARTY_TCL_LIB_DIR_INSIDE}/tcl${TCL_FOLDER_VERSION}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
375 INSTALL(DIRECTORY "${3RDPARTY_TCL_LIB_DIR_INSIDE}/tk${TCL_FOLDER_VERSION}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
376 ELSE()
377 MESSAGE(STATUS "\nWarning: tclX.X and tkX.X subdirs won't be copyied during the installation process.")
378 MESSAGE(STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
379 ENDIF()
380ELSE()
381 GET_FILENAME_COMPONENT(3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
382 GET_FILENAME_COMPONENT(3RDPARTY_TCL_LIB_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
383ENDIF()
384
385# GLX
386IF(USE_GLX)
387 ADD_DEFINITIONS(-DMACOSX_USE_GLX)
388
389 IF(NOT DEFINED 3RDPARTY_GLX_DIR)
390 SET(3RDPARTY_GLX_DIR "" CACHE PATH "Directory contains GLX product")
391 ENDIF()
392
393 IF(3RDPARTY_DIR AND ("${3RDPARTY_GLX_DIR}" STREQUAL "" OR CHANGES_ARE_NEEDED))
394 FIND_PRODUCT_DIR("${3RDPARTY_DIR}" GLX GLX_DIR_NAME)
395 IF("${GLX_DIR_NAME}" STREQUAL "")
396 MESSAGE(STATUS "GLX DON'T FIND")
397 ELSE()
398 SET(3RDPARTY_GLX_DIR "${3RDPARTY_DIR}/${GLX_DIR_NAME}" CACHE PATH "Directory contains GLX product" FORCE)
399 ENDIF()
400 ENDIF()
401
402 IF(3RDPARTY_GLX_DIR)
403 SET(3RDPARTY_GLX_INCLUDE_DIR "${3RDPARTY_GLX_DIR}/include" CACHE FILEPATH "Directory contains headers of the GLX product" FORCE)
404 SET(3RDPARTY_GLX_LIBRARY_DIR "${3RDPARTY_GLX_DIR}/lib" CACHE FILEPATH "Directory contains library of the GLX product" FORCE)
405
406 SET(3RDPARTY_INCLUDE_DIRS "${3RDPARTY_INCLUDE_DIRS};${3RDPARTY_GLX_INCLUDE_DIR}")
407 SET(3RDPARTY_LIBRARY_DIRS "${3RDPARTY_LIBRARY_DIRS};${3RDPARTY_GLX_LIBRARY_DIR}")
408
409 MARK_AS_ADVANCED(3RDPARTY_GLX_DIR)
410 ELSE()
411 LIST(APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_GLX_INCLUDE_DIR)
412 LIST(APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_GLX_LIBRARY_DIR)
413 ENDIF()
414ENDIF()
415
416# FREETYPE
417THIRDPARTY_PRODUCT("FREETYPE" "ft2build.h" "freetype${3RDPARTY_BUILD_SUFFIX}")
418
419# FREEIMAGE
420IF(USE_FREEIMAGE)
421 ADD_DEFINITIONS(-DHAVE_FREEIMAGE)
422
423 THIRDPARTY_PRODUCT("FREEIMAGE" "FreeImage.h" "freeimage${3RDPARTY_BUILD_SUFFIX}")
424 IF(WIN32)
425 IF("${3RDPARTY_FREEIMAGE_DIR}" STREQUAL "")
426 ELSE()
427 SET (3RDPARTY_FREEIMAGEPLUS_DIR "${3RDPARTY_FREEIMAGE_DIR}")
428 ENDIF()
429
430 THIRDPARTY_PRODUCT("FREEIMAGEPLUS" "FreeImagePlus.h" "freeimageplus${3RDPARTY_BUILD_SUFFIX}")
431
432 ENDIF()
433ELSE()
434 CHECK_AND_UNSET_GROUP ("3RDPARTY_FREEIMAGE")
435 CHECK_AND_UNSET_GROUP ("3RDPARTY_FREEIMAGEPLUS")
436 CHECK_AND_UNSET ("INSTALL_FREEIMAGE")
437 CHECK_AND_UNSET ("INSTALL_FREEIMAGEPLUS")
438ENDIF()
439
440# GL2PS
441IF(USE_GL2PS)
442 ADD_DEFINITIONS(-DHAVE_GL2PS)
443 THIRDPARTY_PRODUCT("GL2PS" "gl2ps.h" "gl2ps${3RDPARTY_BUILD_SUFFIX}")
444ELSE()
445 CHECK_AND_UNSET_GROUP ("3RDPARTY_GL2PS")
446 CHECK_AND_UNSET ("INSTALL_GL2PS")
447ENDIF()
448
449# OPENCL
450IF(USE_OPENCL)
451 ADD_DEFINITIONS(-DHAVE_OPENCL)
452
453 SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_HEADER $ENV{AMDAPPSDKROOT}/include
454 $ENV{INTELOCLSDKROOT}/include
455 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/inc
456 $ENV{ATISTREAMSDKROOT}/include)
457
458
459 IF(${COMPILER_BITNESS} STREQUAL 32)
460 SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_LIB $ENV{AMDAPPSDKROOT}/lib/x86
461 $ENV{INTELOCLSDKROOT}/lib/x86
462 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/Win32
463 $ENV{ATISTREAMSDKROOT}/lib/x86)
464 ELSEIF(${COMPILER_BITNESS} STREQUAL 64)
465 SET (3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_LIB $ENV{AMDAPPSDKROOT}/lib/x86_64
466 $ENV{INTELOCLSDKROOT}/lib/x64
467 $ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/x64
468 $ENV{ATISTREAMSDKROOT}/lib/x86_64)
469 ENDIF()
470
471
472 THIRDPARTY_PRODUCT("OPENCL" "CL/cl.h" "OpenCL${3RDPARTY_BUILD_SUFFIX}")
473
474 # if CL/cl.h isn't found (and 3RDPARTY_OPENCL_INCLUDE_DIR isn't defined)
475 # then try to find OpenCL/cl.h (all other variable won't be changed)
476 IF("${3RDPARTY_OPENCL_INCLUDE_DIR}" STREQUAL "" OR "${3RDPARTY_OPENCL_INCLUDE_DIR}" STREQUAL "3RDPARTY_OPENCL_INCLUDE_DIR-NOTFOUND")
477 THIRDPARTY_PRODUCT("OPENCL" "OpenCL/cl.h" "OpenCL${3RDPARTY_BUILD_SUFFIX}")
478 ENDIF()
479
480ELSE()
481 CHECK_AND_UNSET_GROUP ("3RDPARTY_OPENCL")
482 CHECK_AND_UNSET ("3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_HEADER")
483 CHECK_AND_UNSET ("3RDPARTY_OPENCL_ADDITIONAL_PATH_FOR_LIB")
484 CHECK_AND_UNSET ("INSTALL_OPENCL")
485ENDIF()
486
487# TBB
488IF (USE_TBB)
489 ADD_DEFINITIONS(-DHAVE_TBB)
490
491 INCLUDE(adm/templates/tbb.cmake)
492
493 IF(INSTALL_TBB)
494 INSTALL(FILES "${3RDPARTY_TBB_DLL}" "${3RDPARTY_TBB_MALLOC_DLL}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${DLL_SO_FOLDER}${BUILD_SUFFIX}")
495
496 SET(3RDPARTY_TBB_DLL_DIR "")
497 SET(3RDPARTY_TBB_MALLOC_DLL_DIR "")
498 ELSE()
499 GET_FILENAME_COMPONENT(3RDPARTY_TBB_DLL_DIR "${3RDPARTY_TBB_DLL}" PATH)
500 GET_FILENAME_COMPONENT(3RDPARTY_TBB_MALLOC_DLL_DIR "${3RDPARTY_TBB_MALLOC_DLL}" PATH)
501 ENDIF()
502ELSE()
503 CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB")
504 CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB_MALLOC")
505 CHECK_AND_UNSET ("3RDPARTY_TBB_DIR_NAME")
506 CHECK_AND_UNSET ("INSTALL_TBB")
507ENDIF()
508
509string( REGEX REPLACE ";" " " 3RDPARTY_NOT_INCLUDED "${3RDPARTY_NOT_INCLUDED}")
510
511#CHECK ALL 3RDPARTY PATHS
512IF(3RDPARTY_NOT_INCLUDED)
513 MESSAGE(FATAL_ERROR "NOT FOUND: ${3RDPARTY_NOT_INCLUDED}" )
514ENDIF()
515
516list(REMOVE_DUPLICATES 3RDPARTY_INCLUDE_DIRS)
517string( REGEX REPLACE ";" "\n\t" 3RDPARTY_INCLUDE_DIRS_WITH_ENDS "${3RDPARTY_INCLUDE_DIRS}")
518MESSAGE(STATUS "3RDPARTY_INCLUDE_DIRS: ${3RDPARTY_INCLUDE_DIRS_WITH_ENDS}")
519include_directories( ${3RDPARTY_INCLUDE_DIRS} )
520
521list(REMOVE_DUPLICATES 3RDPARTY_LIBRARY_DIRS)
522string( REGEX REPLACE ";" "\n\t" 3RDPARTY_LIBRARY_DIRS_WITH_ENDS "${3RDPARTY_LIBRARY_DIRS}")
523MESSAGE(STATUS "3RDPARTY_LIBRARY_DIRS: ${3RDPARTY_LIBRARY_DIRS_WITH_ENDS}")
524link_directories( ${3RDPARTY_LIBRARY_DIRS} )
525
526IF("${INSTALL_DIR}" STREQUAL "")
527 MESSAGE(FATAL_ERROR "INSTALL_DIR is empty")
528ELSE()
529 # inc,data,tests DIRECTORY
530 install(DIRECTORY "${CMAKE_SOURCE_DIR}/inc" DESTINATION "${INSTALL_DIR}")
531 install(DIRECTORY "${CMAKE_SOURCE_DIR}/data" DESTINATION "${INSTALL_DIR}")
532 install(DIRECTORY "${CMAKE_SOURCE_DIR}/samples/tcl" DESTINATION "${INSTALL_DIR}/samples")
533 IF(INSTALL_TESTS)
534 install(DIRECTORY "${CMAKE_SOURCE_DIR}/tests" DESTINATION "${INSTALL_DIR}" )
535 ENDIF()
536
537 # install patch inc, data, tests folder
538 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "")
539 IF(EXISTS "${BUILD_PATCH_DIR}/inc")
540 install(DIRECTORY "${BUILD_PATCH_DIR}/inc" DESTINATION "${INSTALL_DIR}" )
541 ENDIF()
542
543 IF(EXISTS "${BUILD_PATCH_DIR}/data")
544 install(DIRECTORY "${BUILD_PATCH_DIR}/data" DESTINATION "${INSTALL_DIR}" )
545 ENDIF()
546
547 IF(INSTALL_TESTS)
548 IF(EXISTS "${BUILD_PATCH_DIR}/tests")
549 install(DIRECTORY "${BUILD_PATCH_DIR}/tests" DESTINATION "${INSTALL_DIR}" )
550 ENDIF()
551 ENDIF()
552 ENDIF()
553
554 # DRAW.BAT or DRAW.SH
555 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/templates/draw.${SCRIPT_EXT}")
556 install(FILES "${BUILD_PATCH_DIR}/adm/templates/draw.${SCRIPT_EXT}" DESTINATION "${INSTALL_DIR}" PERMISSIONS
557 OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE)
558 ELSE()
559 install(FILES "${CMAKE_SOURCE_DIR}/adm/templates/draw.${SCRIPT_EXT}" DESTINATION "${INSTALL_DIR}" PERMISSIONS
560 OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE)
561 ENDIF()
562
563
564 SET(CUSTOM_CUR "custom_${COMPILER}_${COMPILER_BITNESS}_${BUILD_SUFFIX}.${SCRIPT_EXT}")
565
566 if (WIN32)
567 SET (CUSTOM_ADD_CONTENT "\nif exist \"%~dp0${CUSTOM_CUR}\" (\n call \"%~dp0${CUSTOM_CUR}\" %1 %2 %3 \n)")
568 else()
569 SET (CUSTOM_ADD_CONTENT "\nif [ -e \"\${aScriptPath}/${CUSTOM_CUR}\" ]; then\n source \"\${aScriptPath}/${CUSTOM_CUR}\" \"\${COMPILER}\" \"\${WOKSTATION}\${ARCH}\" \"\${CASDEB}\" \nfi")
570 endif()
571
572 # change custom.bat/sh
573 if (EXISTS "${INSTALL_DIR}/custom.${SCRIPT_EXT}")
574 FILE(READ "${INSTALL_DIR}/custom.${SCRIPT_EXT}" CUSTOM_CONTENT)
575
576 SET (CUSTOM_CONTENT "${CUSTOM_CONTENT} ${CUSTOM_ADD_CONTENT}")
577
578 FILE(WRITE "${INSTALL_DIR}/custom.${SCRIPT_EXT}" "${CUSTOM_CONTENT}")
579 else()
580 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/templates/custom.${SCRIPT_EXT}.main")
581 configure_file("${BUILD_PATCH_DIR}/adm/templates/custom.${SCRIPT_EXT}.main" "custom.${SCRIPT_EXT}" @ONLY)
582 ELSE()
583 configure_file("${CMAKE_SOURCE_DIR}/adm/templates/custom.${SCRIPT_EXT}.main" "custom.${SCRIPT_EXT}" @ONLY)
584 ENDIF()
585
586 install(FILES "${OCCT_BINARY_DIR}/custom.${SCRIPT_EXT}" DESTINATION "${INSTALL_DIR}")
587 endif()
588
589 # write current custom.bat/sh
590 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/templates/custom.${SCRIPT_EXT}.in")
591 configure_file("${BUILD_PATCH_DIR}/adm/templates/custom.${SCRIPT_EXT}.in" ${CUSTOM_CUR} @ONLY)
592 ELSE()
593 configure_file("${CMAKE_SOURCE_DIR}/adm/templates/custom.${SCRIPT_EXT}.in" ${CUSTOM_CUR} @ONLY)
594 ENDIF()
595
596 install(FILES "${OCCT_BINARY_DIR}/${CUSTOM_CUR}" DESTINATION "${INSTALL_DIR}" )
597
598 IF (BUILD_Samples)
599 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/templates/sample.bat")
600 install(FILES "${BUILD_PATCH_DIR}/adm/templates/sample.bat" DESTINATION "${INSTALL_DIR}")
601 ELSE()
602 install(FILES "${CMAKE_SOURCE_DIR}/adm/templates/sample.bat" DESTINATION "${INSTALL_DIR}")
603 ENDIF()
604 ENDIF()
605
606 IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/templates/env.${SCRIPT_EXT}.in")
607 configure_file("${BUILD_PATCH_DIR}/adm/templates/env.${SCRIPT_EXT}.in" env.${SCRIPT_EXT} @ONLY)
608 ELSE()
609 configure_file("${CMAKE_SOURCE_DIR}/adm/templates/env.${SCRIPT_EXT}.in" env.${SCRIPT_EXT} @ONLY)
610 ENDIF()
611 install(FILES "${OCCT_BINARY_DIR}/env.${SCRIPT_EXT}" DESTINATION "${INSTALL_DIR}" )
612ENDIF()
613
614# include patched toolkit projects or original ones
615SET (UNSUBDIRS "")
616IF(NOT "${BUILD_PATCH_DIR}" STREQUAL "" AND EXISTS "${BUILD_PATCH_DIR}/adm/cmake/CMakeToolKitsDeps.txt")
617 include(${BUILD_PATCH_DIR}/adm/cmake/CMakeToolKitsDeps.txt)
618ELSE()
619 SET (IS_PATCH_CURRENT "NO")
620 SET (TK_ROOT_DIR ${CMAKE_SOURCE_DIR})
621 include(adm/cmake/CMakeToolKitsDeps.txt)
622ENDIF()
623
624# include some required original toolkit
625IF(NOT "${UNSUBDIRS}" STREQUAL "")
626 SET (IS_PATCH_CURRENT "NO")
627 SET (TK_ROOT_DIR ${CMAKE_SOURCE_DIR})
628 # add required subdirs
629 FOREACH(UNSUBDIR ${UNSUBDIRS})
630 MESSAGE(STATUS "${UNSUBDIR}")
631 subdirs(${TK_ROOT_DIR}/${UNSUBDIR})
632 ENDFOREACH()
633ENDIF()
634
635# samples do not support patch usage
636IF (BUILD_Samples)
637 SET (CMAKE_MFC_FLAG 2)
638 SET (OCCT_ROOT ${CMAKE_SOURCE_DIR})
639
640 SET (MFC_STANDARD_SAMPLES_DIR ${OCCT_ROOT}/samples/mfc/standard)
641 SET (COMMON_WINMAIN_FILE ${MFC_STANDARD_SAMPLES_DIR}/Common/Winmain.cpp)
642
643 subdirs(samples/mfc/standard/mfcsample)
644 subdirs(samples/mfc/standard/01_Geometry)
645 subdirs(samples/mfc/standard/02_Modeling)
646 subdirs(samples/mfc/standard/03_Viewer2d)
647 subdirs(samples/mfc/standard/04_Viewer3d)
648 subdirs(samples/mfc/standard/05_ImportExport)
649 subdirs(samples/mfc/standard/06_Ocaf)
650 subdirs(samples/mfc/standard/07_Triangulation)
651 subdirs(samples/mfc/standard/08_HLR)
652 subdirs(samples/mfc/standard/09_Animation)
653 subdirs(samples/mfc/standard/10_Convert)
654ENDIF()