Skip to content

Commit eea1293

Browse files
authored
Merge pull request #229 from ferdnyc/debian-py-fix
Don't break Python install path detection on Debian
2 parents f2b98e8 + 626a2f7 commit eea1293

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

src/bindings/python/CMakeLists.txt

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -65,29 +65,39 @@ if (PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND)
6565
target_link_libraries(${SWIG_MODULE_pyopenshot_REAL_NAME}
6666
${PYTHON_LIBRARIES} openshot)
6767

68-
### Check if the following Debian-friendly python module path exists
69-
SET(PYTHON_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages")
70-
if (NOT EXISTS ${PYTHON_MODULE_PATH})
71-
72-
### Check if another Debian-friendly python module path exists
73-
SET(PYTHON_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/dist-packages")
74-
if (NOT EXISTS ${PYTHON_MODULE_PATH})
75-
76-
### Calculate the python module path (using distutils)
77-
execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "\
68+
### FIND THE PYTHON INTERPRETER (AND THE SITE PACKAGES FOLDER)
69+
if (UNIX AND NOT APPLE)
70+
### Special-case for Debian's crazy, by checking to see if pybuild
71+
### is available. We don't use it, except as a canary in a coal mine
72+
find_program(PYBUILD_EXECUTABLE pybuild
73+
DOC "Path to Debian's pybuild utility")
74+
if (PYBUILD_EXECUTABLE)
75+
# We're on a Debian derivative, fall back to old path detection
76+
set(py_detection "import site; print(site.getsitepackages()[0])")
77+
set(PY_INSTALL_PREFIX "/usr/local") # An assumption (bad one?)
78+
else()
79+
# Use distutils to detect install path
80+
set (py_detection "\
7881
from distutils.sysconfig import get_python_lib; \
79-
print( get_python_lib( plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}' ) )"
80-
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
81-
OUTPUT_STRIP_TRAILING_WHITESPACE )
82-
83-
GET_FILENAME_COMPONENT(_ABS_PYTHON_MODULE_PATH
84-
"${_ABS_PYTHON_MODULE_PATH}" ABSOLUTE)
85-
FILE(RELATIVE_PATH _REL_PYTHON_MODULE_PATH
86-
${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
87-
SET(PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH})
82+
print( get_python_lib( plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}' ) )")
83+
set(PY_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
8884
endif()
8985
endif()
90-
message("PYTHON_MODULE_PATH: ${PYTHON_MODULE_PATH}")
86+
87+
if (NOT PYTHON_MODULE_PATH)
88+
execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "${py_detection}"
89+
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
90+
OUTPUT_STRIP_TRAILING_WHITESPACE )
91+
92+
GET_FILENAME_COMPONENT(_ABS_PYTHON_MODULE_PATH
93+
"${_ABS_PYTHON_MODULE_PATH}" ABSOLUTE)
94+
FILE(RELATIVE_PATH _REL_PYTHON_MODULE_PATH
95+
${PY_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
96+
SET(PYTHON_MODULE_PATH ${_REL_PYTHON_MODULE_PATH}
97+
CACHE PATH "Install path for Python modules (relative to prefix)")
98+
endif()
99+
100+
message(STATUS "Will install Python module to: ${PYTHON_MODULE_PATH}")
91101

92102
############### INSTALL HEADERS & LIBRARY ################
93103
### Install Python bindings

0 commit comments

Comments
 (0)