From 34903fe1ba157683efb0062abcc73cd163d5ff89 Mon Sep 17 00:00:00 2001 From: "Marcus D. Hanwell" <marcus.hanwell@kitware.com> Date: Sat, 9 Mar 2013 15:49:26 -0500 Subject: [PATCH] Move the Python wrapping to the end This moves the Python wrapping to the end of the build process, using the information exported by the module files. Change-Id: I711382f79fc1fdb15cd80c87f55dd2f97a2c5cd8 --- CMake/vtkModuleMacros.cmake | 5 + CMake/vtkPythonWrapping.cmake | 18 +- CMake/vtkWrapPython.cmake | 160 ++++++- CMake/vtkWrapping.cmake | 10 +- CMakeLists.txt | 7 +- Common/Core/CMakeLists.txt | 42 +- Common/DataModel/CMakeLists.txt | 2 + Wrapping/Python/CMakeLists.txt | 424 +++++++----------- Wrapping/Python/setup_install_paths.py | 2 +- Wrapping/Python/vtkpython.cxx.in | 2 - Wrapping/PythonCore/CMakeLists.txt | 45 ++ .../{Python => PythonCore}/PyVTKClass.cxx | 0 Wrapping/{Python => PythonCore}/PyVTKClass.h | 0 .../PyVTKMutableObject.cxx | 0 .../PyVTKMutableObject.h | 0 .../{Python => PythonCore}/PyVTKObject.cxx | 0 Wrapping/{Python => PythonCore}/PyVTKObject.h | 0 .../PyVTKSpecialObject.cxx | 0 .../PyVTKSpecialObject.h | 0 .../{Python => PythonCore}/PyVTKTemplate.cxx | 0 .../{Python => PythonCore}/PyVTKTemplate.h | 0 .../{Python => PythonCore}/conversionlist.in | 0 Wrapping/{Python => PythonCore}/module.cmake | 0 .../{Python => PythonCore}/vtkPythonArgs.cxx | 0 .../{Python => PythonCore}/vtkPythonArgs.h | 0 .../vtkPythonCommand.cxx | 0 .../{Python => PythonCore}/vtkPythonCommand.h | 0 .../vtkPythonOverload.cxx | 0 .../vtkPythonOverload.h | 0 .../{Python => PythonCore}/vtkPythonUtil.cxx | 0 .../{Python => PythonCore}/vtkPythonUtil.h | 0 31 files changed, 440 insertions(+), 277 deletions(-) delete mode 100644 Wrapping/Python/vtkpython.cxx.in create mode 100644 Wrapping/PythonCore/CMakeLists.txt rename Wrapping/{Python => PythonCore}/PyVTKClass.cxx (100%) rename Wrapping/{Python => PythonCore}/PyVTKClass.h (100%) rename Wrapping/{Python => PythonCore}/PyVTKMutableObject.cxx (100%) rename Wrapping/{Python => PythonCore}/PyVTKMutableObject.h (100%) rename Wrapping/{Python => PythonCore}/PyVTKObject.cxx (100%) rename Wrapping/{Python => PythonCore}/PyVTKObject.h (100%) rename Wrapping/{Python => PythonCore}/PyVTKSpecialObject.cxx (100%) rename Wrapping/{Python => PythonCore}/PyVTKSpecialObject.h (100%) rename Wrapping/{Python => PythonCore}/PyVTKTemplate.cxx (100%) rename Wrapping/{Python => PythonCore}/PyVTKTemplate.h (100%) rename Wrapping/{Python => PythonCore}/conversionlist.in (100%) rename Wrapping/{Python => PythonCore}/module.cmake (100%) rename Wrapping/{Python => PythonCore}/vtkPythonArgs.cxx (100%) rename Wrapping/{Python => PythonCore}/vtkPythonArgs.h (100%) rename Wrapping/{Python => PythonCore}/vtkPythonCommand.cxx (100%) rename Wrapping/{Python => PythonCore}/vtkPythonCommand.h (100%) rename Wrapping/{Python => PythonCore}/vtkPythonOverload.cxx (100%) rename Wrapping/{Python => PythonCore}/vtkPythonOverload.h (100%) rename Wrapping/{Python => PythonCore}/vtkPythonUtil.cxx (100%) rename Wrapping/{Python => PythonCore}/vtkPythonUtil.h (100%) diff --git a/CMake/vtkModuleMacros.cmake b/CMake/vtkModuleMacros.cmake index ac1b08b8107..88c6c0541dd 100644 --- a/CMake/vtkModuleMacros.cmake +++ b/CMake/vtkModuleMacros.cmake @@ -201,6 +201,7 @@ function(vtk_module_export sources) get_source_file_property(_wrap_exclude ${src} WRAP_EXCLUDE) get_source_file_property(_abstract ${src} ABSTRACT) get_source_file_property(_wrap_special ${src} WRAP_SPECIAL) + get_source_file_property(_wrap_header ${src} WRAP_HEADER) if(_wrap_special OR NOT _wrap_exclude) list(APPEND vtk-module-CLASSES ${_cls}) @@ -219,6 +220,10 @@ function(vtk_module_export sources) set(vtk-module-WRAP_SPECIAL "${vtk-module-WRAP_SPECIAL}set(${vtk-module}_CLASS_${_cls}_WRAP_SPECIAL 1)\n") endif() + if(_wrap_header) + set(vtk-module-WRAP_SPECIAL + "${vtk-module-WRAP_SPECIAL}set(${vtk-module}_CLASS_${_cls}_WRAP_HEADER 1)\n") + endif() endif() endif() endif() diff --git a/CMake/vtkPythonWrapping.cmake b/CMake/vtkPythonWrapping.cmake index 99e03d7a468..a3eed82b15e 100644 --- a/CMake/vtkPythonWrapping.cmake +++ b/CMake/vtkPythonWrapping.cmake @@ -1,9 +1,9 @@ find_package(PythonLibs REQUIRED) include(vtkWrapPython) -function(vtk_add_python_wrapping module_name module_srcs module_hdrs) +function(vtk_add_python_wrapping module_name) if(NOT VTK_WRAP_PYTHON_INIT_EXE) - if (TARGET vtkWrapPythonInit) + if(TARGET vtkWrapPythonInit) set (VTK_WRAP_PYTHON_INIT_EXE vtkWrapPythonInit) else() message(FATAL_ERROR "VTK must be built with Python wrapping turned on.") @@ -30,21 +30,13 @@ function(vtk_add_python_wrapping module_name module_srcs module_hdrs) set(XY ${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}) # Figure out the dependent PythonXYD libraries for the module - foreach(dep ${${vtk-module}_LINK_DEPENDS}) - if(NOT "${vtk-module}" STREQUAL "${dep}" AND TARGET ${dep}PythonD) + foreach(dep ${${module_name}_DEPENDS}) + if(NOT "${module_name}" STREQUAL "${dep}" AND TARGET ${dep}PythonD) list(APPEND extra_links ${dep}PythonD) endif() endforeach() - set(_wrap_files ${module_srcs}) - foreach(hdr ${module_hdrs}) - get_source_file_property(_wrap_header "${hdr}" WRAP_HEADER) - if(_wrap_header) - list(APPEND _wrap_files "${hdr}") - endif() - endforeach() - - vtk_wrap_python3(${module_name}Python Python_SRCS "${_wrap_files}") + vtk_wrap_python(${module_name}Python Python_SRCS ${module_name}) vtk_add_library(${module_name}PythonD ${Python_SRCS} ${extra_srcs}) get_property(output_name TARGET ${module_name}PythonD PROPERTY OUTPUT_NAME) string(REPLACE "PythonD" "Python${XY}D" output_name "${output_name}") diff --git a/CMake/vtkWrapPython.cmake b/CMake/vtkWrapPython.cmake index b28464502e9..058ecff32dc 100644 --- a/CMake/vtkWrapPython.cmake +++ b/CMake/vtkWrapPython.cmake @@ -1,5 +1,5 @@ # -# a cmake implementation of the Wrap Python command +# CMake implementation of the Wrap Python command. # macro(VTK_WRAP_PYTHON2 TARGET SOURCE_LIST_NAME) # convert to the WRAP3 signature @@ -198,3 +198,161 @@ if(VTK_WRAP_PYTHON_FIND_LIBS) # Include any extra libraries for python. set(VTK_PYTHON_LIBRARIES ${VTK_PYTHON_LIBRARIES} ${PYTHON_EXTRA_LIBS}) endif() + +# Determine the location of the supplied header in the include_dirs supplied. +macro(vtk_find_header header include_dirs full_path) + unset(${full_path}) + foreach(_dir ${include_dirs}) + if(EXISTS "${_dir}/${header}") + set(${full_path} "${_dir}/${header}") + break() + endif() + endforeach() +endmacro() + +# Macro that just takes the name of the module, figure the rest out from there. +macro(vtk_wrap_python TARGET SRC_LIST_NAME module) + if(NOT VTK_WRAP_PYTHON_INIT_EXE) + if(TARGET vtkWrapPythonInit) + set(VTK_WRAP_PYTHON_INIT_EXE vtkWrapPythonInit) + else() + message(SEND_ERROR + "VTK_WRAP_PYTHON_INIT_EXE not specified when calling VTK_WRAP_PYTHON3") + endif() + endif() + if(NOT VTK_WRAP_PYTHON_EXE) + if(TARGET vtkWrapPython) + set(VTK_WRAP_PYTHON_EXE vtkWrapPython) + else() + message(SEND_ERROR + "VTK_WRAP_PYTHON_EXE not specified when calling vtk_wrap_python") + endif() + endif() + + # The shell into which nmake.exe executes the custom command has some issues + # with mixing quoted and unquoted arguments :( Let's help. + if(CMAKE_GENERATOR MATCHES "NMake Makefiles") + set(verbatim "") + set(quote "\"") + else() + set(verbatim "VERBATIM") + set(quote "") + endif() + + # Initialize the custom target counter. + if(VTK_WRAP_PYTHON_NEED_CUSTOM_TARGETS) + set(VTK_WRAP_PYTHON_CUSTOM_COUNT "") + set(VTK_WRAP_PYTHON_CUSTOM_NAME ${TARGET}) + set(VTK_WRAP_PYTHON_CUSTOM_LIST) + endif() + + # start writing the input file for the init file + set(VTK_WRAPPER_INIT_DATA "${TARGET}") + + # all the include directories + if(${module}_INCLUDE_DIRS) + set(TMP_INCLUDE_DIRS ${${module}_INCLUDE_DIRS}) + elseif(VTK_WRAP_INCLUDE_DIRS) + set(TMP_INCLUDE_DIRS ${VTK_WRAP_INCLUDE_DIRS}) + else() + set(TMP_INCLUDE_DIRS ${VTK_INCLUDE_DIRS}) + endif() + + # collect the common wrapper-tool arguments + set(_common_args) + get_directory_property(_def_list DEFINITION COMPILE_DEFINITIONS) + foreach(TMP_DEF ${_def_list}) + set(_common_args "${_common_args}-D${TMP_DEF}\n") + endforeach() + foreach(INCLUDE_DIR ${TMP_INCLUDE_DIRS}) + set(_common_args "${_common_args}-I\"${INCLUDE_DIR}\"\n") + endforeach() + if(VTK_WRAP_HINTS) + set(_common_args "${_common_args}--hints \"${VTK_WRAP_HINTS}\"\n") + endif() + if(KIT_HIERARCHY_FILE) + set(_common_args "${_common_args}--types \"${KIT_HIERARCHY_FILE}\"\n") + endif() + + # write wrapper-tool arguments to a file + string(STRIP "${_common_args}" CMAKE_CONFIGURABLE_FILE_CONTENT) + set(_args_file ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.args) + configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in + ${_args_file} @ONLY) + + # Decide what to do for each class. + foreach(class ${${module}_CLASSES}) + # Everything in this block is for classes that will be wrapped. + if(${module}_CLASSES_${class}_WRAP_SPECIAL OR + NOT ${module}_CLASSES_${class}_WRAP_EXCLUDE) + + # Find the full path to the header file to be wrapped. + vtk_find_header(${class}.h "${${module}_INCLUDE_DIRS}" class_header_path) + if(NOT class_header_path) + message(FATAL_ERROR "Could not find header for ${class}.") + endif() + + # add the info to the init file + set(VTK_WRAPPER_INIT_DATA + "${VTK_WRAPPER_INIT_DATA}\n${class}") + + # new source file is namePython.cxx, add to resulting list + set(${SRC_LIST_NAME} ${${SRC_LIST_NAME}} ${class}Python.cxx) + + # add custom command to output + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${class}Python.cxx + DEPENDS ${VTK_WRAP_PYTHON_EXE} ${VTK_WRAP_HINTS} ${class_header_path} + ${_args_file} ${KIT_HIERARCHY_FILE} + COMMAND ${VTK_WRAP_PYTHON_EXE} + ARGS + "${quote}@${_args_file}${quote}" + "-o" "${quote}${CMAKE_CURRENT_BINARY_DIR}/${class}Python.cxx${quote}" + "${quote}${class_header_path}${quote}" + COMMENT "Python Wrapping - generating ${class}Python.cxx" + ${verbatim} + ) + + # Add this output to a custom target if needed. + if(VTK_WRAP_PYTHON_NEED_CUSTOM_TARGETS) + set(VTK_WRAP_PYTHON_CUSTOM_LIST ${VTK_WRAP_PYTHON_CUSTOM_LIST} + ${CMAKE_CURRENT_BINARY_DIR}/${class}Python.cxx) + set(VTK_WRAP_PYTHON_CUSTOM_COUNT ${VTK_WRAP_PYTHON_CUSTOM_COUNT}x) + if(VTK_WRAP_PYTHON_CUSTOM_COUNT MATCHES "^${VTK_WRAP_PYTHON_CUSTOM_LIMIT}$") + set(VTK_WRAP_PYTHON_CUSTOM_NAME ${VTK_WRAP_PYTHON_CUSTOM_NAME}Hack) + add_custom_target(${VTK_WRAP_PYTHON_CUSTOM_NAME} + DEPENDS ${VTK_WRAP_PYTHON_CUSTOM_LIST}) + set(KIT_PYTHON_DEPS ${VTK_WRAP_PYTHON_CUSTOM_NAME}) + set(VTK_WRAP_PYTHON_CUSTOM_LIST) + set(VTK_WRAP_PYTHON_CUSTOM_COUNT) + endif() + endif() + else() + message("${class} will not be wrapped.") + endif() + endforeach() + + # finish the data file for the init file + configure_file( + ${VTK_CMAKE_DIR}/vtkWrapperInit.data.in + ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}Init.data + COPY_ONLY + IMMEDIATE + ) + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}Init.cxx + DEPENDS ${VTK_WRAP_PYTHON_INIT_EXE} + ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}Init.data + COMMAND ${VTK_WRAP_PYTHON_INIT_EXE} + ARGS + "${quote}${CMAKE_CURRENT_BINARY_DIR}/${TARGET}Init.data${quote}" + "${quote}${CMAKE_CURRENT_BINARY_DIR}/${TARGET}Init.cxx${quote}" + COMMENT "Python Wrapping - generating ${TARGET}Init.cxx" + ${verbatim} + ) + + # Create the Init File + set(${SRC_LIST_NAME} ${${SRC_LIST_NAME}} ${TARGET}Init.cxx) + +endmacro() diff --git a/CMake/vtkWrapping.cmake b/CMake/vtkWrapping.cmake index 7e015385170..4cf1224bc5e 100644 --- a/CMake/vtkWrapping.cmake +++ b/CMake/vtkWrapping.cmake @@ -4,7 +4,7 @@ # First, ensure we include the correct CMake code so that we can wrap. if(VTK_WRAP_PYTHON) - include(vtkPythonWrapping) +# include(vtkPythonWrapping) endif() if(VTK_WRAP_TCL) include(vtkTclWrapping) @@ -54,11 +54,9 @@ function(vtk_add_wrapping module_name module_srcs module_hdrs) endif() # Now to wrap the languages that are on. - if(VTK_WRAP_PYTHON) - if (${module_name}_WRAP_PYTHON) - set_property(GLOBAL APPEND PROPERTY VTK_PYTHON_WRAPPED ${module_name}) - vtk_add_python_wrapping(${module_name} "${module_srcs}" "${module_hdrs}") - endif() + if(VTK_WRAP_PYTHON AND ${module_name}_WRAP_PYTHON) + # Note that the module should be Python wrapped. + set_property(GLOBAL APPEND PROPERTY VTK_PYTHON_WRAPPED ${module_name}) endif() if(VTK_WRAP_TCL) set_property(GLOBAL APPEND PROPERTY VTK_TCL_WRAPPED ${module_name}) diff --git a/CMakeLists.txt b/CMakeLists.txt index d67f1edfa94..1fbdab09f51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -354,9 +354,14 @@ find_program(VTK_GHOSTSCRIPT_EXECUTABLE gs gswin32c gsos2) mark_as_advanced(VTK_GHOSTSCRIPT_EXECUTABLE) #---------------------------------------------------------------------- -# Load the module DAG. +# Load the module DAG, assess all modules etc. include(vtkModuleTop) +# Now build the Python wrapping if necessary. +if(VTK_WRAP_PYTHON) + add_subdirectory(Wrapping/Python) +endif() + if(BUILD_TESTING) add_subdirectory(Testing/Install) endif() diff --git a/Common/Core/CMakeLists.txt b/Common/Core/CMakeLists.txt index 3de9e96c879..410bdff7b5d 100644 --- a/Common/Core/CMakeLists.txt +++ b/Common/Core/CMakeLists.txt @@ -444,6 +444,46 @@ set_source_files_properties( vtkSparseArray.h vtkTypedArray.h vtkTypeTemplate.h + + vtkABI.h + vtkArrayInterpolate.h + vtkArrayInterpolate.txx + vtkArrayIteratorIncludes.h + vtkArrayIteratorTemplate.h + vtkArrayIteratorTemplate.txx + vtkArrayIteratorTemplateImplicit.txx + vtkArrayPrint.h + vtkArrayPrint.txx + vtkAutoInit.h + vtkDataArrayTemplate.txx + vtkDataArrayTemplateImplicit.txx + vtkDenseArray.txx + vtkIOStreamFwd.h + vtkInformationInternals.h + vtkMathUtilities.h + vtkNew.h + vtkSetGet.h + vtkSmartPointer.h + vtkSparseArray.txx + vtkTemplateAliasMacro.h + vtkTypeTraits.h + vtkTypedArray.txx + vtkVariantCast.h + vtkVariantCreate.h + vtkVariantExtract.h + vtkVariantInlineOperators.h + vtkWeakPointer.h + vtkWin32Header.h + vtkWindows.h + vtkToolkits.h + + # We need to get these wrapped, WRAP_SPECIAL? WRAP_HEADER does not seem to be used. + #vtkSystemIncludes.h + #vtkType.h + #vtkConfigure.h + #vtkMathConfigure.h + #vtkVersionMacros.h + WRAP_EXCLUDE ) @@ -482,7 +522,7 @@ if(CMAKE_SYSTEM MATCHES "SunOS.*") set(KIT_LIBS ${KIT_LIBS} socket nsl) endif() -vtk_module_library(vtkCommonCore ${Module_SRCS}) +vtk_module_library(vtkCommonCore ${Module_SRCS} ${${vtk-module}_HDRS}) target_link_libraries(vtkCommonCore ${CMAKE_THREAD_LIBS_INIT}) set_target_properties(vtkCommonCore PROPERTIES LINK_INTERFACE_LIBRARIES "") diff --git a/Common/DataModel/CMakeLists.txt b/Common/DataModel/CMakeLists.txt index f9424281ff8..7e760182016 100644 --- a/Common/DataModel/CMakeLists.txt +++ b/Common/DataModel/CMakeLists.txt @@ -177,6 +177,7 @@ set(Module_SRCS vtkBond.cxx vtkMolecule.cxx vtkAbstractElectronicData.cxx + vtkCellType.h # Header only classes vtkDataArrayDispatcher.h @@ -244,6 +245,7 @@ set_source_files_properties( vtkAtom vtkBond vtkBoundingBox + vtkCellType vtkDataArrayDispatcher vtkDispatcher_Private vtkDispatcher diff --git a/Wrapping/Python/CMakeLists.txt b/Wrapping/Python/CMakeLists.txt index a9c2bd8e7ca..7be86ca5198 100644 --- a/Wrapping/Python/CMakeLists.txt +++ b/Wrapping/Python/CMakeLists.txt @@ -1,70 +1,32 @@ -include(GenerateExportHeader) +# This is where we actually wrap the modules that have requested it. include(vtkPythonWrapping) -set(Module_SRCS - vtkPythonArgs.cxx - vtkPythonCommand.cxx - vtkPythonOverload.cxx - vtkPythonUtil.cxx - PyVTKClass.cxx - PyVTKMutableObject.cxx - PyVTKObject.cxx - PyVTKSpecialObject.cxx - PyVTKTemplate.cxx - ) - -set(Module_HDRS - ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}Module.h - ) - -list(APPEND Module_SRCS ${Module_HDRS}) - -set_source_files_properties( - ${Module_HDRS} - HEADER_FILE_ONLY - ) - -include_directories( - ${VTK_SOURCE_DIR}/Utilities - ) - -# SIP directory will be searched before other python dirs -SET(PYTHON_WRAPPING_INCLUDE_DIRS) -if(VTK_WRAP_PYTHON_SIP) - list(APPEND PYTHON_WRAPPING_INCLUDE_DIRS "${SIP_INCLUDE_DIR}") -endif() -set(${vtk-module}_SYSTEM_INCLUDE_DIRS ${PYTHON_WRAPPING_INCLUDE_DIRS}) - -set(${vtk-module}_NO_HeaderTest 1) -set(${vtk-module}_INCLUDE_DIRS) - -set(XY ${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}) -vtk_module_library(${vtk-module} ${Module_SRCS}) -get_property(output_name TARGET ${vtk-module} PROPERTY OUTPUT_NAME) -string(REPLACE "Python" "Python${XY}" output_name "${output_name}") -set_property(TARGET ${vtk-module} PROPERTY OUTPUT_NAME ${output_name}) +get_property(VTK_PYTHON_MODULES GLOBAL PROPERTY VTK_PYTHON_WRAPPED) +# Get the include directories for the module and all its dependencies. +macro(vtk_include_recurse module) + _vtk_module_config_recurse("py" ${module}) + include_directories(${py_INCLUDE_DIRS}) +endmacro() + +# Loop through all modules that should be wrapped, and wrap them. +foreach(module ${VTK_PYTHON_MODULES}) + vtk_module_load(${module}) + vtk_module_classes_load(${module}) + vtk_include_recurse(${module}) + vtk_add_python_wrapping(${module}) +endforeach() + +# Now to build the vtkPython executable, configure the .py files etc. get_property(VTK_PYTHON_MODULES GLOBAL PROPERTY VTK_PYTHON_WRAPPED) -# If we are using instantiators then configure them all into a header. -unset(vtk_instantiators) -unset(vtk_link_modules) -if(VTK_MAKE_INSTANTIATORS) - foreach(module ${VTK_PYTHON_MODULES}) - set(vtk_instantiators - "${vtk_instantiators}#include \"${module}Instantiator.h\"\n") - list(APPEND vtk_link_modules ${module}) - include_directories("${${module}_BINARY_DIR}") - endforeach() -endif() -# Make a nice empty file if not using instantiators. -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/vtkInstantiators.h.in" - "@vtk_instantiators@\n") -configure_file("${CMAKE_CURRENT_BINARY_DIR}/vtkInstantiators.h.in" - "${CMAKE_CURRENT_BINARY_DIR}/vtkInstantiators.h" @ONLY) - -#----------------------- -# for the vtkpython executable +vtk_module_load(vtkWrappingPython) +vtk_module_load(vtkPython) +include_directories(${CMAKE_CURRENT_BINARY_DIR} + ${VTK_SOURCE_DIR}/Utilities + ${vtkPython_INCLUDE_DIRS} + ${vtkWrappingPython_INCLUDE_DIRS}) +# Needed for the vtkpython executable. if(VTK_USE_CARBON) find_program(VTK_APPLE_RESOURCE Rez "${OSX_DEVELOPER_ROOT}/usr/bin") endif() @@ -72,26 +34,25 @@ endif() if(UNIX) find_library(PYTHON_UTIL_LIBRARY NAMES util - DOC "Utility library needed for vtkpython" - ) + DOC "Utility library needed for vtkpython") mark_as_advanced(PYTHON_UTIL_LIBRARY) endif() -# generate the header which initializes Python modules when BUILD_SHARED_LIBS is -# OFF. py_module_dependencies will be set to the libraries we should link +# Generate the header which initializes Python modules when BUILD_SHARED_LIBS is +# OFF. The py_module_dependencies will be set to the libraries we should link # against when we use the vtkpythonmodules.h file. vtk_write_python_modules_header_for_wrapped_modules( "${CMAKE_CURRENT_BINARY_DIR}/vtkpythonmodules.h" py_module_dependencies) -# create the VTK/Python executable -configure_file(${VTK_SOURCE_DIR}/Wrapping/Python/vtkPythonAppInitConfigure.h.in - ${VTK_BINARY_DIR}/Wrapping/Python/vtkPythonAppInitConfigure.h) +# Create the VTK/Python executable +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/vtkPythonAppInitConfigure.h.in + ${CMAKE_CURRENT_BINARY_DIR}/vtkPythonAppInitConfigure.h) add_executable(vtkpython vtkPythonAppInit.cxx vtkpython.rc) -set(VTKPYTHON_LINK_FLAGS) -set(VTKPYTHON_LINK_LIBS ${vtk_link_modules}) +unset(VTKPYTHON_LINK_FLAGS) +unset(VTKPYTHON_LINK_LIBS) if(CMAKE_SYSTEM_NAME MATCHES "AIX") get_filename_component(CMAKE_PYTHON_LIB_PREFIX "${PYTHON_LIBRARY}" PATH) @@ -120,9 +81,7 @@ if(APPLE) endif() # Link against all the kit wrappers. -list(APPEND VTKPYTHON_LINK_LIBS - ${vtk-module} - ) +list(APPEND VTKPYTHON_LINK_LIBS vtkWrappingPython) set(vtkpython_pyc_depends vtkCommonPython @@ -133,74 +92,59 @@ set(vtkpython_pyc_depends ) if(PYTHON_UTIL_LIBRARY) - set(VTKPYTHON_LINK_LIBS ${VTKPYTHON_LINK_LIBS} ${PYTHON_UTIL_LIBRARY}) + list(APPEND VTKPYTHON_LINK_LIBS ${PYTHON_UTIL_LIBRARY}) endif() set(VTKPYTHON_LINK_LIBS ${VTKPYTHON_LINK_LIBS} ${py_module_dependencies}) # Link to rt to prevent undefined symbol 'fdatasync' -IF(CMAKE_SYSTEM MATCHES "SunOS.*" AND NOT CMAKE_COMPILER_IS_GNUCXX) - FIND_LIBRARY(VTK_SUNCC_RT_LIBRARY rt) - IF(VTK_SUNCC_RT_LIBRARY) - SET(VTKPYTHON_LINK_LIBS ${VTKPYTHON_LINK_LIBS} ${VTK_SUNCC_RT_LIBRARY}) - ENDIF(VTK_SUNCC_RT_LIBRARY) -ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*" AND NOT CMAKE_COMPILER_IS_GNUCXX) - -IF(VTK_WRAP_TCL) - TARGET_LINK_LIBRARIES(vtkpython ${VTK_TK_LIBRARIES}) -ENDIF(VTK_WRAP_TCL) - -IF(HAVE_PTHREAD_H AND CMAKE_USE_PTHREADS) - TARGET_LINK_LIBRARIES(vtkpython ${CMAKE_THREAD_LIBS_INIT}) -ENDIF() +if(CMAKE_SYSTEM MATCHES "SunOS.*" AND NOT CMAKE_COMPILER_IS_GNUCXX) + find_library(VTK_SUNCC_RT_LIBRARY rt) + if(VTK_SUNCC_RT_LIBRARY) + set(VTKPYTHON_LINK_LIBS ${VTKPYTHON_LINK_LIBS} ${VTK_SUNCC_RT_LIBRARY}) + endif() +endif() -IF(VTK_USE_FFMPEG_ENCODER) - LIST(APPEND VTKPYTHON_LINK_LIBS ${FFMPEG_BASIC_LIBRARIES}) -ENDIF(VTK_USE_FFMPEG_ENCODER) +# If we are wrapping Tcl then the Tk libraries are available and should be used +# in the Python wrapping too. +if(VTK_WRAP_TCL) + list(APPEND VTKPYTHON_LINK_LIBS ${VTK_TK_LIBRARIES}) +endif() -TARGET_LINK_LIBRARIES(vtkpython ${VTKPYTHON_LINK_LIBS}) +if(HAVE_PTHREAD_H AND CMAKE_USE_PTHREADS) + list(APPEND VTKPYTHON_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT}) +endif() -IF(VTK_USE_MATLAB_MEX) - INCLUDE(${MATLAB_MEX_USE_FILE}) - SET_TARGET_PROPERTIES(vtkpython PROPERTIES - LINK_FLAGS "${MEX_RPATH} ${VTKPYTHON_LINK_FLAGS}") -ELSE(VTK_USE_MATLAB_MEX) - SET_TARGET_PROPERTIES(vtkpython PROPERTIES LINK_FLAGS "${VTKPYTHON_LINK_FLAGS}") -ENDIF(VTK_USE_MATLAB_MEX) +# FIXME: Is this needed here? +if(VTK_USE_FFMPEG_ENCODER) + list(APPEND VTKPYTHON_LINK_LIBS ${FFMPEG_BASIC_LIBRARIES}) +endif() +target_link_libraries(vtkpython ${VTKPYTHON_LINK_LIBS}) -SET(PVTKPYTHON_EXECUTABLE) +unset(PVTKPYTHON_EXECUTABLE) # Create the pvtkpython Python wrapper executable with MPI support. -IF (VTK_USE_PARALLEL AND VTK_USE_MPI) - FIND_PACKAGE(MPI REQUIRED) - INCLUDE_DIRECTORIES("${MPI_C_INCLUDE_PATH}") - set (MPI_LIBRARIES ${MPI_C_LIBRARIES}) - if (MPI_CXX_LIBRARIES) - SET(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_CXX_LIBRARIES}) +if(TARGET vtkParallelMPI) + find_package(MPI REQUIRED) + include_directories(${MPI_C_INCLUDE_PATH}) + set(MPI_LIBRARIES ${MPI_C_LIBRARIES}) + if(MPI_CXX_LIBRARIES) + set(MPI_LIBRARIES ${MPI_LIBRARIES} ${MPI_CXX_LIBRARIES}) endif() - IF (VTK_USE_PARALLEL_BGL) - SET(MPI_LIBRARIES ${MPI_LIBRARIES} "${Boost_LIBRARIES}") - ENDIF (VTK_USE_PARALLEL_BGL) # Needed for mpich 2 - ADD_DEFINITIONS("-DMPICH_IGNORE_CXX_SEEK") - - SET(PVTKPYTHON_EXECUTABLE pvtkpython) - VTK_ADD_EXECUTABLE(pvtkpython vtkParaPythonAppInit.cxx) - TARGET_LINK_LIBRARIES(pvtkpython ${VTKPYTHON_LINK_LIBS} ${MPI_LIBRARIES}) - IF(VTK_USE_MATLAB_MEX) - INCLUDE(${MATLAB_MEX_USE_FILE}) - SET_TARGET_PROPERTIES(pvtkpython PROPERTIES - LINK_FLAGS "${MEX_RPATH} ${VTKPYTHON_LINK_FLAGS}") - ELSE(VTK_USE_MATLAB_MEX) - SET_TARGET_PROPERTIES(pvtkpython PROPERTIES LINK_FLAGS "${VTKPYTHON_LINK_FLAGS}") - ENDIF(VTK_USE_MATLAB_MEX) - - IF(VTK_USE_CARBON AND VTK_APPLE_RESOURCE) - ADD_CUSTOM_COMMAND( TARGET pvtkpython POST_BUILD - COMMAND ${VTK_APPLE_RESOURCE} Carbon.r -o ${VTK_EXECUTABLE_DIR}/pvtkpython ) - ENDIF(VTK_USE_CARBON AND VTK_APPLE_RESOURCE) -ENDIF (VTK_USE_PARALLEL AND VTK_USE_MPI) + add_definitions("-DMPICH_IGNORE_CXX_SEEK") + + set(PVTKPYTHON_EXECUTABLE pvtkpython) + add_executable(pvtkpython vtkParaPythonAppInit.cxx) + target_link_libraries(pvtkpython ${VTKPYTHON_LINK_LIBS} vtkParallelMPI + ${MPI_LIBRARIES}) + + if(VTK_USE_CARBON AND VTK_APPLE_RESOURCE) + add_custom_command(TARGET pvtkpython POST_BUILD + COMMAND ${VTK_APPLE_RESOURCE} Carbon.r -o ${VTK_EXECUTABLE_DIR}/pvtkpython) + endif() +endif() # Handle out-of-source builds correctly. # @@ -210,31 +154,29 @@ ENDIF (VTK_USE_PARALLEL AND VTK_USE_MPI) # # *** Step 1 has to be done carefully to avoid missing out files *** -IF(PYTHON_EXECUTABLE) -# Make the necessary directories. - FILE(MAKE_DIRECTORY ${VTK_BINARY_DIR}/Wrapping/Python/vtk/gtk - ${VTK_BINARY_DIR}/Wrapping/Python/vtk/qt - ${VTK_BINARY_DIR}/Wrapping/Python/vtk/qt4 - ${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 ) +if(PYTHON_EXECUTABLE) + # Make the necessary directories. + file(MAKE_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}/vtk/gtk + ${CMAKE_CURRENT_BINARY_DIR}/vtk/qt4 + ${CMAKE_CURRENT_BINARY_DIR}/vtk/tk + ${CMAKE_CURRENT_BINARY_DIR}/vtk/util + ${CMAKE_CURRENT_BINARY_DIR}/vtk/wx + ${CMAKE_CURRENT_BINARY_DIR}/vtk/test) # Now create a list of Python files. # Wrapping/Python/vtk/*.py - SET(VTK_PYTHON_FILES - ) - SET(VTK_PYTHON_IMPORT_ALL "") - FOREACH(module ${VTK_PYTHON_MODULES}) - SET(VTK_PYTHON_IMPORT_ALL "${VTK_PYTHON_IMPORT_ALL}from ${module} import *\n") - CONFIGURE_FILE(vtk/module.py.in vtk/${module}.py @ONLY IMMEDIATE) - ENDFOREACH() - CONFIGURE_FILE(vtk/__init__.py.in vtk/__init__.py @ONLY IMMEDIATE) + unset(VTK_PYTHON_FILES) + unset(VTK_PYTHON_IMPORT_ALL) + foreach(module ${VTK_PYTHON_MODULES}) + set(VTK_PYTHON_IMPORT_ALL "${VTK_PYTHON_IMPORT_ALL}from ${module} import *\n") + configure_file(vtk/module.py.in vtk/${module}.py @ONLY IMMEDIATE) + endforeach() + configure_file(vtk/__init__.py.in vtk/__init__.py @ONLY IMMEDIATE) # vtk.util package - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/util/__init__ vtk/util/vtkMethodParser vtk/util/misc @@ -247,16 +189,14 @@ IF(PYTHON_EXECUTABLE) ) # vtk.test package - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/test/BlackBox vtk/test/Testing vtk/test/__init__ ) # Tk related files - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/tk/__init__ vtk/tk/vtkLoadPythonTkWidgets vtk/tk/vtkTkImageViewerWidget @@ -265,32 +205,21 @@ IF(PYTHON_EXECUTABLE) vtk/tk/vtkTkPhotoImage ) -# PyQt v3 related files - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} - vtk/qt/QVTKRenderWidget - vtk/qt/__init__ - vtk/qt/QVTKRenderWindowInteractor - ) - # PyQt v4 related files - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/qt4/__init__ vtk/qt4/QVTKRenderWindowInteractor ) # wxPython related files - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/wx/__init__ vtk/wx/wxVTKRenderWindow vtk/wx/wxVTKRenderWindowInteractor ) # pyGTK related files - SET(VTK_PYTHON_FILES - ${VTK_PYTHON_FILES} + list(APPEND VTK_PYTHON_FILES vtk/gtk/GtkVTKRenderWindow vtk/gtk/__init__ vtk/gtk/GtkVTKRenderWindowInteractor @@ -301,153 +230,144 @@ IF(PYTHON_EXECUTABLE) # 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 (NOT "${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} -E copy ${src} ${tgt} - OUTPUT ${tgt} - COMMENT "source copy") - ENDFOREACH(file) - ENDIF (NOT "${VTK_BINARY_DIR}" MATCHES "^${VTK_SOURCE_DIR}$") + unset(VTK_PYTHON_SOURCE_FILES) + unset(VTK_PYTHON_OUTPUT_FILES) + foreach(file ${VTK_PYTHON_FILES}) + set(src "${CMAKE_CURRENT_BINARY_DIR}/${file}.py") + set(VTK_PYTHON_SOURCE_FILES ${VTK_PYTHON_SOURCE_FILES} ${src}) + endforeach() + + if(NOT "${VTK_BINARY_DIR}" MATCHES "^${VTK_SOURCE_DIR}$") + foreach(file ${VTK_PYTHON_FILES}) + set(src "${CMAKE_CURRENT_SOURCE_DIR}/${file}.py") + set(tgt "${CMAKE_CURRENT_BINARY_DIR}/${file}.py") + add_custom_command(DEPENDS ${src} + COMMAND ${CMAKE_COMMAND} -E copy ${src} ${tgt} + OUTPUT ${tgt} + COMMENT "source copy") + endforeach() + endif() # 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( + 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} ${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" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/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}) + add_custom_target(vtkpython_pyc ALL echo "..." + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/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) + if(VTK_INSTALL_NO_RUNTIME) + set(VTK_INSTALL_NO_PYTHON 1) + endif() # If set (generally by projects that include VTK), we install the # vtk{*}Python libraries using CMake rather than setup.py. Which implies that # they will be put will all other libraries. This is done in # KitCommonPythonWrapBlock.cmake - IF (VTK_INSTALL_PYTHON_USING_CMAKE) - SET(VTK_INSTALL_NO_PYTHON 1) - ENDIF (VTK_INSTALL_PYTHON_USING_CMAKE) - - IF(VTK_INSTALL_PYTHON_USING_CMAKE) + if(VTK_INSTALL_PYTHON_USING_CMAKE) + set(VTK_INSTALL_NO_PYTHON 1) # Install python module directory (*.py and *.pyd) - #INSTALL(DIRECTORY "${VTK_BINARY_DIR}/Wrapping/Python/vtk" - # DESTINATION "${VTK_INSTALL_BIN_DIR_CM24}/Python" COMPONENT RuntimeLibraries - # USE_SOURCE_PERMISSIONS) - ENDIF(VTK_INSTALL_PYTHON_USING_CMAKE) + install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/vtk" + DESTINATION "${VTK_INSTALL_RUNTIME_DIR}/Python" COMPONENT RuntimeLibraries + USE_SOURCE_PERMISSIONS) + endif() # Add a rule to use python distutils to install the python wrappers. - IF(NOT VTK_INSTALL_NO_PYTHON) - SET(DOLLAR "$") + if(NOT VTK_INSTALL_NO_PYTHON) + set(DOLLAR "$") # Create default python setup arguments if they are not set. - IF(NOT DEFINED VTK_PYTHON_SETUP_ARGS) - SET(VTK_PYTHON_SETUP_ARGS "--prefix=\"${DOLLAR}{CMAKE_INSTALL_PREFIX}\"" + if(NOT 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(NOT DEFINED VTK_PYTHON_SETUP_ARGS) + mark_as_advanced(VTK_PYTHON_SETUP_ARGS) + endif() # Change dollar sign to DOLLARSIGN - STRING(REGEX REPLACE "\\${DOLLAR}" "DOLLARSIGN" + string(REGEX REPLACE "\\${DOLLAR}" "DOLLARSIGN" PYTHON_SETUP_ARGS "${VTK_PYTHON_SETUP_ARGS}") # Get the install path for python modules execute_process(COMMAND "${PYTHON_EXECUTABLE}" "setup_install_paths.py" "purelib" ${PYTHON_SETUP_ARGS} - WORKING_DIRECTORY "${VTK_SOURCE_DIR}/Wrapping/Python" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE PYTHON_MODULE_INSTALL_DIR) # Get the install path for binary python modules execute_process(COMMAND "${PYTHON_EXECUTABLE}" "setup_install_paths.py" "platlib" ${PYTHON_SETUP_ARGS} - WORKING_DIRECTORY "${VTK_SOURCE_DIR}/Wrapping/Python" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE PYTHON_MODULE_PLATFORM_INSTALL_DIR) # Change DOLLARSIGN to dollar sign - STRING(REGEX REPLACE "DOLLARSIGN" "${DOLLAR}" + string(REGEX REPLACE "DOLLARSIGN" "${DOLLAR}" PYTHON_MODULE_INSTALL_DIR "${PYTHON_MODULE_INSTALL_DIR}") - STRING(REGEX REPLACE "DOLLARSIGN" "${DOLLAR}" + string(REGEX REPLACE "DOLLARSIGN" "${DOLLAR}" PYTHON_MODULE_PLATFORM_INSTALL_DIR "${PYTHON_MODULE_PLATFORM_INSTALL_DIR}") # Replace backslashes with forward slashes - IF (WIN32) - STRING(REGEX REPLACE "\\\\" "/" PYTHON_MODULE_INSTALL_DIR + if(WIN32) + string(REGEX REPLACE "\\\\" "/" PYTHON_MODULE_INSTALL_DIR "${PYTHON_MODULE_INSTALL_DIR}") - STRING(REGEX REPLACE "\\\\" "/" PYTHON_MODULE_PLATFORM_INSTALL_DIR + string(REGEX REPLACE "\\\\" "/" PYTHON_MODULE_PLATFORM_INSTALL_DIR "${PYTHON_MODULE_PLATFORM_INSTALL_DIR}") - ENDIF (WIN32) + endif() - SET(VTK_PYTHON_MODULE_INSTALL_DIR "${PYTHON_MODULE_INSTALL_DIR}" + set(VTK_PYTHON_MODULE_INSTALL_DIR "${PYTHON_MODULE_INSTALL_DIR}" CACHE INTERNAL "Install directory for Python .py and .pyc files") - SET(VTK_PYTHON_MODULE_PLATFORM_INSTALL_DIR + set(VTK_PYTHON_MODULE_PLATFORM_INSTALL_DIR "${PYTHON_MODULE_PLATFORM_INSTALL_DIR}" CACHE INTERNAL "Install directory for Python binary modules") # 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) + if(CMAKE_CONFIGURATION_TYPES) + set(VTK_PYTHON_SETUP_BUILD_TYPE "BUILD_TYPE=${DOLLAR}{BUILD_TYPE}") + else() + set(VTK_PYTHON_SETUP_BUILD_TYPE) + endif() # 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) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/PythonInstall.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/PythonInstall.cmake + @ONLY IMMEDIATE) - install(SCRIPT ${VTK_BINARY_DIR}/Wrapping/Python/PythonInstall.cmake - COMPONENT RuntimeLibraries - ) - ENDIF(NOT VTK_INSTALL_NO_PYTHON) -ENDIF(PYTHON_EXECUTABLE) + install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/PythonInstall.cmake + COMPONENT RuntimeLibraries) + endif() +endif() # Create the setup.py file. -IF(CMAKE_CONFIGURATION_TYPES) +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) + set(VTK_PYTHON_HAS_CONFIG_TYPES 1) + if(CMAKE_BUILD_TYPE) + set(VTK_PYTHON_BUILD_TYPE "\"${CMAKE_BUILD_TYPE}\"") + else() + set(VTK_PYTHON_BUILD_TYPE "[]") + endif() +else() # 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) - -CONFIGURE_FILE(${VTK_SOURCE_DIR}/Wrapping/Python/setup.py.in - ${VTK_BINARY_DIR}/Wrapping/Python/setup.py @ONLY IMMEDIATE) + set(VTK_PYTHON_HAS_CONFIG_TYPES 0) + set(VTK_PYTHON_BUILD_TYPE "[]") +endif() -# Allow the user to customize their build with some local options -# -INCLUDE (${VTK_BINARY_DIR}/Wrapping/Python/LocalUserOptions.cmake OPTIONAL) -INCLUDE (${VTK_SOURCE_DIR}/Wrapping/Python/LocalUserOptions.cmake OPTIONAL) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in + ${CMAKE_CURRENT_BINARY_DIR}/setup.py @ONLY IMMEDIATE) diff --git a/Wrapping/Python/setup_install_paths.py b/Wrapping/Python/setup_install_paths.py index 014b906410a..f5bf49f4240 100755 --- a/Wrapping/Python/setup_install_paths.py +++ b/Wrapping/Python/setup_install_paths.py @@ -1,4 +1,4 @@ -#! /bin/env python +#!/bin/env python """ This script will return the paths that distutils will use for installing diff --git a/Wrapping/Python/vtkpython.cxx.in b/Wrapping/Python/vtkpython.cxx.in deleted file mode 100644 index 89d59d1f948..00000000000 --- a/Wrapping/Python/vtkpython.cxx.in +++ /dev/null @@ -1,2 +0,0 @@ -/* This file has been replaced by vtkPythonAppInit and vtkParaPythonAppInit. */ - diff --git a/Wrapping/PythonCore/CMakeLists.txt b/Wrapping/PythonCore/CMakeLists.txt new file mode 100644 index 00000000000..1402e746de1 --- /dev/null +++ b/Wrapping/PythonCore/CMakeLists.txt @@ -0,0 +1,45 @@ +include(GenerateExportHeader) +include(vtkPythonWrapping) + +set(Module_SRCS + vtkPythonArgs.cxx + vtkPythonCommand.cxx + vtkPythonOverload.cxx + vtkPythonUtil.cxx + PyVTKClass.cxx + PyVTKMutableObject.cxx + PyVTKObject.cxx + PyVTKSpecialObject.cxx + PyVTKTemplate.cxx + ) + +set(Module_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}Module.h + ) + +list(APPEND Module_SRCS ${Module_HDRS}) + +set_source_files_properties( + ${Module_HDRS} + HEADER_FILE_ONLY + ) + +include_directories( + ${VTK_SOURCE_DIR}/Utilities + ) + +# SIP directory will be searched before other python dirs +set(PYTHON_WRAPPING_INCLUDE_DIRS) +if(VTK_WRAP_PYTHON_SIP) + list(APPEND PYTHON_WRAPPING_INCLUDE_DIRS "${SIP_INCLUDE_DIR}") +endif() +set(${vtk-module}_SYSTEM_INCLUDE_DIRS ${PYTHON_WRAPPING_INCLUDE_DIRS}) + +set(${vtk-module}_NO_HeaderTest 1) +set(${vtk-module}_INCLUDE_DIRS) + +set(XY ${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}) +vtk_module_library(${vtk-module} ${Module_SRCS}) +get_property(output_name TARGET ${vtk-module} PROPERTY OUTPUT_NAME) +string(REPLACE "Python" "Python${XY}" output_name "${output_name}") +set_property(TARGET ${vtk-module} PROPERTY OUTPUT_NAME ${output_name}) diff --git a/Wrapping/Python/PyVTKClass.cxx b/Wrapping/PythonCore/PyVTKClass.cxx similarity index 100% rename from Wrapping/Python/PyVTKClass.cxx rename to Wrapping/PythonCore/PyVTKClass.cxx diff --git a/Wrapping/Python/PyVTKClass.h b/Wrapping/PythonCore/PyVTKClass.h similarity index 100% rename from Wrapping/Python/PyVTKClass.h rename to Wrapping/PythonCore/PyVTKClass.h diff --git a/Wrapping/Python/PyVTKMutableObject.cxx b/Wrapping/PythonCore/PyVTKMutableObject.cxx similarity index 100% rename from Wrapping/Python/PyVTKMutableObject.cxx rename to Wrapping/PythonCore/PyVTKMutableObject.cxx diff --git a/Wrapping/Python/PyVTKMutableObject.h b/Wrapping/PythonCore/PyVTKMutableObject.h similarity index 100% rename from Wrapping/Python/PyVTKMutableObject.h rename to Wrapping/PythonCore/PyVTKMutableObject.h diff --git a/Wrapping/Python/PyVTKObject.cxx b/Wrapping/PythonCore/PyVTKObject.cxx similarity index 100% rename from Wrapping/Python/PyVTKObject.cxx rename to Wrapping/PythonCore/PyVTKObject.cxx diff --git a/Wrapping/Python/PyVTKObject.h b/Wrapping/PythonCore/PyVTKObject.h similarity index 100% rename from Wrapping/Python/PyVTKObject.h rename to Wrapping/PythonCore/PyVTKObject.h diff --git a/Wrapping/Python/PyVTKSpecialObject.cxx b/Wrapping/PythonCore/PyVTKSpecialObject.cxx similarity index 100% rename from Wrapping/Python/PyVTKSpecialObject.cxx rename to Wrapping/PythonCore/PyVTKSpecialObject.cxx diff --git a/Wrapping/Python/PyVTKSpecialObject.h b/Wrapping/PythonCore/PyVTKSpecialObject.h similarity index 100% rename from Wrapping/Python/PyVTKSpecialObject.h rename to Wrapping/PythonCore/PyVTKSpecialObject.h diff --git a/Wrapping/Python/PyVTKTemplate.cxx b/Wrapping/PythonCore/PyVTKTemplate.cxx similarity index 100% rename from Wrapping/Python/PyVTKTemplate.cxx rename to Wrapping/PythonCore/PyVTKTemplate.cxx diff --git a/Wrapping/Python/PyVTKTemplate.h b/Wrapping/PythonCore/PyVTKTemplate.h similarity index 100% rename from Wrapping/Python/PyVTKTemplate.h rename to Wrapping/PythonCore/PyVTKTemplate.h diff --git a/Wrapping/Python/conversionlist.in b/Wrapping/PythonCore/conversionlist.in similarity index 100% rename from Wrapping/Python/conversionlist.in rename to Wrapping/PythonCore/conversionlist.in diff --git a/Wrapping/Python/module.cmake b/Wrapping/PythonCore/module.cmake similarity index 100% rename from Wrapping/Python/module.cmake rename to Wrapping/PythonCore/module.cmake diff --git a/Wrapping/Python/vtkPythonArgs.cxx b/Wrapping/PythonCore/vtkPythonArgs.cxx similarity index 100% rename from Wrapping/Python/vtkPythonArgs.cxx rename to Wrapping/PythonCore/vtkPythonArgs.cxx diff --git a/Wrapping/Python/vtkPythonArgs.h b/Wrapping/PythonCore/vtkPythonArgs.h similarity index 100% rename from Wrapping/Python/vtkPythonArgs.h rename to Wrapping/PythonCore/vtkPythonArgs.h diff --git a/Wrapping/Python/vtkPythonCommand.cxx b/Wrapping/PythonCore/vtkPythonCommand.cxx similarity index 100% rename from Wrapping/Python/vtkPythonCommand.cxx rename to Wrapping/PythonCore/vtkPythonCommand.cxx diff --git a/Wrapping/Python/vtkPythonCommand.h b/Wrapping/PythonCore/vtkPythonCommand.h similarity index 100% rename from Wrapping/Python/vtkPythonCommand.h rename to Wrapping/PythonCore/vtkPythonCommand.h diff --git a/Wrapping/Python/vtkPythonOverload.cxx b/Wrapping/PythonCore/vtkPythonOverload.cxx similarity index 100% rename from Wrapping/Python/vtkPythonOverload.cxx rename to Wrapping/PythonCore/vtkPythonOverload.cxx diff --git a/Wrapping/Python/vtkPythonOverload.h b/Wrapping/PythonCore/vtkPythonOverload.h similarity index 100% rename from Wrapping/Python/vtkPythonOverload.h rename to Wrapping/PythonCore/vtkPythonOverload.h diff --git a/Wrapping/Python/vtkPythonUtil.cxx b/Wrapping/PythonCore/vtkPythonUtil.cxx similarity index 100% rename from Wrapping/Python/vtkPythonUtil.cxx rename to Wrapping/PythonCore/vtkPythonUtil.cxx diff --git a/Wrapping/Python/vtkPythonUtil.h b/Wrapping/PythonCore/vtkPythonUtil.h similarity index 100% rename from Wrapping/Python/vtkPythonUtil.h rename to Wrapping/PythonCore/vtkPythonUtil.h -- GitLab