Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

375 lines
11 KiB

2 years ago
# 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)