Skip to content

Commit cbc0456

Browse files
committed
[cmake] Allow to specify the Python executable used to build the bindings
1 parent 61c6627 commit cbc0456

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

CMakeLists.txt

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ endmacro()
4848

4949
configure_file(setup.in.py ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
5050

51-
macro(ADD_BINDINGS PYTHON SOURCES)
51+
macro(ADD_BINDINGS PYTHON PYTHON_EXECUTABLE SOURCES)
5252
# Create the build directory
5353
set(SETUP_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${PYTHON}/$<CONFIGURATION>")
5454
if(DEFINED CMAKE_BUILD_TYPE)
@@ -66,7 +66,7 @@ macro(ADD_BINDINGS PYTHON SOURCES)
6666
# Target to build the bindings
6767
set(TARGET_NAME eigen-${PYTHON}-bindings)
6868
add_custom_target(${TARGET_NAME} ALL
69-
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON} setup.py build_ext --inplace
69+
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON_EXECUTABLE} setup.py build_ext --inplace
7070
COMMENT "Generating local Eigen ${PYTHON} bindings"
7171
DEPENDS ${SOURCES} SOURCES ${SOURCES}
7272
)
@@ -84,19 +84,19 @@ macro(ADD_BINDINGS PYTHON SOURCES)
8484
endforeach()
8585
# Manual target to force regeneration
8686
add_custom_target(force-${TARGET_NAME}
87-
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON} setup.py build_ext --inplace --force
87+
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON_EXECUTABLE} setup.py build_ext --inplace --force
8888
COMMENT "Generating local Eigen ${PYTHON} bindings (forced)"
8989
)
9090
if(NOT ${DISABLE_TESTS})
9191
enable_testing()
9292
add_test(NAME test-${TARGET_NAME}
93-
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON} -m "pytest"
93+
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON_EXECUTABLE} -m "pytest"
9494
)
9595
endif()
9696
# Install targets
9797
if(DEFINED PYTHON_DEB_ROOT)
9898
add_custom_target(install-${TARGET_NAME}
99-
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON} setup.py install --root=${PYTHON_DEB_ROOT} --install-layout=deb
99+
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON_EXECUTABLE} setup.py install --root=${PYTHON_DEB_ROOT} --install-layout=deb
100100
COMMENT "Install Eigen ${PYTHON} bindings (Debian layout)"
101101
)
102102
else()
@@ -105,16 +105,16 @@ macro(ADD_BINDINGS PYTHON SOURCES)
105105
set(PIP_EXTRA_OPTIONS "--user")
106106
endif()
107107
if(DEFINED PIP_INSTALL_PREFIX)
108-
_pip_has_install_system(${PYTHON} PIP_HAS_INSTALL_SYSTEM)
109-
execute_process(COMMAND ${PYTHON} -c "import sys; print(\"python{}.{}\".format(sys.version_info.major, sys.version_info.minor));" OUTPUT_VARIABLE PYTHON_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
108+
_pip_has_install_system(${PYTHON_EXECUTABLE} PIP_HAS_INSTALL_SYSTEM)
109+
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print(\"python{}.{}\".format(sys.version_info.major, sys.version_info.minor));" OUTPUT_VARIABLE PYTHON_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
110110
set(PIP_TARGET "${PIP_INSTALL_PREFIX}/lib/${PYTHON_VERSION}/site-packages/")
111111
set(PIP_EXTRA_OPTIONS --target "${PIP_TARGET}")
112112
if(${PIP_HAS_INSTALL_SYSTEM})
113113
set(PIP_EXTRA_OPTIONS --system ${PIP_EXTRA_OPTIONS})
114114
endif()
115115
endif()
116116
add_custom_target(install-${TARGET_NAME}
117-
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON} -m pip install . ${PIP_EXTRA_OPTIONS} --upgrade
117+
COMMAND ${CMAKE_COMMAND} -E chdir "${SETUP_LOCATION}" ${PYTHON_EXECUTABLE} -m pip install . ${PIP_EXTRA_OPTIONS} --upgrade
118118
COMMENT "Install Eigen ${PYTHON} bindings"
119119
)
120120
endif()
@@ -134,16 +134,26 @@ set(BINDINGS_SOURCES
134134
tests/test_eigen.py
135135
)
136136

137+
if(NOT DEFINED Python_EXECUTABLE)
138+
set(Python_EXECUTABLE "python")
139+
endif()
140+
if(NOT DEFINED Python2_EXECUTABLE)
141+
set(Python2_EXECUTABLE "python2")
142+
endif()
143+
if(NOT DEFINED Python3_EXECUTABLE)
144+
set(Python3_EXECUTABLE "python3")
145+
endif()
146+
137147
if(${PYTHON_BINDING})
138148
if(${PYTHON_BINDING_BUILD_PYTHON2_AND_PYTHON3})
139-
ADD_BINDINGS("python2" "${BINDINGS_SOURCES}")
140-
ADD_BINDINGS("python3" "${BINDINGS_SOURCES}")
149+
ADD_BINDINGS(python2 "${Python2_EXECUTABLE}" "${BINDINGS_SOURCES}")
150+
ADD_BINDINGS(python3 "${Python3_EXECUTABLE}" "${BINDINGS_SOURCES}")
141151
elseif(${PYTHON_BINDING_FORCE_PYTHON3})
142-
ADD_BINDINGS("python3" "${BINDINGS_SOURCES}")
152+
ADD_BINDINGS(python3 "${Python3_EXECUTABLE}" "${BINDINGS_SOURCES}")
143153
elseif(${PYTHON_BINDING_FORCE_PYTHON2})
144-
ADD_BINDINGS("python2" "${BINDINGS_SOURCES}")
154+
ADD_BINDINGS(python2 "${Python2_EXECUTABLE}" "${BINDINGS_SOURCES}")
145155
else()
146-
ADD_BINDINGS("python" "${BINDINGS_SOURCES}")
156+
ADD_BINDINGS(python "${Python_EXECUTABLE}" "${BINDINGS_SOURCES}")
147157
endif()
148158
else()
149159
enable_testing()

0 commit comments

Comments
 (0)