c4635357c41644ebf5d0b23ec1352d63d33991d7
[occt.git] / adm / cmake / vtk.cmake
1 # vtk
2
3 #if (NOT DEFINED INSTALL_VTK)
4 #  set (INSTALL_VTK OFF CACHE BOOL "${INSTALL_VTK_DESCR}")
5 #endif()
6
7 # vtk directory
8 if (NOT DEFINED 3RDPARTY_VTK_DIR)
9   set (3RDPARTY_VTK_DIR "" CACHE PATH "The directory containing VTK")
10 endif()
11
12 set (3RDPARTY_VTK_REQUIRED_LIBRARIES vtkCommonCore
13                                      vtkCommonDataModel
14                                      vtkCommonExecutionModel
15                                      vtkCommonMath
16                                      vtkCommonTransforms
17                                      vtkRenderingCore
18                                      vtkRenderingFreeType
19                                      vtkRenderingFreeTypeOpenGL
20                                      vtkRenderingOpenGL
21                                      vtkFiltersGeneral
22                                      vtkIOCore
23                                      vtkIOImage
24                                      vtkImagingCore
25                                      vtkInteractionStyle)
26
27 # include occt macros. compiler_bitness, os_wiht_bit, compiler
28 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
29
30 # specify VTK folder in connectin with 3RDPARTY_DIR
31 if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
32   #CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_DIR 3RDPARTY_VTK_DIR PATH "The directory containing VTK")
33
34   if (NOT 3RDPARTY_VTK_DIR OR NOT EXISTS "${3RDPARTY_VTK_DIR}")
35     FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" VTK VTK_DIR_NAME)
36     if (VTK_DIR_NAME)
37       set (3RDPARTY_VTK_DIR "${3RDPARTY_DIR}/${VTK_DIR_NAME}" CACHE PATH "The directory containing VTK" FORCE)
38     endif()
39   endif()
40 else()
41   #set (3RDPARTY_VTK_DIR "" CACHE PATH "The directory containing VTK" FORCE)
42 endif()
43
44 # vtk include directory
45 if (NOT DEFINED 3RDPARTY_VTK_INCLUDE_DIR)
46   set (3RDPARTY_VTK_INCLUDE_DIR "" CACHE PATH "The directory containing headers of VTK")
47 endif()
48
49 # vtk library directory
50 if (NOT DEFINED 3RDPARTY_VTK_LIBRARY_DIR)
51   set (3RDPARTY_VTK_LIBRARY_DIR "" CACHE PATH "The directory containing VTK libraries")
52 endif()
53
54 # vtk dll directory
55 if (WIN32 AND NOT DEFINED 3RDPARTY_VTK_DLL_DIR)
56   set (3RDPARTY_VTK_DLL_DIR "" CACHE PATH "The directory containing VTK shared libraries")
57 endif()
58
59 # check 3RDPARTY_VTK_ paths for consistency with specified 3RDPARTY_VTK_DIR
60 if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
61   CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_INCLUDE_DIR PATH "The directory containing headers of VTK")
62   CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_LIBRARY_DIR PATH "The directory containing VTK libraries")
63
64   if (WIN32)
65     CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_DLL_DIR PATH "The directory containing VTK shared library")
66   endif()
67 endif()
68
69 if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
70   set (CACHED_VTK_DIR $ENV{VTK_DIR})
71   set (ENV{VTK_DIR} "${3RDPARTY_VTK_DIR}")
72 endif()
73
74 find_package(VTK QUIET)
75
76 if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
77   set (ENV{VTK_DIR} ${CACHED_VTK_DIR})
78 endif()
79
80 if (VTK_FOUND)
81
82   # add compiler flags, preprocessor definitions, include and link dirs
83   include (${VTK_USE_FILE})
84
85   set (ALL_REQUIRED_VTK_LIBRARIES_FOUND ON)
86   if (VTK_LIBRARIES)
87
88     set (3RDPARTY_VTK_INCLUDE_DIRS)
89     set (3RDPARTY_VTK_LIBRARY_DIRS)
90     set (3RDPARTY_VTK_DLL_DIRS)
91
92     foreach (VTK_REQUIRED_LIBRARY ${3RDPARTY_VTK_REQUIRED_LIBRARIES})
93       list (FIND VTK_LIBRARIES ${VTK_REQUIRED_LIBRARY} FOUND_INDEX)
94       if (${FOUND_INDEX} EQUAL -1)
95         message (WARNING "VTK: required ${VTK_REQUIRED_LIBRARY} library is not found")
96         set (ALL_REQUIRED_VTK_LIBRARIES_FOUND OFF)
97       else()
98         # get paths from corresponding variables
99         if (${VTK_REQUIRED_LIBRARY}_INCLUDE_DIRS AND EXISTS "${${VTK_REQUIRED_LIBRARY}_INCLUDE_DIRS}")
100           list (APPEND 3RDPARTY_VTK_INCLUDE_DIRS "${${VTK_REQUIRED_LIBRARY}_INCLUDE_DIRS}")
101         endif()
102
103         if (${VTK_REQUIRED_LIBRARY}_LIBRARY_DIRS AND EXISTS "${${VTK_REQUIRED_LIBRARY}_LIBRARY_DIRS}")
104           list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${${VTK_REQUIRED_LIBRARY}_LIBRARY_DIRS}")
105         endif()
106
107         if (${VTK_REQUIRED_LIBRARY}_RUNTIME_LIBRARY_DIRS AND EXISTS "${${VTK_REQUIRED_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
108           list (APPEND 3RDPARTY_VTK_DLL_DIRS "${${VTK_REQUIRED_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
109           if (NOT WIN32)
110             list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${${VTK_REQUIRED_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
111           endif()
112         endif()
113
114         # get paths from corresponding properties
115         get_property (TARGET_VTK_IMPORT_CONFS TARGET ${VTK_REQUIRED_LIBRARY} PROPERTY IMPORTED_CONFIGURATIONS)
116
117         if (TARGET_VTK_IMPORT_CONFS)
118           list (GET TARGET_VTK_IMPORT_CONFS 0 CHOSEN_IMPORT_CONF)
119           
120           # todo: choose configuration in connection with the build type
121           #if (CMAKE_BUILD_TYPE)
122           #  foreach (IMPORT_CONF ${TARGET_VTK_IMPORT_CONFS})
123           #  endforeach()
124           #endif()
125
126           get_property (TARGET_PROPERTY_IMP_PATH TARGET ${VTK_REQUIRED_LIBRARY} PROPERTY IMPORTED_IMPLIB_${CHOSEN_IMPORT_CONF})
127           if(TARGET_PROPERTY_IMP_PATH AND EXISTS "${TARGET_PROPERTY_IMP_PATH}")
128             get_filename_component (TARGET_PROPERTY_IMP_DIR "${TARGET_PROPERTY_IMP_PATH}" PATH)
129             list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${TARGET_PROPERTY_IMP_DIR}")
130           endif()
131
132           get_property (TARGET_PROPERTY_LOCATION_PATH TARGET ${VTK_REQUIRED_LIBRARY} PROPERTY IMPORTED_LOCATION_${CHOSEN_IMPORT_CONF})
133           if(TARGET_PROPERTY_LOCATION_PATH AND EXISTS "${TARGET_PROPERTY_LOCATION_PATH}")
134             get_filename_component (TARGET_PROPERTY_LOCATION_DIR "${TARGET_PROPERTY_LOCATION_PATH}" PATH)
135
136             if (WIN32)
137               list (APPEND 3RDPARTY_VTK_DLL_DIRS "${TARGET_PROPERTY_LOCATION_DIR}")
138             else()
139               list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${TARGET_PROPERTY_LOCATION_DIR}")
140             endif()
141           endif()
142         endif()
143       endif()
144       
145     endforeach()
146   else()  
147     set (ALL_REQUIRED_VTK_LIBRARIES_FOUND OFF)
148   endif()
149
150   if (ALL_REQUIRED_VTK_LIBRARIES_FOUND)
151
152     if (3RDPARTY_VTK_INCLUDE_DIRS)
153       list (REMOVE_DUPLICATES 3RDPARTY_VTK_INCLUDE_DIRS)
154       list (APPEND 3RDPARTY_INCLUDE_DIRS ${3RDPARTY_VTK_INCLUDE_DIRS})
155
156       list (GET 3RDPARTY_VTK_INCLUDE_DIRS 0 3RDPARTY_VTK_INCLUDE_DIR)
157       set (3RDPARTY_VTK_INCLUDE_DIR "${3RDPARTY_VTK_INCLUDE_DIR}" CACHE PATH "The directory containing headers of VTK" FORCE)
158     endif()
159
160     if (3RDPARTY_VTK_LIBRARY_DIRS)
161       list (REMOVE_DUPLICATES 3RDPARTY_VTK_LIBRARY_DIRS)
162       list (APPEND 3RDPARTY_LIBRARY_DIRS ${3RDPARTY_VTK_LIBRARY_DIRS})
163
164       list (GET 3RDPARTY_VTK_LIBRARY_DIRS 0 3RDPARTY_VTK_LIBRARY_DIR)
165       set (3RDPARTY_VTK_LIBRARY_DIR "${3RDPARTY_VTK_LIBRARY_DIR}" CACHE PATH "The directory containing VTK libraries" FORCE)
166     endif()
167
168     if (WIN32)
169       if (3RDPARTY_VTK_DLL_DIRS)
170         list (REMOVE_DUPLICATES 3RDPARTY_VTK_DLL_DIRS)
171         list (APPEND 3RDPARTY_DLL_DIRS ${3RDPARTY_VTK_DLL_DIRS})
172
173         list (GET 3RDPARTY_VTK_DLL_DIRS 0 3RDPARTY_VTK_DLL_DIR)
174         set (3RDPARTY_VTK_DLL_DIR "${3RDPARTY_VTK_DLL_DIR}" CACHE PATH "The directory containing VTK shared libraries" FORCE)
175       endif()
176     endif()
177   endif()
178 endif()
179
180 if (3RDPARTY_VTK_INCLUDE_DIR AND EXISTS "${3RDPARTY_VTK_INCLUDE_DIR}")
181   list (APPEND 3RDPARTY_INCLUDE_DIRS ${3RDPARTY_VTK_INCLUDE_DIR})
182 else()
183   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_VTK_INCLUDE_DIR)
184 endif()
185
186 if (3RDPARTY_VTK_LIBRARY_DIR AND EXISTS "${3RDPARTY_VTK_LIBRARY_DIR}")
187   list (APPEND 3RDPARTY_LIBRARY_DIRS ${3RDPARTY_VTK_LIBRARY_DIR})
188 else()
189   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_VTK_LIBRARY_DIR)
190 endif()
191
192 if (WIN32)
193   if (3RDPARTY_VTK_DLL_DIR OR EXISTS "${3RDPARTY_VTK_DLL_DIR}")
194     list (APPEND 3RDPARTY_DLL_DIRS ${3RDPARTY_VTK_DLL_DIR})
195   else()
196     list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_VTK_DLL_DIR)
197   endif()
198 endif()
199
200 # the library directory for using by the executable
201 if (WIN32)
202   set (USED_3RDPARTY_VTK_DIR ${3RDPARTY_VTK_DLL_DIR})
203 else()
204   set (USED_3RDPARTY_VTK_DIR ${3RDPARTY_VTK_LIBRARY_DIR})
205 endif()
206
207 mark_as_advanced (VTK_INCLUDE_DIRS VTK_LIBRARY_DIRS VTK_DIR)