# create the VTK/Python executable CONFIGURE_FILE(${VTK_SOURCE_DIR}/Wrapping/Python/vtkPythonAppInitConfigure.h.in ${VTK_BINARY_DIR}/Wrapping/Python/vtkPythonAppInitConfigure.h) ADD_EXECUTABLE(vtkpython vtkPythonAppInit.cxx) IF(CMAKE_SYSTEM_NAME MATCHES "AIX") GET_FILENAME_COMPONENT(CMAKE_PYTHON_LIB_PREFIX "${PYTHON_LIBRARY}" PATH) FIND_FILE(CMAKE_PYTHON_LIBRARY_EXPORT python.exp "${CMAKE_PYTHON_LIB_PREFIX}") SET_TARGET_PROPERTIES( vtkpython PROPERTIES LINK_FLAGS "-Wl,-bE:${CMAKE_PYTHON_LIBRARY_EXPORT}") ENDIF(CMAKE_SYSTEM_NAME MATCHES "AIX") IF(VTK_USE_CARBON) FIND_PROGRAM(VTK_APPLE_RESOURCE Rez /Developer/Tools) IF(VTK_APPLE_RESOURCE) ADD_CUSTOM_COMMAND( SOURCE vtkpython COMMAND ${VTK_APPLE_RESOURCE} ARGS Carbon.r -o ${VTK_EXECUTABLE_DIR}/vtkpython TARGET vtkpython ) ENDIF(VTK_APPLE_RESOURCE) ENDIF(VTK_USE_CARBON) IF(UNIX) FIND_LIBRARY(PYTHON_UTIL_LIBRARY NAMES util PATHS /usr/lib DOC "Utility library needed for vtkpython" ) MARK_AS_ADVANCED(PYTHON_UTIL_LIBRARY) IF(PYTHON_UTIL_LIBRARY) SET(PYTHON_UTIL_LIBRARY_LIB ${PYTHON_UTIL_LIBRARY}) ENDIF(PYTHON_UTIL_LIBRARY) ENDIF(UNIX) IF (APPLE) SET_TARGET_PROPERTIES(vtkpython PROPERTIES LINK_FLAGS "-flat_namespace -undefined suppress -u _PyMac_Error") ENDIF (APPLE) # Link against all the kit wrappers. TARGET_LINK_LIBRARIES(vtkpython ${VTK_PYTHON_LIBRARIES} vtksys vtkCommon vtkFiltering vtkIO vtkGraphics vtkImaging ${PYTHON_UTIL_LIBRARY_LIB}) SET (vtkpython_pyc_depends vtkCommonPython vtkFilteringPython vtkIOPython vtkGraphicsPython vtkImagingPython ) IF(VTK_WRAP_TCL) TARGET_LINK_LIBRARIES(vtkpython ${VTK_TK_LIBRARIES}) ENDIF(VTK_WRAP_TCL) IF(BORLAND) SET(KITS Common Filtering Graphics IO Imaging) IF (VTK_USE_PARALLEL) SET(KITS ${KITS} Parallel) ENDIF(VTK_USE_PARALLEL) IF (VTK_USE_RENDERING) SET(KITS ${KITS} Widgets) SET(KITS ${KITS} Hybrid) SET(KITS ${KITS} VolumeRendering) SET(KITS ${KITS} Rendering) ENDIF(VTK_USE_RENDERING) FOREACH(KIT ${KITS}) WRITE_FILE(${LIBRARY_OUTPUT_PATH}/vtk${KIT}Python.def "EXPORTS\ninitvtk${KIT}Python=_initvtk${KIT}Python\n") ENDFOREACH(KIT) ENDIF(BORLAND) IF (VTK_USE_RENDERING) TARGET_LINK_LIBRARIES(vtkpython vtkRendering) TARGET_LINK_LIBRARIES(vtkpython vtkVolumeRendering) TARGET_LINK_LIBRARIES(vtkpython vtkHybrid) TARGET_LINK_LIBRARIES(vtkpython vtkWidgets) SET (vtkpython_pyc_depends ${vtkpython_pyc_depends} vtkRenderingPython vtkVolumeRenderingPython vtkHybridPython vtkWidgetsPython ) ENDIF (VTK_USE_RENDERING) IF (VTK_USE_PARALLEL) TARGET_LINK_LIBRARIES(vtkpython vtkParallel) SET(vtkpython_pyc_depends ${vtkpython_pyc_depends} vtkParallelPython ) ENDIF (VTK_USE_PARALLEL) # Link to rt to prevent undefined symbol 'fdatasync' IF(CMAKE_SYSTEM MATCHES "SunOS.*") IF(NOT CMAKE_COMPILER_IS_GNUCXX) FIND_LIBRARY(VTK_SUNCC_RT_LIBRARY rt /usr/lib) IF(VTK_SUNCC_RT_LIBRARY) TARGET_LINK_LIBRARIES(vtkpython ${VTK_SUNCC_RT_LIBRARY}) ENDIF(VTK_SUNCC_RT_LIBRARY) ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*") # Create the pvtkpython Python wrapper executable with MPI support. IF (VTK_USE_PARALLEL) IF (VTK_USE_MPI) ADD_EXECUTABLE(pvtkpython vtkParaPythonAppInit.cxx) IF(CMAKE_SYSTEM_NAME MATCHES "AIX") SET_TARGET_PROPERTIES( pvtkpython PROPERTIES LINK_FLAGS "-Wl,-bE:${CMAKE_PYTHON_LIBRARY_EXPORT}") ENDIF(CMAKE_SYSTEM_NAME MATCHES "AIX") IF(VTK_USE_CARBON) FIND_PROGRAM(VTK_APPLE_RESOURCE Rez /Developer/Tools) IF(VTK_APPLE_RESOURCE) ADD_CUSTOM_COMMAND( SOURCE pvtkpython COMMAND ${VTK_APPLE_RESOURCE} ARGS Carbon.r -o ${VTK_EXECUTABLE_DIR}/pvtkpython TARGET pvtkpython ) ENDIF(VTK_APPLE_RESOURCE) ENDIF(VTK_USE_CARBON) TARGET_LINK_LIBRARIES (pvtkpython ${VTK_PYTHON_LIBRARIES} vtksys vtkCommon vtkFiltering vtkIO vtkGraphics vtkImaging vtkParallel ${PYTHON_UTIL_LIBRARY_LIB} ) IF (VTK_USE_RENDERING) TARGET_LINK_LIBRARIES(pvtkpython vtkVolumeRendering) TARGET_LINK_LIBRARIES(pvtkpython vtkHybrid) TARGET_LINK_LIBRARIES(pvtkpython vtkWidgets) ENDIF (VTK_USE_RENDERING) IF(NOT VTK_INSTALL_NO_RUNTIME) INSTALL_TARGETS(${VTK_INSTALL_BIN_DIR} pvtkpython) ENDIF(NOT VTK_INSTALL_NO_RUNTIME) ENDIF (VTK_USE_MPI) ENDIF (VTK_USE_PARALLEL) IF(NOT VTK_INSTALL_NO_RUNTIME) INSTALL_TARGETS(${VTK_INSTALL_BIN_DIR} vtkpython) ENDIF(NOT VTK_INSTALL_NO_RUNTIME) # Handle out-of-source builds correctly. # # 1. Create a list of Python files to be installed/copied. # 2. Copy them to VTK_BINARY_DIR if it is different from VTK_SOURCE_DIR. # 3. Use Python's compileall to compile the copied files. # # *** Step 1 has to be done carefully to avoid missing out files *** IF(PYTHON_EXECUTABLE) # Make the necessary directories. FOREACH(dir ${VTK_BINARY_DIR}/Wrapping/Python/vtk/gtk ${VTK_BINARY_DIR}/Wrapping/Python/vtk/qt ${VTK_BINARY_DIR}/Wrapping/Python/vtk/tk ${VTK_BINARY_DIR}/Wrapping/Python/vtk/util ${VTK_BINARY_DIR}/Wrapping/Python/vtk/wx ${VTK_BINARY_DIR}/Wrapping/Python/vtk/test ) MAKE_DIRECTORY(${dir}) ENDFOREACH(dir) # Now create a list of Python files. # Wrapping/Python/vtk/*.py SET(VTK_PYTHON_FILES vtk/__helper vtk/__init__ vtk/common vtk/filtering vtk/genericfiltering vtk/graphics vtk/hybrid vtk/imaging vtk/io vtk/parallel vtk/rendering vtk/required vtk/volumerendering vtk/widgets ) # vtk.util package SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/util/__init__ vtk/util/vtkMethodParser vtk/util/misc vtk/util/vtkConstants vtk/util/vtkImageExportToArray vtk/util/vtkImageImportFromArray vtk/util/colors ) # vtk.test package SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/test/BlackBox vtk/test/Testing vtk/test/__init__ ) # Tk related files SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/tk/__init__ vtk/tk/vtkLoadPythonTkWidgets vtk/tk/vtkTkImageViewerWidget vtk/tk/vtkTkRenderWidget vtk/tk/vtkTkRenderWindowInteractor vtk/tk/vtkTkPhotoImage ) # QT related files SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/qt/QVTKRenderWidget vtk/qt/__init__ vtk/qt/QVTKRenderWindowInteractor ) # wxPython related files SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/wx/__init__ vtk/wx/wxVTKRenderWindow vtk/wx/wxVTKRenderWindowInteractor ) # pyGTK related files SET(VTK_PYTHON_FILES ${VTK_PYTHON_FILES} vtk/gtk/GtkVTKRenderWindow vtk/gtk/__init__ vtk/gtk/GtkVTKRenderWindowInteractor ) # Done listing of files. # Now copy these files if necessary. SET(VTK_PYTHON_SOURCE_FILES) SET(VTK_PYTHON_OUTPUT_FILES) FOREACH(file ${VTK_PYTHON_FILES}) SET(src "${VTK_BINARY_DIR}/Wrapping/Python/${file}.py") SET(VTK_PYTHON_SOURCE_FILES ${VTK_PYTHON_SOURCE_FILES} ${src}) ENDFOREACH(file) IF ("${VTK_BINARY_DIR}" MATCHES "^${VTK_SOURCE_DIR}$") #MESSAGE("In source build -- no need to copy Python files.") ELSE ("${VTK_BINARY_DIR}" MATCHES "^${VTK_SOURCE_DIR}$") FOREACH(file ${VTK_PYTHON_FILES}) SET(src "${VTK_SOURCE_DIR}/Wrapping/Python/${file}.py") SET(tgt "${VTK_BINARY_DIR}/Wrapping/Python/${file}.py") ADD_CUSTOM_COMMAND(DEPENDS ${src} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${src} ${tgt} OUTPUT ${tgt} COMMENT "source copy") ENDFOREACH(file) ENDIF ("${VTK_BINARY_DIR}" MATCHES "^${VTK_SOURCE_DIR}$") # Byte compile the Python files. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/compile_all_vtk.py.in ${CMAKE_CURRENT_BINARY_DIR}/compile_all_vtk.py @ONLY IMMEDIATE) ADD_CUSTOM_COMMAND( COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_BINARY_DIR}/compile_all_vtk.py DEPENDS ${VTK_PYTHON_SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/compile_all_vtk.py OUTPUT "${VTK_BINARY_DIR}/Wrapping/Python/vtk_compile_complete" ) # Create a target on which custom commands can depend. When this # is up-to-date, it is safe to run VTK python code. Therefore # this should also depend on the vtkpython executable. ADD_CUSTOM_TARGET(vtkpython_pyc ALL echo "..." DEPENDS "${VTK_BINARY_DIR}/Wrapping/Python/vtk_compile_complete") ADD_DEPENDENCIES(vtkpython_pyc vtkpython ${vtkpython_pyc_depends}) # If no runtime is to be installed then do not install python modules. IF(VTK_INSTALL_NO_RUNTIME) SET(VTK_INSTALL_NO_PYTHON 1) ENDIF(VTK_INSTALL_NO_RUNTIME) # Add a rule to use python distutils to install the python wrappers. IF(NOT VTK_INSTALL_NO_PYTHON) SET(DOLLAR "$") # Create default python setup arguments if they are not set. IF(DEFINED VTK_PYTHON_SETUP_ARGS) ELSE(DEFINED VTK_PYTHON_SETUP_ARGS) SET(VTK_PYTHON_SETUP_ARGS "--prefix=\"${DOLLAR}{CMAKE_INSTALL_PREFIX}\"" CACHE STRING "Arguments passed to \"python setup.py install ...\" during installation.") MARK_AS_ADVANCED(VTK_PYTHON_SETUP_ARGS) ENDIF(DEFINED VTK_PYTHON_SETUP_ARGS) # If there are multiple configurations then add a BUILD_TYPE=... # argument to the python setup.py call. The build type to use is set # in the CMake variable BUILD_TYPE while running the install script. IF(CMAKE_CONFIGURATION_TYPES) SET(VTK_PYTHON_SETUP_BUILD_TYPE "BUILD_TYPE=${DOLLAR}{BUILD_TYPE}") ELSE(CMAKE_CONFIGURATION_TYPES) SET(VTK_PYTHON_SETUP_BUILD_TYPE) ENDIF(CMAKE_CONFIGURATION_TYPES) # Configure the post-install script to run python on setup.py. CONFIGURE_FILE(${VTK_SOURCE_DIR}/Wrapping/Python/PythonInstall.cmake.in ${VTK_BINARY_DIR}/Wrapping/Python/PythonInstall.cmake @ONLY IMMEDIATE) SET_TARGET_PROPERTIES(vtkpython_pyc PROPERTIES POST_INSTALL_SCRIPT ${VTK_BINARY_DIR}/Wrapping/Python/PythonInstall.cmake ) ENDIF(NOT VTK_INSTALL_NO_PYTHON) ENDIF(PYTHON_EXECUTABLE) # Create the setup.py file. IF(CMAKE_CONFIGURATION_TYPES) # The build has multiple configuration types. If CMAKE_BUILD_TYPE # is set use it as the default BUILD_TYPE for setup.py to install. SET(VTK_PYTHON_HAS_CONFIG_TYPES 1) IF(CMAKE_BUILD_TYPE) SET(VTK_PYTHON_BUILD_TYPE "\"${CMAKE_BUILD_TYPE}\"") ELSE(CMAKE_BUILD_TYPE) SET(VTK_PYTHON_BUILD_TYPE "[]") ENDIF(CMAKE_BUILD_TYPE) ELSE(CMAKE_CONFIGURATION_TYPES) # The build has one configuration type. The build type does not # affect installation. SET(VTK_PYTHON_HAS_CONFIG_TYPES 0) SET(VTK_PYTHON_BUILD_TYPE "[]") ENDIF(CMAKE_CONFIGURATION_TYPES) IF(VTK_USE_RENDERING) SET(VTK_PYTHON_USE_RENDERING 1) ELSE(VTK_USE_RENDERING) SET(VTK_PYTHON_USE_RENDERING 0) ENDIF(VTK_USE_RENDERING) IF(VTK_USE_PARALLEL) SET(VTK_PYTHON_USE_PARALLEL 1) ELSE(VTK_USE_PARALLEL) SET(VTK_PYTHON_USE_PARALLEL 0) ENDIF(VTK_USE_PARALLEL) IF(VTK_USE_MPI) SET(VTK_PYTHON_USE_MPI 1) ELSE(VTK_USE_MPI) SET(VTK_PYTHON_USE_MPI 0) ENDIF(VTK_USE_MPI) CONFIGURE_FILE(${VTK_SOURCE_DIR}/Wrapping/Python/setup.py.in ${VTK_BINARY_DIR}/Wrapping/Python/setup.py @ONLY IMMEDIATE) # Allow the user to customize their build with some local options # INCLUDE (${VTK_BINARY_DIR}/Wrapping/Tcl/LocalUserOptions.cmake OPTIONAL) INCLUDE (${VTK_SOURCE_DIR}/Wrapping/Tcl/LocalUserOptions.cmake OPTIONAL)