Skip to content

Commit 1b7d670

Browse files
committed
Use new CMake FindPython module
1 parent 6bf12d8 commit 1b7d670

File tree

10 files changed

+36
-55
lines changed

10 files changed

+36
-55
lines changed

.circleci/config.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,13 @@ jobs:
135135
no_output_timeout: 20.0m
136136
command: |
137137
env
138-
_python_include=$(python -c "import sysconfig; print(sysconfig.get_path('include'))")
139138
export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib"
140139
export CTEST_CACHE="
141140
CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY}
142141
SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig
143142
BUILD_EXAMPLES:BOOL=ON
144-
PYTHON_INCLUDE_DIR:PATH=${_python_include}"
143+
Python_EXECUTABLE:PATH=$(which python)
144+
"
145145
ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake"
146146
- run:
147147
name: "CMake Cache Dump"
@@ -172,13 +172,13 @@ jobs:
172172
no_output_timeout: 20.0m
173173
command: |
174174
env
175-
_python_include=$(python -c "import sysconfig; print(sysconfig.get_path('include'))")
176175
export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib"
177176
export CTEST_CACHE="
178177
CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY}
179178
SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig
180179
BUILD_EXAMPLES:BOOL=ON
181-
PYTHON_INCLUDE_DIR:PATH=${_python_include}"
180+
Python_EXECUTABLE:PATH=$(which python)
181+
"
182182
ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake"
183183
r-and-test:
184184
<<: *defaults

CMake/sitkGenerateFilterSource.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ function( expand_template FILENAME input_dir output_dir library_name )
167167
set ( IMAGE_FILTER_LIST ${IMAGE_FILTER_LIST} ${FILENAME} CACHE INTERNAL "" )
168168

169169
# validate json files if python is available
170-
if ( PYTHON_EXECUTABLE AND NOT PYTHON_VERSION_STRING VERSION_LESS 2.6 )
171-
set ( JSON_VALIDATE_COMMAND COMMAND "${PYTHON_EXECUTABLE}" "${SimpleITK_SOURCE_DIR}/Utilities/JSON/JSONValidate.py" "${input_json_file}" )
170+
if ( Python_EXECUTABLE AND NOT Python_VERSION_STRING VERSION_LESS 2.6 )
171+
set ( JSON_VALIDATE_COMMAND COMMAND "${Python_EXECUTABLE}" "${SimpleITK_SOURCE_DIR}/Utilities/JSON/JSONValidate.py" "${input_json_file}" )
172172
endif ()
173173

174174
# header

CMake/sitkLanguageOptions.cmake

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -106,52 +106,45 @@ endif()
106106

107107
sitkLanguageShouldDoFindPackage( PYTHON )
108108

109+
if ( DEFINED PYTHON_EXECUTABLE AND NOT DEFINED Python_EXECUTABLE)
110+
message(WARNING "Use Python_EXECUTABLE! Ignoring PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}" )
111+
endif()
112+
109113
if( _do_find_package )
110114

111-
find_package ( PythonInterp ${_find_package_extra_args})
115+
set( WRAP_PYTHON_DEFAULT OFF )
112116

113117
# if we don't need to link against a library, the make the
114118
# find_package quiet.
115119
if ( SITK_UNDEFINED_SYMBOLS_ALLOWED )
116120
set( _find_package_extra_args "QUIET" )
117121
endif()
118122

119-
if ( PYTHONINTERP_FOUND )
120-
find_package ( PythonLibs ${PYTHON_VERSION_STRING} EXACT ${_find_package_extra_args} )
121-
else ()
122-
find_package ( PythonLibs ${_find_package_extra_args} )
123-
endif()
124-
125-
if ( PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND
126-
AND (PYTHON_VERSION_STRING VERSION_EQUAL PYTHONLIBS_VERSION_STRING) )
123+
find_package( Python ${_find_package_extra_args} COMPONENTS Development Interpreter)
124+
message("Python_Interpreter_FOUND: ${Python_Interpreter_FOUND}")
125+
message("Python_Development_FOUND: ${Python_Development_FOUND}")
126+
if ( Python_Interpreter_FOUND AND Python_Development_FOUND )
127127
set( WRAP_PYTHON_DEFAULT ON )
128-
else()
129-
set( WRAP_PYTHON_DEFAULT OFF )
130128
endif()
131129
endif()
132130

133131
option( WRAP_PYTHON "Wrap Python" ${WRAP_PYTHON_DEFAULT} )
134132

135133

136134
if ( WRAP_PYTHON )
137-
if ( PYTHON_VERSION_STRING VERSION_LESS 2.7 )
138-
message( WARNING "Python version less than 2.7: \"${PYTHON_VERSION_STRING}\"." )
135+
set (_Python_MINIMUM_VERSION "3.7")
136+
if ( Python_VERSION VERSION_LESS ${_Python_MINIMUM_VERSION} )
137+
message( WARNING "Python version less than ${_Python_MINIMUM_VERSION}: \"${Python_VERSION}\"." )
139138
endif()
140139

