Skip to content

Commit

Permalink
ENH: Update VTK to v8.0.1 to support Qt4, to v9.2.2 to support Qt5
Browse files Browse the repository at this point in the history
* v8.0.1 is the last VTK version officially supporting Qt4

* Support passing CTK_VTK_VERSION_MAJOR to select the VTK version.
  Default is 9 if building against Qt5, and 8 if building against Qt4.

* Options for either Qt4 or Qt5 are passed to the currently selected
  VTK version based on the value of CTK_QT_VERSION

* Initialize VTK_PYTHON_VERSION with PYTHON_VERSION_MAJOR

* Remove setting of obsolete options VTK_USE_QT, VTK_USE_GUISUPPORT,
  DESIRED_QT_VERSION and VTK_USE_QVTK_QTOPENGL.

* Set OpenGL_GL_PREFERENCE. See Slicer/Slicer@23d814488 (BUG: Fix linux
  package removing dependency to GLVND libraries)
  • Loading branch information
jcfr committed Dec 14, 2022
1 parent 669ac6a commit 4cc9bc5
Showing 1 changed file with 102 additions and 13 deletions.
115 changes: 102 additions & 13 deletions CMakeExternals/VTK.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,27 @@ endif()

if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj})

set(revision_tag f3f70ec0912cf836a3d5954a95cb04f0237fbdc4)
if(NOT DEFINED CTK_VTK_VERSION_MAJOR)
if(CTK_QT_VERSION VERSION_LESS "5")
set(CTK_VTK_VERSION_MAJOR "8")
else()
set(CTK_VTK_VERSION_MAJOR "9")
endif()
endif()
if(NOT CTK_VTK_VERSION_MAJOR MATCHES "^(8|9)$")
message(FATAL_ERROR "Expected value for CTK_VTK_VERSION_MAJOR is either '8' or '9'")
endif()
ExternalProject_Message(${proj} "VTK[CTK_VTK_VERSION_MAJOR:${CTK_VTK_VERSION_MAJOR}]")

if(CTK_VTK_VERSION_MAJOR VERSION_EQUAL "8")
set(revision_tag v8.0.1)
elseif(CTK_VTK_VERSION_MAJOR VERSION_EQUAL "9")
set(revision_tag v9.2.2)
endif()
if(${proj}_REVISION_TAG)
set(revision_tag ${${proj}_REVISION_TAG})
endif()
ExternalProject_Message(${proj} "VTK[revision_tag:${revision_tag}]")

set(location_args )
if(${proj}_URL)
Expand All @@ -46,37 +63,110 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj})
endif()

set(additional_vtk_cmakevars )
set(additional_vtk8_cmakevars )
set(additional_vtk9_cmakevars )
if(MINGW)
list(APPEND additional_vtk_cmakevars -DCMAKE_USE_PTHREADS:BOOL=OFF)
endif()

if(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)

if(NOT DEFINED VTK_PYTHON_VERSION)
set(VTK_PYTHON_VERSION ${PYTHON_VERSION_MAJOR})
endif()
if(NOT "${VTK_PYTHON_VERSION}" STREQUAL "${PYTHON_VERSION_MAJOR}")
message(FATAL_ERROR "error: VTK_PYTHON_VERSION [${VTK_PYTHON_VERSION}] is expected to match PYTHON_VERSION_MAJOR [${PYTHON_VERSION_MAJOR}]")
endif()
if(VTK_PYTHON_VERSION VERSION_GREATER "2.7")
set(Python3_EXECUTABLE ${PYTHON_EXECUTABLE})
set(Python3_INCLUDE_DIR ${PYTHON_INCLUDE_DIR})
set(Python3_LIBRARY ${PYTHON_LIBRARY})
find_package(Python3 COMPONENTS Interpreter Development)
endif()

ctkFunctionExtractOptimizedLibrary(PYTHON_LIBRARIES PYTHON_LIBRARY)
list(APPEND additional_vtk_cmakevars
-DVTK_PYTHON_VERSION:STRING=${VTK_PYTHON_VERSION}
# FindPythonInterp, FindPythonLibs
-DPYTHON_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
-DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}
-DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}
-DPYTHON_DEBUG_LIBRARIES:FILEPATH=${PYTHON_DEBUG_LIBRARIES}
)
if(VTK_PYTHON_VERSION VERSION_GREATER "2.7")
# VTK9
list(APPEND additional_vtk9_cmakevars
# FindPython3
-DPython3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR}
-DPython3_LIBRARY:FILEPATH=${Python3_LIBRARY}
-DPython3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE}
)
endif()
endif()

