Bladeren bron

Added option CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK

If enabled, PythonQt will be build with VTK support.

It means that slots returning vtk-based Object and/or
accepting vtk-based object as argument(s) will be properly handled.
Jean-Christophe Fillion-Robin 14 jaren geleden
bovenliggende
commit
7649b3c2b6

+ 1 - 0
Applications/ctkSimplePythonShell/target_libraries.cmake

@@ -5,5 +5,6 @@
 # 
 
 SET(target_libraries
+  VTK_LIBRARIES
   CTKScriptingPythonWidgets
   )

+ 8 - 0
CMakeExternals/PythonQt.cmake

@@ -21,6 +21,14 @@ IF(${add_project})
   #   MESSAGE(STATUS "Adding project:${proj}")
     
     SET(ep_PythonQt_args)
+    
+    # Should PythonQt use VTK 
+    IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+      LIST(APPEND proj_DEPENDENCIES VTK)
+      LIST(APPEND ep_PythonQt_args -DVTK_DIR:PATH=${VTK_DIR})
+    ENDIF()
+    LIST(APPEND ep_PythonQt_args -DPythonQt_USE_VTK:BOOL=${CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK})
+    
     # Enable Qt libraries PythonQt wrapping if required
     foreach(qtlib core gui network opengl sql svg uitools webkit xml xmlpatterns)
       STRING(TOUPPER ${qtlib} qtlib_uppercase)

+ 12 - 3
CMakeExternals/VTK.cmake

@@ -3,7 +3,7 @@
 #
 SET (VTK_DEPENDS)
 ctkMacroShouldAddExternalProject(VTK_LIBRARIES add_project)