141140
list( APPEND SITK_LANGUAGES_VARS
142-
PYTHON_DEBUG_LIBRARY
143-
PYTHON_EXECUTABLE
144-
PYTHON_LIBRARY
145-
PYTHON_INCLUDE_DIR
146-
# PYTHON_INCLUDE_PATH ( deprecated )
141+
Python_ROOT_DIR
142+
Python_EXECUTABLE
143+
Python_LIBRARY
144+
Python_INCLUDE_DIR
145+
Python_LIBRARY_DEBUG
146+
Python_LIBRARY_RELEASE
147147
)
148-
# Debian "jessie" has this additional variable required to match
149-
# python versions.
150-
if(PYTHON_INCLUDE_DIR2)
151-
list( APPEND SITK_LANGUAGES_VARS
152-
PYTHON_INCLUDE_DIR2
153-
)
154-
endif()
155148
endif ()
156149

157150

SuperBuild/External_ITK.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ foreach (_varName ${_varNames})
4848
endforeach()
4949

5050
list(APPEND ITK_VARS
51-
PYTHON_EXECUTABLE
51+
Python_EXECUTABLE
5252
)
5353

5454
VariableListToCache( ITK_VARS ep_itk_cache )

SuperBuild/swig_configure_step.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ execute_process(
3434
--with-pcre2-prefix=@pcre2_install_dir@
3535
--without-octave
3636
--without-guile
37-
--with-python=@PYTHON_EXECUTABLE@
37+
--with-python=@Python_EXECUTABLE@
3838
WORKING_DIRECTORY @swig_binary_dir@
3939
)

Utilities/Distribution/MacARM/mac_build_py.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,7 @@ cmake \
5353
-D "SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}/Swig/bin/swig" \
5454
-D "BUILD_EXAMPLES:BOOL=ON" \
5555
-D "BUILD_TESTING:BOOL=ON" \
56-
-D "PYTHON_EXECUTABLE:FILEPATH=${PY_DIR}/bin/python${PY_MAJOR}" \
57-
-D "PYTHON_INCLUDE_DIR:PATH=${PY_DIR}/include/python${PY_VERSION}" \
58-
-D "PYTHON_LIBRARY:FILEPATH=${PY_DIR}/libpython${PY_VERSION}.dylib" \
56+
-D "Python_EXECUTABLE:FILEPATH=${PY_DIR}/bin/python${PY_MAJOR}" \
5957
-D "SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-11.0-arm64" \
6058
-D "SimpleITK_BUILD_DISTRIBUTE:BOOL=ON" \
6159
-D "SimpleITK_PYTHON_WHEEL:BOOL=1" \

Utilities/Distribution/manylinux/imagefiles/cmd.sh

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ function build_simpleitk_python {
6363

6464
echo ""
6565
echo "PYTHON_EXECUTABLE:${PYTHON_EXECUTABLE}"
66-
echo "PYTHON_INCLUDE_DIR:${PYTHON_INCLUDE_DIR}"
67-
echo "PYTHON_LIBRARY:${PYTHON_LIBRARY}"
6866

6967
rm -rf ${BLD_DIR}-${PYTHON} &&
7068
mkdir -p ${BLD_DIR}-${PYTHON} &&
@@ -81,8 +79,7 @@ function build_simpleitk_python {
8179
-DSimpleITK_BUILD_STRIP:BOOL=ON \
8280
-DSimpleITK_PYTHON_WHEEL:BOOL=ON \
8381
-DSimpleITK_PYTHON_EGG:BOOL=OFF \
84-
-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE} \
85-
-DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR} \
82+
-DPython_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE} \
8683
${SRC_DIR}/Wrapping/Python &&
8784
make &&
8885
make dist

Utilities/Doxygen/Doxygen.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ if (BUILD_DOXYGEN)
5555
)
5656

5757
add_custom_command( OUTPUT "${PROJECT_BINARY_DIR}/Documentation/Doxygen/FilterCoverage.dox"
58-
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/Utilities/CSVtoTable.py -d ${PROJECT_SOURCE_DIR}/Utilities/filters.csv ${PROJECT_BINARY_DIR}/Documentation/Doxygen/FilterCoverage.dox
58+
COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/Utilities/CSVtoTable.py -d ${PROJECT_SOURCE_DIR}/Utilities/filters.csv ${PROJECT_BINARY_DIR}/Documentation/Doxygen/FilterCoverage.dox
5959
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/Utilities"
6060
DEPENDS "${PROJECT_SOURCE_DIR}/Utilities/filters.csv" "${PROJECT_SOURCE_DIR}/Utilities/CSVtoTable.py"
6161
)
@@ -73,7 +73,7 @@ if (BUILD_DOXYGEN)
7373
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/Utilities/Doxygen
7474
)
7575

