Skip to content

Commit 3bcb0fb

Browse files
committed
Fixed python discovery using more modern CMake functions. For old CMake they are bundled and backported. For newer CMake the ones shipped with CMake are used.
1 parent 7046fb0 commit 3bcb0fb

7 files changed

Lines changed: 3332 additions & 42 deletions

File tree

CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ OPTION (DISABLE_SHARED "Do not build a shared version of the libraries?" OFF)
77

88
OPTION (ENABLE_PERL "Build the perl bindings?" OFF)
99
OPTION (ENABLE_PYTHON "Build the python bindings?" OFF)
10+
OPTION (ENABLE_PYTHON3 "Build the python3 bindings?" OFF)
1011
OPTION (ENABLE_RUBY "Build the ruby bindings?" OFF)
1112
OPTION (ENABLE_TCL "Build the Tcl bindings?" OFF)
1213

@@ -55,8 +56,13 @@ ENDIF (NOT PKGCONFIG_INSTALL_DIR)
5556
####################################################################
5657

5758
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
58-
SET (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
59-
INSTALL( FILES ${CMAKE_MODULE_PATH}/FindLibSolv.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/cmake/Modules )
59+
SET (OUR_MODULES_DIR "${CMAKE_SOURCE_DIR}/cmake/modules")
60+
SET (CMAKE_MODULE_PATH "${OUR_MODULES_DIR}")
61+
IF (${CMAKE_VERSION} VERSION_LESS "3.12")
62+
SET (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_SOURCE_DIR}/cmake/FindPythonFromGit")
63+
ENDIF ()
64+
65+
INSTALL( FILES "${OUR_MODULES_DIR}/FindLibSolv.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/cmake/Modules" COMPONENT "libsolv-dev")
6066

6167
# for shared libraries on windows (DLLs), we just export all symbols for now
6268
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

bindings/python/CMakeLists.txt

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,10 @@
1-
IF (ENABLE_PYTHON3 AND NOT DEFINED PythonLibs_FIND_VERSION)
2-
# if we build both for python2 and python3, make this the python2 build.
3-
# see comment in the python3 CMakeLists.txt file
4-
SET (PythonLibs_FIND_VERSION 2)
5-
SET (PythonLibs_FIND_VERSION_MAJOR 2)
6-
ENDIF (ENABLE_PYTHON3 AND NOT DEFINED PythonLibs_FIND_VERSION)
1+
find_package (Python2 COMPONENTS Interpreter Development)
72

8-
FIND_PACKAGE (PythonLibs REQUIRED)
9-
IF(PYTHONLIBS_VERSION_STRING MATCHES "^([0-9.]+)")
10-
SET(python_version "${CMAKE_MATCH_1}")
11-
ELSE()
12-
MESSAGE(FATAL_ERROR "PythonLibs version format unknown '${PYTHONLIBS_VERSION_STRING}'")
13-
ENDIF()
14-
FIND_PACKAGE (PythonInterp ${python_version} REQUIRED)
15-
16-
EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
17-
18-
IF (NOT DEFINED PYTHON_VERSION_MAJOR)
19-
SET (PYTHON_VERSION_MAJOR 2)
20-
ENDIF (NOT DEFINED PYTHON_VERSION_MAJOR)
21-
IF (${PYTHON_VERSION_MAJOR} GREATER 2)
22-
SET (SWIG_PY_FLAGS -DPYTHON3=1)
23-
ENDIF (${PYTHON_VERSION_MAJOR} GREATER 2)
243
SET (SWIG_PY_FLAGS ${SWIG_PY_FLAGS} -DSWIG_PYTHON_LEGACY_BOOL=1)
254

265
MESSAGE (STATUS "Python executable: ${PYTHON_EXECUTABLE}")
27-
MESSAGE (STATUS "Python installation dir: ${PYTHON_INSTALL_DIR}")
28-
MESSAGE (STATUS "Python include path: ${PYTHON_INCLUDE_PATH}")
6+
MESSAGE (STATUS "Python installation dir: ${Python2_STDARCH}")
7+
MESSAGE (STATUS "Python include path: ${Python2_INCLUDE_DIRS}")
298

309
ADD_CUSTOM_COMMAND (
3110
OUTPUT solv_python.c
@@ -35,12 +14,11 @@ ADD_CUSTOM_COMMAND (
3514
)
3615

3716
ADD_DEFINITIONS(-Wno-unused)
38-
INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
17+
INCLUDE_DIRECTORIES (${Python2_INCLUDE_DIRS})
3918

4019
ADD_LIBRARY (bindings_python MODULE solv_python.c)
4120
SET_TARGET_PROPERTIES (bindings_python PROPERTIES PREFIX "" OUTPUT_NAME "_solv")
4221
TARGET_LINK_LIBRARIES (bindings_python libsolvext libsolv ${SYSTEM_LIBRARIES})
4322

44-
INSTALL (TARGETS bindings_python LIBRARY DESTINATION ${PYTHON_INSTALL_DIR})
45-
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${PYTHON_INSTALL_DIR})
46-
23+
INSTALL (TARGETS bindings_python LIBRARY DESTINATION ${Python2_STDARCH})
24+
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${Python2_STDARCH})

