0025244: CMake building procedure should support VTK usage
[occt.git] / adm / templates / vtk.cmake
diff --git a/adm/templates/vtk.cmake b/adm/templates/vtk.cmake
new file mode 100644 (file)
index 0000000..1b044db
--- /dev/null
@@ -0,0 +1,147 @@
+# vtk
+
+if (NOT DEFINED INSTALL_VTK)
+  set (INSTALL_VTK OFF CACHE BOOL "Is vtk required to be copied into install directory")
+endif()
+
+# vtk directory
+if (NOT DEFINED 3RDPARTY_VTK_DIR)
+  set (3RDPARTY_VTK_DIR "" CACHE PATH "The directory containing vtk")
+endif()
+
+# vtk include directory
+if (NOT DEFINED 3RDPARTY_VTK_INCLUDE_DIR)
+  set (3RDPARTY_VTK_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of vtk")
+endif()
+
+# vtk library directory
+if (NOT DEFINED 3RDPARTY_VTK_LIBRARY_DIR)
+  set (3RDPARTY_VTK_LIBRARY_DIR "" CACHE FILEPATH "The directory containing vtk library")
+endif()
+
+# vtk dll directory
+if (WIN32 AND NOT DEFINED 3RDPARTY_VTK_DLL_DIR)
+  set (3RDPARTY_VTK_DLL_DIR "" CACHE FILEPATH "The directory containing VTK dll")
+endif()
+
+# search for vtk in user defined directory
+if (NOT 3RDPARTY_VTK_DIR AND 3RDPARTY_DIR)
+  FIND_PRODUCT_DIR("${3RDPARTY_DIR}" vtk VTK_DIR_NAME)
+  if (VTK_DIR_NAME)
+    set (3RDPARTY_VTK_DIR "${3RDPARTY_DIR}/${VTK_DIR_NAME}" CACHE PATH "The directory containing vtk product" FORCE)
+  endif()
+endif()
+
+# find installed vtk
+find_package(VTK QUIET)
+
+# find native vtk
+if (NOT VTK_FOUND)
+  find_package(VTK QUIET PATHS "${3RDPARTY_VTK_DIR}")
+endif()
+
+if (NOT VTK_FOUND AND NOT 3RDPARTY_VTK_DIR OR NOT EXISTS "${3RDPARTY_VTK_DIR}")
+  message(SEND_ERROR "VTK not found. Set the 3RDPARTY_VTK_DIR cmake cache entry to the directory containing VTK.")
+  set (3RDPARTY_VTK_DIR "3RDPARTY_VTK_DIR-NOTFOUND" CACHE PATH "The directory containing vtk product" FORCE)
+endif()
+
+OCCT_MAKE_BUILD_POSTFIX()
+set(VTK_VERSION "")
+if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
+  get_filename_component(3RDPARTY_VTK_DIR_NAME "${3RDPARTY_VTK_DIR}" NAME)
+  string(REGEX MATCH "^VTK-([0-9].[0-9])" VTK_VERSION "${3RDPARTY_VTK_DIR_NAME}")
+  set(VTK_VERSION "${CMAKE_MATCH_1}")
+  if (NOT 3RDPARTY_VTK_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_VTK_INCLUDE_DIR}")
+    set (3RDPARTY_VTK_INCLUDE_DIR "${3RDPARTY_VTK_DIR}/include/vtk-${VTK_VERSION}" CACHE FILEPATH "The directory containing includes of VTK" FORCE)
+  endif()
+  if (NOT 3RDPARTY_VTK_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_VTK_LIBRARY_DIR}")
+    if(EXISTS "${3RDPARTY_VTK_DIR}/lib${BUILD_POSTFIX}")
+      set (3RDPARTY_VTK_LIBRARY_DIR "${3RDPARTY_VTK_DIR}/lib${BUILD_POSTFIX}" CACHE FILEPATH "The directory containing libs of VTK" FORCE)
+    endif()
+  else()
+    list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_VTK_LIBRARY_DIR}")
+  endif()
+endif()
+
+# vtk libraries
+# lib
+set (VTK_LIBRARY_NAMES vtkCommonCore-${VTK_VERSION}.lib vtkCommonDataModel-${VTK_VERSION}.lib vtkCommonExecutionModel-${VTK_VERSION}.lib 
+                       vtkCommonMath-${VTK_VERSION}.lib vtkCommonTransforms-${VTK_VERSION}.lib vtkRenderingCore-${VTK_VERSION}.lib 
+                       vtkRenderingOpenGL-${VTK_VERSION}.lib vtkFiltersGeneral-${VTK_VERSION}.lib vtkIOCore-${VTK_VERSION}.lib 
+                       vtkIOImage-${VTK_VERSION}.lib vtkImagingCore-${VTK_VERSION}.lib vtkInteractionStyle-${VTK_VERSION}.lib )
+
+#dll
+set (VTK_DLL_NAMES vtkCommonComputationalGeometry-${VTK_VERSION}.dll
+                   vtkCommonCore-${VTK_VERSION}.dll
+                   vtkCommonDataModel-${VTK_VERSION}.dll
+                   vtkCommonExecutionModel-${VTK_VERSION}.dll
+                   vtkCommonMath-${VTK_VERSION}.dll
+                   vtkCommonMisc-${VTK_VERSION}.dll
+                   vtkCommonSystem-${VTK_VERSION}.dll
+                   vtkCommonTransforms-${VTK_VERSION}.dll
+                   vtkDICOMParser-${VTK_VERSION}.dll
+                   vtkFiltersCore-${VTK_VERSION}.dll
+                   vtkFiltersExtraction-${VTK_VERSION}.dll
+                   vtkFiltersGeneral-${VTK_VERSION}.dll
+                   vtkFiltersGeometry-${VTK_VERSION}.dll
+                   vtkFiltersSources-${VTK_VERSION}.dll
+                   vtkFiltersStatistics-${VTK_VERSION}.dll
+                   vtkIOCore-${VTK_VERSION}.dll
+                   vtkIOImage-${VTK_VERSION}.dll
+                   vtkImagingCore-${VTK_VERSION}.dll
+                   vtkImagingFourier-${VTK_VERSION}.dll
+                   vtkImagingHybrid-${VTK_VERSION}.dll
+                   vtkInteractionStyle-${VTK_VERSION}.dll
+                   vtkRenderingCore-${VTK_VERSION}.dll
+                   vtkRenderingOpenGL-${VTK_VERSION}.dll
+                   vtkalglib-${VTK_VERSION}.dll
+                   vtkjpeg-${VTK_VERSION}.dll
+                   vtkmetaio-${VTK_VERSION}.dll
+                   vtkpng-${VTK_VERSION}.dll
+                   vtksys-${VTK_VERSION}.dll
+                   vtktiff-${VTK_VERSION}.dll
+                   vtkzlib-${VTK_VERSION}.dll )
+
+# search for dll directory
+if (WIN32)
+  if (NOT 3RDPARTY_VTK_DLL_DIR OR NOT EXISTS "${3RDPARTY_VTK_DLL_DIR}")
+    if(EXISTS "${3RDPARTY_VTK_DIR}/bin${BUILD_POSTFIX}")
+      set (3RDPARTY_VTK_DLL_DIR "${3RDPARTY_VTK_DIR}/bin${BUILD_POSTFIX}" CACHE FILEPATH "The directory containing dll of VTK" FORCE)
+    endif()
+  endif()
+endif() 
+
+OCCT_CHECK_AND_UNSET(VTK_DIR)
+
+if (3RDPARTY_VTK_INCLUDE_DIR AND EXISTS "${3RDPARTY_VTK_INCLUDE_DIR}")
+  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_VTK_INCLUDE_DIR}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_VTK_INCLUDE_DIR)
+endif()
+
+if (INSTALL_VTK)
+  OCCT_MAKE_OS_WITH_BITNESS()
+  OCCT_MAKE_COMPILER_SHORT_NAME()
+  if (WIN32)
+    if(3RDPARTY_VTK_DLL_DIR AND EXISTS "${3RDPARTY_VTK_DLL_DIR}")
+      set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
+      foreach(VTK_DLL_NAME ${VTK_DLL_NAMES})
+        set (3RDPARTY_VTK_DLL "3RDPARTY_VTK_DLL-NOTFOUND" CACHE FILEPATH "VTK shared library" FORCE)
+        find_library(3RDPARTY_VTK_DLL "${VTK_DLL_NAME}" PATHS "${3RDPARTY_VTK_DLL_DIR}" NO_DEFAULT_PATH)
+        if (NOT 3RDPARTY_VTK_DLL OR NOT EXISTS "${3RDPARTY_VTK_DLL}")
+          list (APPEND 3RDPARTY_NOT_INCLUDED "${3RDPARTY_VTK_DLL}")
+        else()
+          install (FILES ${3RDPARTY_VTK_DLL} DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
+        endif()
+      endforeach()
+      OCCT_CHECK_AND_UNSET(3RDPARTY_VTK_DLL)
+    endif()
+  else ()
+    foreach(VTK_DLL_NAME ${VTK_DLL_NAMES})
+      string(REPLACE ".dll" ".so.1" VTK_DLL_NAME "${VTK_DLL_NAME}")
+      install(FILES "${3RDPARTY_VTK_LIBRARY_DIR}/lib${VTK_DLL_NAME}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}" RENAME "lib${VTK_DLL_NAME}")
+    endforeach()
+  endif()
+endif()
+
+mark_as_advanced (VTK_INCLUDE_DIRS VTK_LIBRARY_DIRS VTK_DIR)