76-
execute_process(COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_LIST_DIR}/datetime.py"
76+
execute_process(COMMAND ${Python_EXECUTABLE} "${CMAKE_CURRENT_LIST_DIR}/datetime.py"
7777
RESULT_VARIABLE CMD_RESULT
7878
OUTPUT_VARIABLE _DATETIME)
7979

Wrapping/Python/CMakeLists.txt

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@ cmake_minimum_required(VERSION ${SITK_CMAKE_MINIMUM_REQUIRED_VERSION})
44
project( SimpleITK_Python )
55

66
include(../../CMake/sitkProjectLanguageCommon.cmake NO_POLICY_SCOPE)
7-
8-
if ( SITK_UNDEFINED_SYMBOLS_ALLOWED )
9-
set( _QUIET_LIBRARY "QUIET" )
10-
else()
11-
set( _QUIET_LIBRARY "REQUIRED" )
12-
endif()
13-
find_package ( PythonInterp REQUIRED )
14-
find_package ( PythonLibs ${_QUIET_LIBRARY} )
7+
find_package( Python REQUIRED COMPONENTS Interpreter Development )
158
include_directories ( ${SimpleITK_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} )
169

1710
#
@@ -47,18 +40,18 @@ SWIG_add_module ( SimpleITK python
4740
sitkPyCommand.cxx )
4841
set(SWIG_MODULE_SimpleITKPython_TARGET_NAME "${SWIG_MODULE_SimpleITK_TARGET_NAME}")
4942
target_link_libraries( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME} ${SimpleITK_LIBRARIES} )
50-
if(NOT PYTHON_DEBUG_LIBRARIES AND MSVC)
43+
if(NOT Python_DEBUG_LIBRARY AND MSVC)
5144
# If there is not a specified debug library use the release library,
5245
# via a special sitkPython.h header.
5346
target_compile_definitions(${SWIG_MODULE_SimpleITKPython_TARGET_NAME}
5447
PRIVATE
5548
$<$<CONFIG:Debug>:SWIG_PYTHON_INTERPRETER_NO_DEBUG>)
5649
endif()
57-
sitk_target_link_libraries_with_dynamic_lookup( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME} ${PYTHON_LIBRARIES} )
50+
sitk_target_link_libraries_with_dynamic_lookup( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME} ${Python_LIBRARIES} )
5851

5952
target_include_directories( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME}
6053
PRIVATE
61-
${PYTHON_INCLUDE_DIR} )
54+
${Python_INCLUDE_DIRS} )
6255
target_include_directories( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME}
6356
PRIVATE
6457
${CMAKE_CURRENT_SOURCE_DIR} )
@@ -92,7 +85,7 @@ sitk_strip_target( ${SWIG_MODULE_SimpleITKPython_TARGET_NAME} )
9285
set( SimpleITK_PYTHON_PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
9386
file( TO_NATIVE_PATH "${SimpleITK_PYTHON_PACKAGE_DIR}" SimpleITK_PYTHON_PACKAGE_DIR )
9487

95-
set(SimpleITK_PYTHON_TEST_EXECUTABLE "${PYTHON_EXECUTABLE}" CACHE INTERNAL "Python executable for testing." FORCE )
88+
set(SimpleITK_PYTHON_TEST_EXECUTABLE "${Python_EXECUTABLE}" CACHE INTERNAL "Python executable for testing." FORCE )
9689

9790

9891
configure_file(

Wrapping/Python/LegacyPackaging.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ if (SimpleITK_PYTHON_USE_VIRTUALENV)
8484
DEPENDS "${VIRTUAL_PYTHON_EXECUTABLE}" )
8585

8686
add_custom_command( OUTPUT "${VIRTUAL_PYTHON_EXECUTABLE}"
87-
COMMAND "${PYTHON_EXECUTABLE}" "-m" "venv" "--clear" "${PythonVirtualenvHome}"
87+
COMMAND "${Python_EXECUTABLE}" "-m" "venv" "--clear" "${PythonVirtualenvHome}"
8888
COMMAND "${VIRTUAL_PYTHON_EXECUTABLE}" "-m" "pip" "install" "--upgrade" "pip"
8989
COMMAND "${VIRTUAL_PYTHON_EXECUTABLE}" "-m" "pip" "install" "wheel" "numpy!=1.24.1,!=1.24.0" "."
9090
WORKING_DIRECTORY "${SimpleITK_Python_BINARY_DIR}"

0 commit comments

Comments
 (0)