if(CTK_QT_VERSION VERSION_LESS "5")
# Qt4
list(APPEND additional_vtk_cmakevars
-DVTK_QT_VERSION:STRING=4
-DDESIRED_QT_VERSION:STRING=4
-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
)
else()
# Qt5
list(APPEND additional_vtk_cmakevars
-DVTK_QT_VERSION:STRING=5
-DDESIRED_QT_VERSION:STRING=5
-DQt5_DIR:PATH=${Qt5_DIR}
)
# XXX Backward compatible way
if(DEFINED CMAKE_PREFIX_PATH)
list(APPEND additional_vtk_cmakevars
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
endif()

# VTK 8
list(APPEND additional_vtk8_cmakevars
-DModule_vtkChartsCore:BOOL=ON
-DModule_vtkRenderingContext2D:BOOL=ON
-DModule_vtkRenderingContextOpenGL2:BOOL=ON
-DModule_vtkGUISupportQt:BOOL=ON
-DModule_vtkGUISupportQtOpenGL:BOOL=ON # OpenGL2 rendering backend
-DModule_vtkTestingRendering:BOOL=ON
)

# VTK 9
list(APPEND additional_vtk9_cmakevars
-DVTK_MODULE_ENABLE_VTK_ChartsCore:STRING=YES
-DVTK_MODULE_ENABLE_VTK_ViewsContext2D:STRING=YES
-DVTK_MODULE_ENABLE_VTK_RenderingContext2D:STRING=YES
-DVTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2:STRING=YES
-DVTK_MODULE_ENABLE_VTK_GUISupportQt:STRING=YES
-DVTK_GROUP_ENABLE_Qt:STRING=YES
-DVTK_MODULE_ENABLE_VTK_GUISupportQtOpenGL:STRING=YES # OpenGL2 rendering backend
)
# XXX Backward compatible way
if(DEFINED CMAKE_PREFIX_PATH)
list(APPEND additional_vtk9_cmakevars
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
)
endif()

if(UNIX AND NOT APPLE)
find_package(FontConfig QUIET)
if(FONTCONFIG_FOUND)
# VTK8
list(APPEND additional_vtk8_cmakevars
-DModule_vtkRenderingFreeTypeFontConfig:BOOL=ON
)
# VTK9
list(APPEND additional_vtk9_cmakevars
-DVTK_MODULE_ENABLE_VTK_RenderingFreeTypeFontConfig:BOOL=ON
)
endif()

# OpenGL_GL_PREFERENCE
if(NOT DEFINED OpenGL_GL_PREFERENCE)
set(OpenGL_GL_PREFERENCE "LEGACY")
endif()
if(NOT "${OpenGL_GL_PREFERENCE}" MATCHES "^(LEGACY|GLVND)$")
message(FATAL_ERROR "OpenGL_GL_PREFERENCE variable is expected to be set to LEGACY or GLVND")
endif()
ExternalProject_Message(${proj} "VTK[OpenGL_GL_PREFERENCE:${OpenGL_GL_PREFERENCE}]")
list(APPEND additional_vtk_cmakevars
-DOpenGL_GL_PREFERENCE:STRING=${OpenGL_GL_PREFERENCE}
)
endif()

ExternalProject_Add(${proj}
Expand All @@ -89,15 +179,14 @@ if(NOT DEFINED VTK_DIR AND NOT ${CMAKE_PROJECT_NAME}_USE_SYSTEM_${proj})
CMAKE_CACHE_ARGS
${ep_common_cache_args}
${additional_vtk_cmakevars}
${additional_vtk${CTK_VTK_VERSION_MAJOR}_cmakevars}
-DVTK_WRAP_TCL:BOOL=OFF
-DVTK_USE_TK:BOOL=OFF
-DVTK_WRAP_PYTHON:BOOL=${CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK}
-DVTK_WRAP_JAVA:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=ON
-DVTK_USE_GUISUPPORT:BOOL=ON
-DVTK_USE_QVTK_QTOPENGL:BOOL=ON
-DVTK_USE_QT:BOOL=ON # VTK 5
-DVTK_Group_Qt:BOOL=ON # VTK 6
-DVTK_Group_Qt:BOOL=ON
-DVTK_QT_VERSION:STRING=${CTK_QT_VERSION}
-DVTK_LEGACY_REMOVE:BOOL=ON
DEPENDS
${${proj}_DEPENDENCIES}
Expand Down

0 comments on commit 4cc9bc5

Please sign in to comment.