mongodb: fix build with python 3.12

The moduleconfig.py build script uses the 'imp' module which
is deprecated in favor of 'importlib' in python 3.12. This fixes
the build issue by replacing the affected portion of the code
and the package now builds fine on hosts with python 3.12.

Signed-off-by: Awais Belal <awais.belal@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
This commit is contained in:
Awais Belal
2025-03-07 14:32:54 +05:00
committed by Armin Kuster
parent 73e6789fdf
commit edd1a1e284
2 changed files with 58 additions and 2 deletions
@@ -0,0 +1,57 @@
From 37580777bc5294d606584f3731d9f5f5425bb587 Mon Sep 17 00:00:00 2001
From: Awais B <awais.b@rufilla.com>
Date: Tue, 4 Mar 2025 11:27:10 +0000
Subject: [PATCH] moduleconfig.py: python 3.12 compatibility
The imp module was deprecated in python 3.4 and is dropped
with python 3.12. We now need to use importlib for the
purpose of manipulating/loading modules.
Upstream-Status: Pending
Signed-off-by: Awais B <awais.b@rufilla.com>
---
buildscripts/moduleconfig.py | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/buildscripts/moduleconfig.py b/buildscripts/moduleconfig.py
index b4d0bba0490..69dd91ab30d 100644
--- a/buildscripts/moduleconfig.py
+++ b/buildscripts/moduleconfig.py
@@ -27,7 +27,8 @@ MongoDB SConscript files do.
__all__ = ('discover_modules', 'discover_module_directories', 'configure_modules',
'register_module_test') # pylint: disable=undefined-all-variable
-import imp
+import importlib
+import sys
import inspect
import os
@@ -71,12 +72,18 @@ def discover_modules(module_root, allowed_modules):
print("adding module: %s" % (name))
fp = open(build_py, "r")
try:
- module = imp.load_module("module_" + name, fp, build_py,
- (".py", "r", imp.PY_SOURCE))
- if getattr(module, "name", None) is None:
- module.name = name
- found_modules.append(module)
- found_module_names.append(name)
+ module_name = "module_" + name
+ module_spec = importlib.util.spec_from_file_location(module_name, build_py)
+
+ if module_spec is not None:
+ module = importlib.util.module_from_spec(module_spec)
+ sys.modules[module_name] = module
+ module_spec.loader.exec_module(module)
+
+ if not hasattr(module, "name"):
+ module.name = name
+ found_modules.append(module)
+ found_module_names.append(name)
finally:
fp.close()
except (FileNotFoundError, IOError):
--
2.34.1
@@ -36,6 +36,7 @@ SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.4;protocol=https \
file://0001-apply-msvc-workaround-for-clang-16.patch \
file://0001-Fix-type-mismatch-on-32bit-arches.patch \
file://0001-Fix-build-on-32bit.patch \
file://0001-moduleconfig.py-python-3.12-compatibility.patch \
"
SRC_URI:append:libc-musl ="\
file://0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch \
@@ -145,5 +146,3 @@ SYSTEMD_SERVICE:${PN} = "mongod.service"
FILES:${PN} += "${nonarch_libdir}/tmpfiles.d"
RDEPENDS:${PN} += "tzdata-core"
SKIP_RECIPE[mongodb] ?= "Needs porting to python 3.12"