bindings/python3/CMakeLists.txt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,14 @@
66
# we cannot use FIND_PACKAGE PythonLibs here, as this would
77
# clash with the python variables.
88
#
9-
IF (NOT DEFINED PYTHON3_EXECUTABLE)
10-
SET (PYTHON3_EXECUTABLE "/usr/bin/python3")
11-
ENDIF (NOT DEFINED PYTHON3_EXECUTABLE)
12-
13-
EXECUTE_PROCESS(COMMAND ${PYTHON3_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON3_INSTALL_DIR)
14-
EXECUTE_PROCESS(COMMAND ${PYTHON3_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_inc())" OUTPUT_VARIABLE PYTHON3_INCLUDE_DIR)
9+
find_package (Python3 COMPONENTS Interpreter Development)
1510

1611
SET (SWIG_PY3_FLAGS -DPYTHON3=1)
1712
SET (SWIG_PY3_FLAGS ${SWIG_PY3_FLAGS} -DSWIG_PYTHON_LEGACY_BOOL=1)
1813

19-
MESSAGE (STATUS "Python3 executable: ${PYTHON3_EXECUTABLE}")
20-
MESSAGE (STATUS "Python3 installation dir: ${PYTHON3_INSTALL_DIR}")
21-
MESSAGE (STATUS "Python3 include path: ${PYTHON3_INCLUDE_DIR}")
14+
MESSAGE (STATUS "Python3 executable: ${PYTHON_EXECUTABLE}")
15+
MESSAGE (STATUS "Python3 installation dir: ${Python3_STDARCH}")
16+
MESSAGE (STATUS "Python3 include path: ${Python3_INCLUDE_DIRS}")
2217

2318
ADD_CUSTOM_COMMAND (
2419
OUTPUT solv_python.c
@@ -28,11 +23,11 @@ ADD_CUSTOM_COMMAND (
2823
)
2924

3025
ADD_DEFINITIONS(-Wno-unused)
31-
INCLUDE_DIRECTORIES (${PYTHON3_INCLUDE_DIR})
26+
INCLUDE_DIRECTORIES (${Python3_INCLUDE_DIRS})
3227

3328
ADD_LIBRARY (bindings_python3 SHARED solv_python.c)
3429
SET_TARGET_PROPERTIES (bindings_python3 PROPERTIES PREFIX "" OUTPUT_NAME "_solv")
3530
TARGET_LINK_LIBRARIES (bindings_python3 libsolvext libsolv ${SYSTEM_LIBRARIES})
3631

37-
INSTALL (TARGETS bindings_python3 LIBRARY DESTINATION ${PYTHON3_INSTALL_DIR})
38-
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${PYTHON3_INSTALL_DIR})
32+
INSTALL (TARGETS bindings_python3 LIBRARY DESTINATION ${Python3_STDARCH} COMPONENT "python3" )
33+
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${Python3_STDARCH} COMPONENT "python3" )

0 commit comments

Comments
 (0)