1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
###############################################################################
# Create the PyUtils library
SUBDIRS(PyUtils)
SUBDIRS(Tests)
SUBDIRS(itkExtras)
###############################################################################
# Add doxygen support : Experimental
SET(DOXYGEN_MAN_PATH CACHE PATH "Experimental/Python only: Directory in which doxygen-generated man pages for itk classes are or should be placed.")
IF(DOXYGEN_MAN_PATH)
# Configure the make_doxygen_conf.py script.
SET(CONFIG_ITK_PATH)
FOREACH(dir ${ITK_INCLUDE_DIRS})
SET(CONFIG_ITK_PATH "${CONFIG_ITK_PATH}'${dir}',\n")
ENDFOREACH(dir)
SET(CONFIG_WRAP_ITK_DOXYGEN_ROOT "${DOXYGEN_MAN_PATH}")
SET(CONFIG_ITK_SOURCE_DIR "${ITK_SOURCE_DIR}")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/make_doxygen_config.py.in"
"${CMAKE_CURRENT_BINARY_DIR}/make_doxygen_config.py"
@ONLY IMMEDIATE)
ENDIF(DOXYGEN_MAN_PATH)
###############################################################################
# Configure the path-dependent itkConfig.py
# we specify these directories with relative paths so that the file can be
# bundled up into an install conventiently. Python will take care of turning
# the / path separator into \ on windows if needed.
IF(CMAKE_CONFIGURATION_TYPES)
SET(CONFIG_WRAP_ITK_DATA_ROOT "../../Data")
SET(CONFIG_WRAP_ITK_TEST_ROOT "../../Testing")
SET(CONFIG_PYTHON_CONFIGPY_DIR "../Configuration")
FOREACH(config ${CMAKE_CONFIGURATION_TYPES})
# SWIG-generated libs and *.py files are sent to ${config} subdir
# This assumes that LIBRARY_OUTPUT_PATH is WrapITK_BINARY_DIR/bin (bad!)
# TODO: We need a better way to do this.
SET(CONFIG_PYTHON_SWIGPY_DIR "../../lib/${config}")
SET(CONFIG_PYTHON_SWIGLIB_DIR "../../lib/${config}")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/itkConfig.py.in"
"${WrapITK_BINARY_DIR}/Python/${config}/itkConfig.py"
@ONLY IMMEDIATE)
ENDFOREACH(config)
ELSE(CMAKE_CONFIGURATION_TYPES)
SET(CONFIG_WRAP_ITK_DATA_ROOT "../Data")
SET(CONFIG_WRAP_ITK_TEST_ROOT "../Testing")
SET(CONFIG_PYTHON_CONFIGPY_DIR "Configuration")
SET(CONFIG_PYTHON_SWIGPY_DIR "../lib")
SET(CONFIG_PYTHON_SWIGLIB_DIR "../lib")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/itkConfig.py.in"
"${WrapITK_BINARY_DIR}/Python/itkConfig.py"
@ONLY IMMEDIATE)
ENDIF(CMAKE_CONFIGURATION_TYPES)
SET(CONFIG_WRAP_ITK_TEST_ROOT "None")
SET(CONFIG_PYTHON_SWIGLIB_DIR "../lib")
SET(CONFIG_PYTHON_SWIGPY_DIR "../lib")
SET(CONFIG_PYTHON_CONFIGPY_DIR "Configuration")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/itkConfig.py.in"
"${WrapITK_BINARY_DIR}/Python/InstallOnly/itkConfig.py"
@ONLY IMMEDIATE)
WRAP_ITK_INSTALL(/Python "${WrapITK_BINARY_DIR}/Python/InstallOnly/itkConfig.py")
###############################################################################
# Copy python files for out-of-source builds, and set up install of same.
# Create a list of Python files.
# WrapITK/Python/*.py
SET(ITK_PYTHON_FILES
itk
itkBase
itkTemplate
itkTypes
# itkExtras/__init__
itkLazy
)
# Done listing files.
# Now copy these files if necessary.
IF ("${WrapITK_BINARY_DIR}" MATCHES "^${WrapITK_SOURCE_DIR}$")
# In source build -- no need to copy Python file. Do need to set up the install.
FOREACH(file ${ITK_PYTHON_FILES})
SET(install_tgt "${CMAKE_CURRENT_SOURCE_DIR}/${file}.py")
SET(WRAP_ITK_PYTHON_INSTALL_FILES ${WRAP_ITK_PYTHON_INSTALL_FILES} "${install_tgt}")
ENDFOREACH(file)
ELSE ("${WrapITK_BINARY_DIR}" MATCHES "^${WrapITK_SOURCE_DIR}$")
SET(WRAP_ITK_PYTHON_FILES)
ADD_CUSTOM_TARGET(copy_python_files ALL)
FOREACH(file ${ITK_PYTHON_FILES})
SET(src "${CMAKE_CURRENT_SOURCE_DIR}/${file}.py")
# recall that WRAP_ITK_BUILD_INTDIR expands to nothing if no config types are set,
# or to "CMAKE_CONFIG_INTDIR/" if there are such. Likewise, WRAP_ITK_INSTALL_INTDIR
# expands to ${BUILD_TYPE}/ or nothing.
SET(copy_tgt "${CMAKE_CURRENT_BINARY_DIR}/${WRAP_ITK_BUILD_INTDIR}${file}.py")
SET(WRAP_ITK_PYTHON_FILES ${WRAP_ITK_PYTHON_FILES} "${copy_tgt}")
SET(install_tgt "${CMAKE_CURRENT_BINARY_DIR}/${WRAP_ITK_INSTALL_INTDIR}${file}.py")
SET(WRAP_ITK_PYTHON_INSTALL_FILES ${WRAP_ITK_PYTHON_INSTALL_FILES} "${install_tgt}")
# create the directory to avoid loosing case on windows
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${WRAP_ITK_INSTALL_INTDIR}${path})
ADD_CUSTOM_COMMAND(SOURCE ${src}
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${src} ${copy_tgt}
OUTPUTS ${copy_tgt}
TARGET copy_python_files
COMMENT "Copying ${file}.py to build dir.")
ENDFOREACH(file)
# driver command to make the copy happen.
ADD_CUSTOM_COMMAND(
SOURCE copy_python_files
DEPENDS ${WRAP_ITK_PYTHON_FILES}
TARGET copy_python_files)
ENDIF ("${WrapITK_BINARY_DIR}" MATCHES "^${WrapITK_SOURCE_DIR}$")
# Install the package python files.
WRAP_ITK_INSTALL(/Python ${WRAP_ITK_PYTHON_INSTALL_FILES})
###############################################################################
# Configure and install the custom python .pth files
IF(CMAKE_CONFIGURATION_TYPES)
FOREACH(config ${CMAKE_CONFIGURATION_TYPES})
SET(CONFIG_WRAP_ITK_PYTHON_DIR "${CMAKE_CURRENT_BINARY_DIR}/${config}")
# SWIG-generated libs and *.py files are sent to ${config} subdir
# This assumes that LIBRARY_OUTPUT_PATH is WrapITK_BINARY_DIR/bin (bad!)
# TODO: We need a better way to do this.
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/WrapITK.pth.in"
"${CMAKE_CURRENT_BINARY_DIR}/${config}/WrapITK.pth"
@ONLY IMMEDIATE)
ENDFOREACH(config)
ELSE(CMAKE_CONFIGURATION_TYPES)
SET(CONFIG_WRAP_ITK_PYTHON_DIR "${CMAKE_CURRENT_BINARY_DIR}")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/WrapITK.pth.in"
"${CMAKE_CURRENT_BINARY_DIR}/WrapITK.pth"
@ONLY IMMEDIATE)
ENDIF(CMAKE_CONFIGURATION_TYPES)
SET(CONFIG_WRAP_ITK_PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/${WRAP_ITK_INSTALL_PREFIX}/Python")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/WrapITK.pth.in"
"${CMAKE_CURRENT_BINARY_DIR}/InstallOnly/WrapITK.pth"
@ONLY IMMEDIATE)
IF(PYTHON_EXECUTABLE)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/det_spp.py "try:\n import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1)\nexcept: pass")
EXEC_PROGRAM("${PYTHON_EXECUTABLE}"
ARGS "\"${CMAKE_CURRENT_BINARY_DIR}/det_spp.py\""
OUTPUT_VARIABLE py_spp
)
ENDIF(PYTHON_EXECUTABLE)
STRING(REGEX REPLACE "\\\\" "/" py_spp_nobackslashes "${py_spp}")
SET(PY_SITE_PACKAGES_PATH "${py_spp_nobackslashes}" CACHE PATH "Python site-packages directory to install a .pth file pointing at WrapITK Python modules.")
MARK_AS_ADVANCED(PY_SITE_PACKAGES_PATH)
IF(PY_SITE_PACKAGES_PATH)
INSTALL_AT_ABSOLUTE_PATH(install_wrapitk_compatibility "${PY_SITE_PACKAGES_PATH}" "${CMAKE_CURRENT_BINARY_DIR}/InstallOnly/WrapITK.pth")
ENDIF(PY_SITE_PACKAGES_PATH)
# # compile python files
# SET(PYTHON_MODULES "")
# FOREACH(m ${WRAP_ITK_MODULES})
# SET(PYTHON_MODULES ${PYTHON_MODULES} _${m}Python)
# ENDFOREACH(m)
#
# ADD_CUSTOM_TARGET(PythonCompile ALL
# ${PYTHON_EXECUTABLE}
# ${PY_SITE_PACKAGES_PATH}/../compileall.py -l
# -d "${CMAKE_INSTALL_PREFIX}/${WRAP_ITK_INSTALL_PREFIX}/lib"
# ${WrapITK_BINARY_DIR}/lib
#
# COMMAND ${PYTHON_EXECUTABLE}
# ${PY_SITE_PACKAGES_PATH}/../compileall.py -l
# -d "${CMAKE_INSTALL_PREFIX}/${WRAP_ITK_INSTALL_PREFIX}/Python"
# ${WrapITK_BINARY_DIR}/Python
#
# DEPENDS SwigRuntimePython ${PYTHON_MODULES}
# )
|