[Buildroot] [PATCH v2 1/1] package/kodi: fix build with python-3.10

Bernd Kuhls bernd.kuhls at t-online.de
Sun Feb 13 11:47:21 UTC 2022


Fixes build error:

CMake Error at /usr/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
  Could NOT find PythonLibs (missing: PYTHON_LIBRARIES) (found suitable
  version "3.10.2", minimum required is "3.5")

Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
---
v2: fixed typo in PYTHON_EXECUTABLE configure option (usr/bin/ -> bin/)

 package/kodi/0002-cmake-findpython.patch      | 135 ++++++++++++++++++
 ...-cmake-search-for-python-interpreter.patch |  48 +++++++
 ...-allow-to-override-PYTHON_EXECUTABLE.patch |  39 +++++
 package/kodi/kodi.mk                          |   4 +
 4 files changed, 226 insertions(+)
 create mode 100644 package/kodi/0002-cmake-findpython.patch
 create mode 100644 package/kodi/0003-cmake-search-for-python-interpreter.patch
 create mode 100644 package/kodi/0004-cmake-allow-to-override-PYTHON_EXECUTABLE.patch

diff --git a/package/kodi/0002-cmake-findpython.patch b/package/kodi/0002-cmake-findpython.patch
new file mode 100644
index 0000000000..60728aa465
--- /dev/null
+++ b/package/kodi/0002-cmake-findpython.patch
@@ -0,0 +1,135 @@
+From 52f44ec5c7b728a6afaca867e8d815fced2012ec Mon Sep 17 00:00:00 2001
+From: fuzzard <fuzzard at kodi.tv>
+Date: Sat, 31 Jul 2021 19:22:08 +1000
+Subject: [PATCH] [cmake] findpython
+
+use cmakes (3.12+) FindPython3 module.
+Provide cmake vars for user to overide specific version, and search path
+
+Backport of https://github.com/xbmc/xbmc/pull/20045
+
+Patch sent upstream: https://github.com/xbmc/xbmc/pull/20989
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
+---
+ CMakeLists.txt                 |  4 +-
+ cmake/modules/FindPython.cmake | 71 ++++++++++++++++++++++++++--------
+ 2 files changed, 56 insertions(+), 19 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2d5369798d..9bed54ef40 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.4)
++cmake_minimum_required(VERSION 3.12)
+ if(WIN32)
+   # Version 3.15 is required to use "PREPEND" for dependencies
+   cmake_minimum_required(VERSION 3.15)
+@@ -187,8 +187,6 @@ core_require_dep(${required_deps})
+ find_package(TexturePacker REQUIRED)
+ find_package(JsonSchemaBuilder REQUIRED)
+ 
+-SET(PYTHON_VERSION 3.8)
+-
+ if(ENABLE_MARIADBCLIENT AND NOT ENABLE_MARIADBCLIENT STREQUAL AUTO AND ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO)
+   MESSAGE(FATAL_ERROR "You can not use MySql and MariaDB at the same time. Disable one by adding -DENABLE_MYSQLCLIENT=OFF or -DENABLE_MARIADBCLIENT=OFF.")
+ elseif(ENABLE_MYSQLCLIENT AND NOT ENABLE_MYSQLCLIENT STREQUAL AUTO)
+diff --git a/cmake/modules/FindPython.cmake b/cmake/modules/FindPython.cmake
+index c40e12d551..35220b5426 100644
+--- a/cmake/modules/FindPython.cmake
++++ b/cmake/modules/FindPython.cmake
+@@ -1,17 +1,56 @@
+-# - Try to find python
+-# Once done this will define
++# FindPython
++# --------
++# Finds Python3 libraries
++#
++# This module will search for the required python libraries on the system
++# If multiple versions are found, the highest version will be used.
++#
++# --------
++#
++# the following variables influence behaviour:
++#
++# PYTHON_PATH - use external python not found in system paths
++#               usage: -DPYTHON_PATH=/path/to/python/lib
++# PYTHON_VER - use exact python version, fail if not found
++#               usage: -DPYTHON_VER=3.8
++#
++# --------
++#
++# This module will define the following variables:
+ #
+ # PYTHON_FOUND - system has PYTHON
++# PYTHON_VERSION - Python version number (Major.Minor)
+ # PYTHON_INCLUDE_DIRS - the python include directory
+ # PYTHON_LIBRARIES - The python libraries
++# PYTHON_LDFLAGS - Python provided link options
++#
++# --------
++#
++
++# for Depends builds, set search root dir to depends path
++if(KODI_DEPENDSBUILD)
++  set(Python3_USE_STATIC_LIBS TRUE)
++  set(Python3_ROOT_DIR ${DEPENDS_PATH}/lib)
++endif()
++
++# Provide root dir to search for Python if provided
++if(PYTHON_PATH)
++  set(Python3_ROOT_DIR ${PYTHON_PATH})
++
++  # unset cache var so we can generate again with a different dir (or none) if desired
++  unset(PYTHON_PATH CACHE)
++endif()
++
++# Set specific version of Python to find if provided
++if(PYTHON_VER)
++  set(VERSION ${PYTHON_VER})
++  set(EXACT_VER "EXACT")
+ 
+-if(PKG_CONFIG_FOUND)
+-  pkg_check_modules(PC_PYTHON python3>=3.5 QUIET)
++  # unset cache var so we can generate again with a different ver (or none) if desired
++  unset(PYTHON_VER CACHE)
+ endif()
+ 
+-find_program(PYTHON_EXECUTABLE python3 ONLY_CMAKE_FIND_ROOT_PATH)
+-find_library(PYTHON_LIBRARY NAMES python3.9 python3.8 python3.7 python3.6 python3.5 PATHS ${PC_PYTHON_LIBDIR})
+-find_path(PYTHON_INCLUDE_DIR NAMES Python.h PATHS ${PC_PYTHON_INCLUDE_DIRS} PATH_SUFFIXES python3.9 python3.8 python3.7 python3.6 python3.5)
++find_package(Python3 ${VERSION} ${EXACT_VER} COMPONENTS Development)
+ 
+ if(KODI_DEPENDSBUILD)
+   find_library(FFI_LIBRARY ffi REQUIRED)
+@@ -27,17 +66,17 @@ if(KODI_DEPENDSBUILD)
+     endif()
+   endif()
+ 
+-  set(PYTHON_LIBRARIES ${PYTHON_LIBRARY} ${FFI_LIBRARY} ${EXPAT_LIBRARY} ${INTL_LIBRARY} ${GMP_LIBRARY} ${PYTHON_DEP_LIBRARIES})
+-else()
+-  find_package(PythonLibs 3.5 REQUIRED)
+-  list(APPEND PYTHON_LIBRARIES ${PC_PYTHON_STATIC_LIBRARIES})
++  list(APPEND Python3_LIBRARIES ${FFI_LIBRARY} ${EXPAT_LIBRARY} ${INTL_LIBRARY} ${GMP_LIBRARY} ${PYTHON_DEP_LIBRARIES})
+ endif()
+ 
+-include(FindPackageHandleStandardArgs)
+-find_package_handle_standard_args(Python REQUIRED_VARS PYTHON_INCLUDE_DIR PYTHON_LIBRARY PYTHON_LIBRARIES)
+-if(PYTHON_FOUND)
+-  set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR})
++if(Python3_FOUND)
+   list(APPEND PYTHON_DEFINITIONS -DHAS_PYTHON=1)
++  # These are all set for easy integration with the rest of our build system
++  set(PYTHON_FOUND ${Python3_FOUND})
++  set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
++  set(PYTHON_LIBRARIES ${Python3_LIBRARIES})
++  set(PYTHON_VERSION "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}" CACHE INTERNAL "" FORCE)
++  set(PYTHON_LDFLAGS ${Python3_LINK_OPTIONS})
+ endif()
+ 
+-mark_as_advanced(PYTHON_EXECUTABLE PYTHON_INCLUDE_DIRS PYTHON_INCLUDE_DIR PYTHON_LIBRARY PYTHON_LIBRARIES PYTHON_LDFLAGS FFI_LIBRARY EXPAT_LIBRARY INTL_LIBRARY GMP_LIBRARY)
++mark_as_advanced(PYTHON_EXECUTABLE PYTHON_VERSION PYTHON_INCLUDE_DIRS PYTHON_LDFLAGS FFI_LIBRARY EXPAT_LIBRARY INTL_LIBRARY GMP_LIBRARY)
+-- 
+2.30.2
+
diff --git a/package/kodi/0003-cmake-search-for-python-interpreter.patch b/package/kodi/0003-cmake-search-for-python-interpreter.patch
new file mode 100644
index 0000000000..158345a212
--- /dev/null
+++ b/package/kodi/0003-cmake-search-for-python-interpreter.patch
@@ -0,0 +1,48 @@
+From 6bb112e585f2ffd10e5af70ca28159dd235d063b Mon Sep 17 00:00:00 2001
+From: wsnipex <wsnipex at a1.net>
+Date: Thu, 19 Aug 2021 08:50:05 +0200
+Subject: [PATCH] [cmake] search for python interpreter fixes installing
+ eventclients on linux
+
+Backport of https://github.com/xbmc/xbmc/pull/20058
+
+Patch sent upstream: https://github.com/xbmc/xbmc/pull/20989
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
+---
+ cmake/modules/FindPython.cmake | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/cmake/modules/FindPython.cmake b/cmake/modules/FindPython.cmake
+index 35220b5426..c469ed9fb6 100644
+--- a/cmake/modules/FindPython.cmake
++++ b/cmake/modules/FindPython.cmake
+@@ -20,6 +20,7 @@
+ #
+ # PYTHON_FOUND - system has PYTHON
+ # PYTHON_VERSION - Python version number (Major.Minor)
++# PYTHON_EXECUTABLE - Python interpreter binary
+ # PYTHON_INCLUDE_DIRS - the python include directory
+ # PYTHON_LIBRARIES - The python libraries
+ # PYTHON_LDFLAGS - Python provided link options
+@@ -51,6 +52,9 @@ if(PYTHON_VER)
+ endif()
+ 
+ find_package(Python3 ${VERSION} ${EXACT_VER} COMPONENTS Development)
++if(CORE_SYSTEM_NAME STREQUAL linux)
++  find_package(Python3 ${VERSION} ${EXACT_VER} COMPONENTS Interpreter)
++endif()
+ 
+ if(KODI_DEPENDSBUILD)
+   find_library(FFI_LIBRARY ffi REQUIRED)
+@@ -73,6 +77,7 @@ if(Python3_FOUND)
+   list(APPEND PYTHON_DEFINITIONS -DHAS_PYTHON=1)
+   # These are all set for easy integration with the rest of our build system
+   set(PYTHON_FOUND ${Python3_FOUND})
++  set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE} CACHE FILEPATH "Python interpreter" FORCE)
+   set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
+   set(PYTHON_LIBRARIES ${Python3_LIBRARIES})
+   set(PYTHON_VERSION "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}" CACHE INTERNAL "" FORCE)
+-- 
+2.30.2
+
diff --git a/package/kodi/0004-cmake-allow-to-override-PYTHON_EXECUTABLE.patch b/package/kodi/0004-cmake-allow-to-override-PYTHON_EXECUTABLE.patch
new file mode 100644
index 0000000000..d1e9b3f25f
--- /dev/null
+++ b/package/kodi/0004-cmake-allow-to-override-PYTHON_EXECUTABLE.patch
@@ -0,0 +1,39 @@
+From 25681d8adde4a90d5da02051e30f6a3a27322136 Mon Sep 17 00:00:00 2001
+From: Jernej Skrabec <jernej.skrabec at gmail.com>
+Date: Sat, 25 Sep 2021 07:41:10 +0200
+Subject: [PATCH] [cmake] allow to override PYTHON_EXECUTABLE
+
+If Kodi is being build for distro which has different python version
+than host, PYTHON_EXECUTABLE must be overriden and point to distro
+version. Otherwise, eventclients will be installed in wrong location and
+be thus unusable.
+
+Use case: Cross compiling Kodi for LibreELEC
+
+Backport of https://github.com/xbmc/xbmc/pull/20171
+
+Patch sent upstream: https://github.com/xbmc/xbmc/pull/20989
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
+---
+ cmake/modules/FindPython.cmake | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/cmake/modules/FindPython.cmake b/cmake/modules/FindPython.cmake
+index c469ed9fb6..87b8368705 100644
+--- a/cmake/modules/FindPython.cmake
++++ b/cmake/modules/FindPython.cmake
+@@ -77,7 +77,9 @@ if(Python3_FOUND)
+   list(APPEND PYTHON_DEFINITIONS -DHAS_PYTHON=1)
+   # These are all set for easy integration with the rest of our build system
+   set(PYTHON_FOUND ${Python3_FOUND})
+-  set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE} CACHE FILEPATH "Python interpreter" FORCE)
++  if(NOT PYTHON_EXECUTABLE)
++    set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE} CACHE FILEPATH "Python interpreter" FORCE)
++  endif()
+   set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
+   set(PYTHON_LIBRARIES ${Python3_LIBRARIES})
+   set(PYTHON_VERSION "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}" CACHE INTERNAL "" FORCE)
+-- 
+2.30.2
+
diff --git a/package/kodi/kodi.mk b/package/kodi/kodi.mk
index 646c6e0ab4..56e901fa17 100644
--- a/package/kodi/kodi.mk
+++ b/package/kodi/kodi.mk
@@ -76,6 +76,10 @@ KODI_CONF_OPTS += \
 	-DNATIVEPREFIX=$(HOST_DIR) \
 	-DDEPENDS_PATH=$(STAGING_DIR)/usr \
 	-DENABLE_TESTING=OFF \
+	-DPYTHON_EXECUTABLE=$(HOST_DIR)/bin/python \
+	-DPYTHON_INCLUDE_DIRS=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \
+	-DPYTHON_PATH=$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) \
+	-DPYTHON_VER=$(PYTHON3_VERSION_MAJOR) \
 	-DWITH_JSONSCHEMABUILDER=$(HOST_DIR)/bin/JsonSchemaBuilder \
 	-DWITH_TEXTUREPACKER=$(HOST_DIR)/bin/TexturePacker \
 	-DLIBDVDCSS_URL=$(KODI_DL_DIR)/kodi-libdvdcss-$(KODI_LIBDVDCSS_VERSION).tar.gz \
-- 
2.30.2




More information about the buildroot mailing list