diff --git a/CMake/mitkMacroInstallPython.cmake b/CMake/mitkMacroInstallPython.cmake index f468ec5942..a72b6125b9 100644 --- a/CMake/mitkMacroInstallPython.cmake +++ b/CMake/mitkMacroInstallPython.cmake @@ -1,102 +1,124 @@ macro(MITK_INSTALL_PYTHON _python_libs _python_dirs) - - # install ITK python wrapping - file(GLOB _libs "${ITK_DIR}/lib/_ITK*" ) - file(GLOB _py_files "${ITK_DIR}/lib/*.py" ) - file(GLOB _py_generators "${ITK_DIR}/Wrapping/Generators/Python/*.py") - - install(FILES ${_libs} DESTINATION bin/Python/itk) - install(FILES ${_py_files} DESTINATION bin/bin/Python/itk) - install(FILES ${_py_generators} DESTINATION bin/Python/itk) - install(DIRECTORY "${ITK_DIR}/Wrapping/Generators/Python/Configuration" + if(UNIX) + # install ITK python wrapping + file(GLOB _libs "${ITK_DIR}/lib/_ITK*" ) + file(GLOB _py_files "${ITK_DIR}/lib/*.py" ) + file(GLOB _py_generators "${ITK_DIR}/Wrapping/Generators/Python/*.py") + + install(FILES ${_libs} DESTINATION bin/Python/itk) + install(FILES ${_py_files} DESTINATION bin/bin/Python/itk) + install(FILES ${_py_generators} DESTINATION bin/Python/itk) + install(DIRECTORY "${ITK_DIR}/Wrapping/Generators/Python/Configuration" DESTINATION bin/Python/itk USE_SOURCE_PERMISSIONS COMPONENT Runtime) - install(DIRECTORY "${ITK_DIR}/Wrapping/Generators/Python/itkExtras" + install(DIRECTORY "${ITK_DIR}/Wrapping/Generators/Python/itkExtras" DESTINATION bin/Python/itk USE_SOURCE_PERMISSIONS COMPONENT Runtime) - foreach(lib ${_libs}) - get_filename_component(_libname "${lib}" NAME) - list(APPEND _python_libs "Python/itk/${_libname}") + foreach(lib ${_libs}) + get_filename_component(_libname "${lib}" NAME) + list(APPEND _python_libs "Python/itk/${_libname}") - if(UNIX AND NOT APPLE) - install(CODE "file(RPATH_REMOVE + if(UNIX AND NOT APPLE) + install(CODE "file(RPATH_REMOVE FILE \"\${CMAKE_INSTALL_PREFIX}/bin/Python/itk/${_libname}\")") - endif() - endforeach() + endif() + endforeach() - list(APPEND _python_dirs "${ITK_DIR}/lib") + list(APPEND _python_dirs "${ITK_DIR}/lib") + endif() # install OpenCV python wrapping if(MITK_USE_OpenCV) list(APPEND _python_libs "cv2${CMAKE_SHARED_LIBRARY_SUFFIX}") install(FILES "${OpenCV_DIR}/lib/cv2${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION bin) if(UNIX AND NOT APPLE) install(CODE "file(RPATH_REMOVE FILE \"\${CMAKE_INSTALL_PREFIX}/bin/cv2${CMAKE_SHARED_LIBRARY_SUFFIX}\")") endif() list(APPEND _python_dirs "${OpenCV_DIR}/lib") endif() # install VTK python wrapping find_package(VTK REQUIRED) set(_VTK_PYTHON_TARGETS ) # find all vtk python wrapped targets foreach(_lib ${VTK_LIBRARIES}) # exclude system libs if(${_lib} MATCHES "^vtk.+") # use only python wrapped modules ( targets end with PythonD ) if(TARGET ${_lib}PythonD) list(APPEND _VTK_PYTHON_TARGETS ${_lib}Python) endif() endif() endforeach() # install the python modules and loaders foreach(_target ${_VTK_PYTHON_TARGETS}) # get the properties of the python wrapped target if( CMAKE_BUILD_TYPE STREQUAL "Debug") get_target_property(_target_lib "${_target}D" IMPORTED_LOCATION_DEBUG) else() get_target_property(_target_lib "${_target}D" IMPORTED_LOCATION_RELEASE) endif() get_filename_component(_filepath "${_target_lib}" PATH) - install(FILES "${_filepath}/${_target}${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION bin) - - install(CODE "file(RPATH_REMOVE + if(UNIX) + install(FILES "${_filepath}/${_target}${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION bin) + if( NOT APPLE ) + install(CODE "file(RPATH_REMOVE FILE \"\${CMAKE_INSTALL_PREFIX}/bin/${_target}${CMAKE_SHARED_LIBRARY_SUFFIX}\")") - - list(APPEND _python_libs "${_target}${CMAKE_SHARED_LIBRARY_SUFFIX}") + endif() + list(APPEND _python_libs "${_target}${CMAKE_SHARED_LIBRARY_SUFFIX}") + else(WIN32) + install(FILES "${_filepath}/${_target}.pyd" DESTINATION bin) + install(FILES "${_target_lib}" DESTINATION bin) + get_filename_component(_filename "${_target_lib}" NAME) + list(APPEND _python_libs "${_filename}") + endif() endforeach() # install vtk python. This folder contains all *.py files for VTK module loading. install(DIRECTORY "${VTK_DIR}/Wrapping/Python/vtk" DESTINATION bin/Python USE_SOURCE_PERMISSIONS COMPONENT Runtime) list(APPEND _python_dirs "${VTK_DIR}/lib") # install the python runtime from the superbuild if(NOT MITK_USE_SYSTEM_PYTHON) - list(APPEND _python_dirs "${Python_DIR}/lib") - #ToDo: install python stuff - install(DIRECTORY "${Python_DIR}/lib/python2.7" + if(UNIX) + list(APPEND _python_dirs "${Python_DIR}/lib") + # install python stuff + install(DIRECTORY "${Python_DIR}/lib/python2.7" DESTINATION bin/Python/lib USE_SOURCE_PERMISSIONS COMPONENT Runtime) - install(FILES "${Python_DIR}/include/python2.7/pyconfig.h" DESTINATION bin/Python/include/python2.7) + install(FILES "${Python_DIR}/include/python2.7/pyconfig.h" DESTINATION bin/Python/include/python2.7) + else(WIN32) + list(APPEND _python_dirs "${Python_DIR}/libs") + list(APPEND _python_dirs "${Python_DIR}/bin") + + install(DIRECTORY "${Python_DIR}/Lib" + DESTINATION bin/Python + USE_SOURCE_PERMISSIONS + COMPONENT Runtime) + install(DIRECTORY "${Python_DIR}/include" + DESTINATION bin/Python + USE_SOURCE_PERMISSIONS + COMPONENT Runtime) + endif() endif() list(REMOVE_DUPLICATES _python_dirs) endmacro() diff --git a/CMakeExternals/CableSwig.cmake b/CMakeExternals/CableSwig.cmake index 73cc64f959..0a70771456 100644 --- a/CMakeExternals/CableSwig.cmake +++ b/CMakeExternals/CableSwig.cmake @@ -1,44 +1,44 @@ #----------------------------------------------------------------------------- # CableSwig #----------------------------------------------------------------------------- -if(MITK_USE_Python) +if(MITK_USE_Python AND UNIX) # Sanity checks if(DEFINED CableSwig_DIR AND NOT EXISTS ${CableSwig_DIR}) message(FATAL_ERROR "CableSwig_DIR variable is defined but corresponds to non-existing directory") endif() set(proj CableSwig) set(proj_DEPENDENCIES ) set(CableSwig_DEPENDS ${proj}) if(NOT DEFINED CableSwig_DIR) set(additional_cmake_args ) ExternalProject_Add(${proj} SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}-src BINARY_DIR ${proj}-build PREFIX ${proj}-cmake URL ${MITK_THIRDPARTY_DOWNLOAD_PREFIX_URL}/CableSwig-ITK-3.20.0-v2.tar.gz URL_MD5 893882bf8b4fbfbae3fe8c747a75f7a0 INSTALL_COMMAND "" CMAKE_GENERATOR ${gen} CMAKE_ARGS ${ep_common_args} ${additional_cmake_args} -DBUILD_TESTING:BOOL=OFF -DSWIG_BUILD_EXAMPLES:BOOL=OFF DEPENDS ${proj_DEPENDENCIES} ) set(CableSwig_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) else() mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") endif() endif() diff --git a/CMakeExternals/ITK.cmake b/CMakeExternals/ITK.cmake index 1c19042442..1c845e25a2 100644 --- a/CMakeExternals/ITK.cmake +++ b/CMakeExternals/ITK.cmake @@ -1,101 +1,99 @@ #----------------------------------------------------------------------------- # ITK #----------------------------------------------------------------------------- # Sanity checks if(DEFINED ITK_DIR AND NOT EXISTS ${ITK_DIR}) message(FATAL_ERROR "ITK_DIR variable is defined but corresponds to non-existing directory") endif() set(proj ITK) set(proj_DEPENDENCIES GDCM) -if(MITK_USE_Python) - list(APPEND proj_DEPENDENCIES CableSwig) -endif() + if(MITK_USE_OpenCV) list(APPEND proj_DEPENDENCIES OpenCV) endif() set(ITK_DEPENDS ${proj}) if(NOT DEFINED ITK_DIR) set(additional_cmake_args ) if(MINGW) set(additional_cmake_args -DCMAKE_USE_WIN32_THREADS:BOOL=ON -DCMAKE_USE_PTHREADS:BOOL=OFF) endif() - if(MITK_USE_Python) + if(MITK_USE_Python AND UNIX) if(NOT MITK_USE_SYSTEM_PYTHON) - list(APPEND proj_DEPENDENCIES Python) + list(APPEND proj_DEPENDENCIES Python CableSwig) endif() list(APPEND additional_cmake_args -DITK_WRAPPING:BOOL=ON -DITK_WRAP_PYTHON:BOOL=ON -DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE} -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR} -DPYTHON_INCLUDE_DIR2:PATH=${PYTHON_INCLUDE_DIR2} -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY} #-DPYTHON_LIBRARIES=${PYTHON_LIBRARY} #-DPYTHON_DEBUG_LIBRARIES=${PYTHON_DEBUG_LIBRARIES} -DCableSwig_DIR:PATH=${CableSwig_DIR} #-DITK_WRAP_JAVA:BOOL=OFF -DITK_WRAP_unsigned_char:BOOL=ON #-DITK_WRAP_double:BOOL=ON -DITK_WRAP_rgb_unsigned_char:BOOL=ON #-DITK_WRAP_rgba_unsigned_char:BOOL=ON -DITK_WRAP_signed_char:BOOL=ON #-DWRAP_signed_long:BOOL=ON -DITK_WRAP_signed_short:BOOL=ON -DITK_WRAP_short:BOOL=ON -DITK_WRAP_unsigned_long:BOOL=ON ) else() list(APPEND additional_cmake_args -DUSE_WRAP_ITK:BOOL=OFF ) endif() if(MITK_USE_OpenCV) list(APPEND additional_cmake_args -DModule_ITKVideoBridgeOpenCV:BOOL=ON -DOpenCV_DIR:PATH=${OpenCV_DIR} ) endif() # Keep the behaviour of ITK 4.3 which by default turned on ITK Review # see MITK bug #17338 list(APPEND additional_cmake_args -DModule_ITKReview:BOOL=ON ) set(ITK_PATCH_COMMAND ${CMAKE_COMMAND} -DTEMPLATE_FILE:FILEPATH=${MITK_SOURCE_DIR}/CMakeExternals/EmptyFileForPatching.dummy -P ${MITK_SOURCE_DIR}/CMakeExternals/PatchITK-4.5.1.cmake) ExternalProject_Add(${proj} SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}-src BINARY_DIR ${proj}-build PREFIX ${proj}-cmake URL ${MITK_THIRDPARTY_DOWNLOAD_PREFIX_URL}/InsightToolkit-4.5.1-3e550bf8.tar.gz URL_MD5 80e433ffc0e81cdc19a03dd02a3c329b INSTALL_COMMAND "" PATCH_COMMAND ${ITK_PATCH_COMMAND} CMAKE_GENERATOR ${gen} CMAKE_ARGS ${ep_common_args} ${additional_cmake_args} -DBUILD_TESTING:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DITK_USE_SYSTEM_GDCM:BOOL=ON -DGDCM_DIR:PATH=${GDCM_DIR} DEPENDS ${proj_DEPENDENCIES} ) set(ITK_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) else() mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") endif() diff --git a/CMakeExternals/Python.cmake b/CMakeExternals/Python.cmake index 6959195409..ccf8fb5238 100644 --- a/CMakeExternals/Python.cmake +++ b/CMakeExternals/Python.cmake @@ -1,128 +1,136 @@ if( MITK_USE_Python AND NOT MITK_USE_SYSTEM_PYTHON ) if(NOT DEFINED Python_DIR) set(proj Python) set(proj_DEPENDENCIES ) set(Python_DEPENDS ${proj}) set(PYTHON_MAJOR_VERSION 2) set(PYTHON_MINOR_VERSION 7) set(PYTHON_PATCH_VERSION 3) # download the source code ExternalProject_Add(Python-src URL "https://www.python.org/ftp/python/${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}.${PYTHON_PATCH_VERSION}/Python-${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}.${PYTHON_PATCH_VERSION}.tgz" #URL_MD5 "d41d8cd98f00b204e9800998ecf8427e" #DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} SOURCE_DIR "${CMAKE_BINARY_DIR}/Python-${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}.${PYTHON_PATCH_VERSION}" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) set(additional_cmake_cache_args ) list(APPEND additional_cmake_cache_args -DBUILTIN_ARRAY:BOOL=ON -DBUILTIN_AUDIOOP:BOOL=ON -DBUILTIN_BINASCII:BOOL=ON -DBUILTIN_BISECT:BOOL=ON -DBUILTIN_BSDB:BOOL=ON -DBUILTIN_BSSDB:BOOL=ON -DBUILTIN_BZ2:BOOL=ON -DBUILTIN_CMATH:BOOL=ON -DBUILTIN_COLLECTIONS:BOOL=ON -DBUILTIN_CODECS_CN:BOOL=ON -DBUILTIN_CODECS_HK:BOOL=ON -DBUILTIN_CODECS_ISO2022:BOOL=ON -DBUILTIN_CODECS_JP:BOOL=ON -DBUILTIN_CODECS_KR:BOOL=ON -DBUILTIN_CODECS_TW:BOOL=ON -DBUILTIN_CPICKLE:BOOL=ON -DBUILTIN_CRYPT:BOOL=ON -DBUILTIN_CSTRINGIO:BOOL=ON -DBUILTIN_CSV:BOOL=ON -DBUILTIN_CTYPES:BOOL=ON -DBUILTIN_CTYPES_TEST:BOOL=ON -DBUILTIN_CURSES:BOOL=ON -DBUILTIN_DATETIME:BOOL=ON -DBUILTIN_DBM:BOOL=ON -DBUILTIN_ELEMENTTREE:BOOL=ON -DBUILTIN_FCNTL:BOOL=ON -DBUILTIN_FUNCTOOLS:BOOL=ON -DBUILTIN_FUTURE_BUILTINS:BOOL=ON -DBULTIN_GDBM:BOOL=ON -DBUILTIN_GRP:BOOL=ON -DBUILTIN_HASHLIB:BOOL=ON -DBUILTIN_HEAPQ:BOOL=ON -DBUILTIN_HOTSHOT:BOOL=ON -DBUILTIN_IO:BOOL=ON -DBUILTIN_ITERTOOLS:BOOL=ON -DBUILTIN_JSON:BOOL=ON -DBUILTIN_LOCALE:BOOL=ON -DBUILTIN_LSPROF:BOOL=ON -DBUILTIN_MATH:BOOL=ON -DBUILTIN_MMAP:BOOL=ON -DBUILTIN_MULTIBYTECODEC:BOOL=ON -DBUILTIN_MD5:BOOL=ON -DBUILTIN_MULTIPROCESSING:BOOL=ON -DBUILTIN_NIS:BOOL=ON -DBUILTIN_NIT:BOOL=ON -DBUILTIN_OPERATOR:BOOL=ON -DBUILTIN_PARSER:BOOL=ON -DBUILTIN_POSIX:BOOL=ON -DBUILTIN_PWD:BOOL=ON -DBUILTIN_PYEXPAT:BOOL=ON -DBUILTIN_READLINE:BOOL=ON -DBUILTIN_RESOURCE:BOOL=ON -DBULTIN_RANDOM:BOOL=ON -DBUILTIN_SCPROXY:BOOL=ON -DBUILTIN_SELECT:BOOL=ON -DBUILTIN_SHA:BOOL=ON -DBUILTIN_SHA256:BOOL=ON -DBUILTIN_SHA512:BOOL=ON -DBUILTIN_SOCKET:BOOL=ON -DBUILTIN_SPWD:BOOL=ON -DBUILTIN_SQLITE3:BOOL=ON -DBUILTIN_SSL:BOOL=ON -DBUILTIN_STROP:BOOL=ON -DBUILTIN_STRUCT:BOOL=ON -DBUILTIN_SUBPROCESS:BOOL=ON -DBUILTIN_SYSLOG:BOOL=ON -DBUILTIN_TERMIOS:BOOL=ON #-DBUILTIN_TESTCAPI:BOOL=OFF -DBUILTIN_TIME:BOOL=ON -DBUILTIN_TKINTER:BOOL=ON -DBUILTIN_UNICODEDATA:BOOL=ON -DBUILTIN_WINREG:BOOL=ON -DBUILTIN_ZLIB:BOOL=ON ) # CMake build environment for python ExternalProject_Add(${proj} GIT_REPOSITORY "git://github.com/davidsansome/python-cmake-buildsystem.git" GIT_TAG "3c5864f210a8d0ae1196be7c691252e16e459f59" - SOURCE_DIR ${proj}-cmake + SOURCE_DIR ${proj}-src + PREFIX ${proj}-cmake BINARY_DIR ${proj}-build + INSTALL_DIR ${proj}-install + CMAKE_ARGS + ${ep_common_args} + -DCMAKE_INSTALL_PREFIX:PATH= CMAKE_CACHE_ARGS -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/${proj}-install #-DBUILD_TESTING:BOOL=OFF -DBUILD_SHARED:BOOL=ON -DBUILD_STATIC:BOOL=OFF -DUSE_SYSTEM_LIBRARIES:BOOL=ON ${additional_cmake_cache_args} - ${ep_common_args} DEPENDS Python-src ${${proj}_DEPENDENCIES} ) set(Python_DIR "${CMAKE_BINARY_DIR}/${proj}-install") - set(PYTHON_EXECUTABLE "${CMAKE_BINARY_DIR}/${proj}-build/bin/python${CMAKE_EXECUTABLE_SUFFIX}") - set(PYTHON_INCLUDE_DIR "${CMAKE_BINARY_DIR}/${proj}-install/include/python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}") - set(PYTHON_LIBRARY "${CMAKE_BINARY_DIR}/${proj}-build/lib/${CMAKE_SHARED_LIBRARY_PREFIX}python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}") - + if(UNIX) + set(PYTHON_EXECUTABLE "${CMAKE_BINARY_DIR}/${proj}-build/bin/python${CMAKE_EXECUTABLE_SUFFIX}") + set(PYTHON_INCLUDE_DIR "${Python_DIR}/include/python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}") + set(PYTHON_LIBRARY "${CMAKE_BINARY_DIR}/${proj}-build/lib/${CMAKE_SHARED_LIBRARY_PREFIX}python${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}") + else(WIN32) + set(PYTHON_EXECUTABLE "${Python_DIR}/bin/python${CMAKE_EXECUTABLE_SUFFIX}") + set(PYTHON_INCLUDE_DIR "${Python_DIR}/include") + set(PYTHON_LIBRARY "${Python_DIR}/libs/python${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}.lib") + endif() else() mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") endif() endif()