From 4cc9bc503949f5624a8ccfea94ede56ac1b96e88 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Wed, 2 Nov 2022 03:27:52 -0400 Subject: [PATCH] ENH: Update VTK to v8.0.1 to support Qt4, to v9.2.2 to support Qt5 * 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) --- CMakeExternals/VTK.cmake | 115 ++++++++++++++++++++++++++++++++++----- 1 file changed, 102 insertions(+), 13 deletions(-) diff --git a/CMakeExternals/VTK.cmake b/CMakeExternals/VTK.cmake index 9e8188d19b..5f344a718f 100644 --- a/CMakeExternals/VTK.cmake +++ b/CMakeExternals/VTK.cmake @@ -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) @@ -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} @@ -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}