-IF(${add_project})
+IF(${add_project} OR CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
   # Sanity checks
   IF(DEFINED VTK_DIR AND NOT EXISTS ${VTK_DIR})
     MESSAGE(FATAL_ERROR "VTK_DIR variable is defined but corresponds to non-existing directory")
@@ -13,7 +13,15 @@ IF(${add_project})
   
   SET(additional_vtk_cmakevars )
   IF(MINGW)
-    SET(additional_vtk_cmakevars "-DCMAKE_USE_PTHREADS:BOOL=OFF")
+    LIST(APPEND additional_vtk_cmakevars -DCMAKE_USE_PTHREADS:BOOL=OFF)
+  ENDIF()
+  
+  IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+    LIST(APPEND additional_vtk_cmakevars
+      -DPYTHON_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
+      -DPYTHON_LIBRARIES:FILEPATH=${PYTHON_LIBRARIES}
+      -DPYTHON_DEBUG_LIBRARIES:FILEPATH=${PYTHON_DEBUG_LIBRARIES}
+      )
   ENDIF()
 
   SET(proj VTK)
@@ -32,7 +40,8 @@ IF(${add_project})
         ${ep_common_args}
         ${additional_vtk_cmakevars}
         -DVTK_WRAP_TCL:BOOL=OFF
-        -DVTK_WRAP_PYTHON: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 
         -DDESIRED_QT_VERSION:STRING=4

+ 14 - 4
CMakeLists.txt

@@ -445,7 +445,11 @@ ctkMacroValidateBuildOptions("${CTK_BINARY_DIR}" "${DGraph_EXECUTABLE}" "${targe
 IF(CTK_LIB_Scripting/Python/Core)
   find_package(PythonInterp)
   IF(NOT PYTHONINTERP_FOUND)
-    MESSAGE(SEND_ERROR "PYTHON_EXECUTABLE not specified or inexistent when CTK_LIB_Scripting is enabled")
+    MESSAGE(SEND_ERROR "PYTHON_EXECUTABLE variable should be set to build CTK_LIB_Scripting/Python")
+  ENDIF()
+  FIND_PACKAGE(PythonLibs)
+  IF(NOT PYTHONLIBS_FOUND)
+    MESSAGE(FATAL_ERROR "PYTHON_LIBRARIES and PYTHON_INCLUDE_DIRS should be set to build CTK_LIB_Scripting/Python")
   ENDIF()
   OPTION(CTK_WRAP_PYTHONQT_FULL "Wrap CTK classes using Qt meta-object system into Python language" OFF)
   OPTION(CTK_WRAP_PYTHONQT_LIGHT "Wrap CTK classes using Qt meta-object system into Python language" OFF)
@@ -479,9 +483,8 @@ IF(RESULT_VAR)
   MESSAGE(FATAL_ERROR "Failed to obtain list of target ordered topologically.\n${RESULT_VAR}\n${CTK_BINARY_DIR}\n${error}")
 ENDIF()
 
-
 # Convert 'CTEST_PROJECT_SUBPROJECTS_OUTPUT' to a list
-STRING(REPLACE " " "\\;" CTEST_PROJECT_SUBPROJECTS ${CTEST_PROJECT_SUBPROJECTS_OUTPUT})
+STRING(REPLACE " " "\\;" CTEST_PROJECT_SUBPROJECTS "${CTEST_PROJECT_SUBPROJECTS_OUTPUT}")
 SET(CTEST_PROJECT_SUBPROJECTS ${CTEST_PROJECT_SUBPROJECTS})
 
 # If the list of subproject is empty, let's at least build CTKCore
@@ -516,7 +519,7 @@ ENDIF()
 FOREACH(_external_target ${EXTERNAL_TARGETS})
   IF(${_external_target}_FIND_PACKAGE_CMD)
     #MESSAGE("Calling FIND_PACKAGE(${${_external_target}_FIND_PACKAGE_CMD})")
-    FIND_PACKAGE(${${_external_target}_FIND_PACKAGE_CMD})
+    FIND_PACKAGE(${${_external_target}_FIND_PACKAGE_CMD} REQUIRED)
   ENDIF()
 ENDFOREACH()
 
@@ -540,6 +543,13 @@ FOREACH(_external_target ${EXTERNAL_TARGETS})
   ENDIF()
 ENDFOREACH()
 
+# Since PYTHONQT_USE_VTK library option can be enabled independently of
+# Visualization/VTK/Core, let's make sure VTK has been properly discovered
+IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+  FIND_PACKAGE(VTK REQUIRED)
+ENDIF()
+SET(CTK_WRAP_PYTHONQT_USE_VTK ${CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK})
+
 #-----------------------------------------------------------------------------
 # CTK_SUPERBUILD_BINARY_DIR
 

+ 11 - 0
Libs/Scripting/Python/Core/CMakeLists.txt

@@ -1,5 +1,11 @@
 PROJECT(CTKScriptingPythonCore)
 
+#
+# 3rd party dependencies
+#
+IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+  INCLUDE(${VTK_USE_FILE})
+ENDIF()
 
 #
 # See CTK/CMake/ctkMacroBuildLib.cmake for details
@@ -44,6 +50,11 @@ CONFIGURE_FILE(
 # The following macro will read the target libraries from the file 'target_libraries.cmake'
 ctkMacroGetTargetLibraries(KIT_target_libraries)
 
+# Link against vtkPython if required
+IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+  LIST(APPEND KIT_target_libraries vtkPythonCore)
+ENDIF()
+
 ctkMacroBuildLib(
   NAME ${PROJECT_NAME}
   EXPORT_DIRECTIVE ${KIT_export_directive}

+ 1 - 0
Libs/Scripting/Python/Core/ctk_library_options.cmake

@@ -6,6 +6,7 @@
 #
 
 SET(ctk_library_options
+  PYTHONQT_USE_VTK:OFF
   PYTHONQT_WRAP_QTCORE:OFF
   PYTHONQT_WRAP_QTGUI:OFF
   PYTHONQT_WRAP_QTNETWORK:OFF

+ 3 - 0
Libs/Scripting/Python/Widgets/CMakeLists.txt

@@ -3,6 +3,9 @@ PROJECT(CTKScriptingPythonWidgets)
 #
 # 3rd party dependencies
 #
+IF(CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
+  INCLUDE(${VTK_USE_FILE})
+ENDIF()
 
 #
 # See CTK/CMake/ctkMacroBuildLib.cmake for details

+ 2 - 2
SuperBuild.cmake

@@ -108,12 +108,13 @@ ctkMacroGetAllNonCTKTargetLibraries("${ALL_TARGET_LIBRARIES}" NON_CTK_DEPENDENCI
 #
 
 #-----------------------------------------------------------------------------
-# ExternalProjects
+# ExternalProjects - Project should be topologically ordered
 #
 SET(external_projects
   CTKData
   Log4Qt
   KWStyle
+  VTK
   PythonQt
   PythonQtGenerator # Should be added after PythonQt - See comment in CMakeExternals/PythonQtGenerator.cmake
   DCMTK
@@ -121,7 +122,6 @@ SET(external_projects
   QtMobility
   QtSOAP
   OpenIGTLink
-  VTK
   XIP
   )