Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-meson-python for
openSUSE:Factory checked in at 2026-06-15 19:40:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-meson-python (Old)
and /work/SRC/openSUSE:Factory/.python-meson-python.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-meson-python"
Mon Jun 15 19:40:25 2026 rev:17 rq:1359289 version:0.20.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-meson-python/python-meson-python.changes
2026-03-17 19:04:26.896549196 +0100
+++
/work/SRC/openSUSE:Factory/.python-meson-python.new.1981/python-meson-python.changes
2026-06-15 19:42:03.031910946 +0200
@@ -1,0 +2,6 @@
+Sun Jun 14 18:18:46 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.20.0:
+ * Add support for targeting the Android platform.
+
+-------------------------------------------------------------------
Old:
----
meson_python-0.19.0.tar.gz
New:
----
meson_python-0.20.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-meson-python.spec ++++++
--- /var/tmp/diff_new_pack.9PdpGp/_old 2026-06-15 19:42:03.607935084 +0200
+++ /var/tmp/diff_new_pack.9PdpGp/_new 2026-06-15 19:42:03.611935251 +0200
@@ -19,7 +19,7 @@
%{?sle15_python_module_pythons}
Name: python-meson-python
-Version: 0.19.0
+Version: 0.20.0
Release: 0
Summary: Meson Python build backend (PEP 517)
License: MIT
++++++ meson_python-0.19.0.tar.gz -> meson_python-0.20.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/CHANGELOG.rst
new/meson_python-0.20.0/CHANGELOG.rst
--- old/meson_python-0.19.0/CHANGELOG.rst 2026-01-15 14:35:27.000000000
+0100
+++ new/meson_python-0.20.0/CHANGELOG.rst 2026-06-10 21:15:07.000000000
+0200
@@ -11,6 +11,14 @@
Changelog
+++++++++
+0.20.0
+======
+
+- Add support for targeting the Android platform.
+
+Daniele Nicolodi, Malcolm Smith, Ralf Gommers --- 10-06-2026.
+
+
0.19.0
======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/PKG-INFO
new/meson_python-0.20.0/PKG-INFO
--- old/meson_python-0.19.0/PKG-INFO 2026-01-15 14:35:27.000000000 +0100
+++ new/meson_python-0.20.0/PKG-INFO 2026-06-10 21:15:07.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: meson-python
-Version: 0.19.0
+Version: 0.20.0
Summary: Meson Python build backend (PEP 517)
Keywords: meson,build,backend,pep517,package
Maintainer-Email: Ralf Gommers <[email protected]>, Daniele Nicolodi
<[email protected]>, Henry Schreiner <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/docs/changelog.rst
new/meson_python-0.20.0/docs/changelog.rst
--- old/meson_python-0.19.0/docs/changelog.rst 2026-01-15 14:35:27.000000000
+0100
+++ new/meson_python-0.20.0/docs/changelog.rst 2026-06-10 21:15:07.000000000
+0200
@@ -11,6 +11,14 @@
Changelog
+++++++++
+0.20.0
+======
+
+- Add support for targeting the Android platform.
+
+Daniele Nicolodi, Malcolm Smith, Ralf Gommers --- 10-06-2026.
+
+
0.19.0
======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/mesonpy/__init__.py
new/meson_python-0.20.0/mesonpy/__init__.py
--- old/meson_python-0.19.0/mesonpy/__init__.py 2026-01-15 14:35:27.000000000
+0100
+++ new/meson_python-0.20.0/mesonpy/__init__.py 2026-06-10 21:15:07.000000000
+0200
@@ -15,6 +15,7 @@
import collections
import contextlib
import copy
+import dataclasses
import difflib
import fnmatch
import functools
@@ -83,7 +84,7 @@
MesonArgs = Mapping[MesonArgsKeys, List[str]]
-__version__ = '0.19.0'
+__version__ = '0.20.0'
_PYPROJECT_METADATA_VERSION = tuple(map(int,
pyproject_metadata.__version__.split('.')[:2]))
@@ -120,13 +121,17 @@
return typing.cast('Callable[[str], bool]', func)
+class _Entry(typing.NamedTuple):
+ dst: pathlib.Path
+ src: str
+
+
def _map_to_wheel(
sources: Dict[str, Dict[str, Any]],
- exclude: List[str],
- include: List[str],
-) -> DefaultDict[str, List[Tuple[pathlib.Path, str]]]:
+ exclude: List[str], include: List[str]
+) -> DefaultDict[str, List[_Entry]]:
"""Map files to the wheel, organized by wheel installation directory."""
- wheel_files: DefaultDict[str, List[Tuple[pathlib.Path, str]]] =
collections.defaultdict(list)
+ wheel_files: DefaultDict[str, List[_Entry]] = collections.defaultdict(list)
packages: Dict[str, str] = {}
excluded = _compile_patterns(exclude)
included = _compile_patterns(include)
@@ -151,7 +156,8 @@
other = packages.setdefault(package, path)
if other != path:
this = os.fspath(pathlib.Path(path,
*destination.parts[1:]))
- that = os.fspath(other / next(d for d, s in
wheel_files[other] if d.parts[0] == destination.parts[1]))
+ module = next(entry.dst for entry in wheel_files[other] if
entry.dst.parts[0] == destination.parts[1])
+ that = os.fspath(other / module)
raise BuildError(
f'The {package} package is split between {path} and
{other}: '
f'{this!r} and {that!r}, a "pure: false" argument may
be missing in meson.build. '
@@ -174,9 +180,9 @@
if relpath in exclude_files:
continue
filedst = dst / relpath
- wheel_files[path].append((filedst, filesrc))
+ wheel_files[path].append(_Entry(filedst, filesrc))
else:
- wheel_files[path].append((dst, src))
+ wheel_files[path].append(_Entry(dst, src))
return wheel_files
@@ -323,20 +329,14 @@
return f.read(4) == b'\x7fELF' # ELF
[email protected]
class _WheelBuilder():
"""Helper class to build wheels from projects."""
- def __init__(
- self,
- metadata: Metadata,
- manifest: Dict[str, List[Tuple[pathlib.Path, str]]],
- limited_api: bool,
- allow_windows_shared_libs: bool,
- ) -> None:
- self._metadata = metadata
- self._manifest = manifest
- self._limited_api = limited_api
- self._allow_windows_shared_libs = allow_windows_shared_libs
+ _metadata: Metadata
+ _manifest: Dict[str, List[_Entry]]
+ _limited_api: bool
+ _allow_windows_shared_libs: bool
@property
def _has_internal_libs(self) -> bool:
@@ -352,8 +352,8 @@
"""Whether the wheel is architecture independent"""
if self._manifest['platlib'] or self._manifest['mesonpy-libs']:
return False
- for _, file in self._manifest['scripts']:
- if _is_native(file):
+ for entry in self._manifest['scripts']:
+ if _is_native(entry.src):
return False
return True
@@ -430,14 +430,14 @@
# in {platlib} that look like extension modules, and raise
# an exception if any of them has a Python version
# specific extension filename suffix ABI tag.
- for path, _ in self._manifest['platlib']:
- match = _EXTENSION_SUFFIX_REGEX.match(path.name)
+ for entry in self._manifest['platlib']:
+ match = _EXTENSION_SUFFIX_REGEX.match(entry.dst.name)
if match:
abi = match.group('abi')
if abi is not None and abi != 'abi3':
raise BuildError(
f'The package declares compatibility with Python
limited API but extension '
- f'module {os.fspath(path)!r} is tagged for a
specific Python version.')
+ f'module {os.fspath(entry.dst)!r} is tagged for a
specific Python version.')
return 'abi3'
return None
@@ -519,8 +519,8 @@
def _top_level_modules(self) -> Collection[str]:
modules = set()
for type_ in self._manifest:
- for path, _ in self._manifest[type_]:
- name, dot, ext = path.parts[0].partition('.')
+ for entry in self._manifest[type_]:
+ name, dot, ext = entry.dst.parts[0].partition('.')
if dot:
# module
suffix = dot + ext
@@ -744,6 +744,38 @@
self._meson_cross_file.write_text(cross_file_data,
encoding='utf-8')
self._meson_args['setup'].extend(('--cross-file',
os.fspath(self._meson_cross_file)))
+ # Simplify cross-compilation for Android with cibuildwheel: detect the
+ # cross-compilation environment set up by cibuildwheel and synthesize
an
+ # appropriate cross file.
+ elif sysconfig.get_platform().startswith('android-') and
'CIBUILDWHEEL' in os.environ:
+ cpu = platform.machine()
+ cpu_family = 'x86' if cpu == 'i686' else 'arm' if
cpu.startswith('arm') else cpu
+
+ # cibuildwheel uses environment variables to point to the cross
+ # compilation toolchain binaries thus the [binaries] section of
+ # the cross file is not needed.
+ cross_file_data = textwrap.dedent(f'''
+ [host_machine]
+ system = 'android'
+ subsystem = 'android'
+ kernel = 'linux'
+ cpu_family = {cpu_family!r}
+ cpu = {cpu!r}
+ endian = {sys.byteorder!r}
+
+ [properties]
+ # To obtain the correct wheel tags when cross-compiling
+ # cibuildwheel monkey-patches platform.system() and
+ # platform.machine() to simulate running on Android.
+ # This makes Meson believe that host and build machines
+ # match, and thus that host binaries can be run on the
+ # build machine when this is not actually the case.
+ # Override the auto-detection.
+ needs_exe_wrapper = true
+ ''')
+ self._meson_cross_file.write_text(cross_file_data,
encoding='utf-8')
+ self._meson_args['setup'].extend(('--cross-file',
os.fspath(self._meson_cross_file)))
+
# Support iOS targets. iOS does not have native build tools and always
# requires cross compilation: synthesize the appropriate cross file.
elif sysconfig.get_platform().startswith('ios-'):
@@ -912,7 +944,7 @@
return json.loads(info.read_text(encoding='utf-8'))
@property
- def _manifest(self) -> DefaultDict[str, List[Tuple[pathlib.Path, str]]]:
+ def _manifest(self) -> DefaultDict[str, List[_Entry]]:
"""The files to be added to the wheel, organized by wheel path."""
# Obtain the list of files Meson would install.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/pyproject.toml
new/meson_python-0.20.0/pyproject.toml
--- old/meson_python-0.19.0/pyproject.toml 2026-01-15 14:35:27.000000000
+0100
+++ new/meson_python-0.20.0/pyproject.toml 2026-06-10 21:15:07.000000000
+0200
@@ -16,7 +16,7 @@
[project]
name = 'meson-python'
-version = '0.19.0'
+version = '0.20.0'
description = 'Meson Python build backend (PEP 517)'
readme = 'README.rst'
requires-python = '>= 3.9'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/tests/test_project.py
new/meson_python-0.20.0/tests/test_project.py
--- old/meson_python-0.19.0/tests/test_project.py 2026-01-15
14:35:27.000000000 +0100
+++ new/meson_python-0.20.0/tests/test_project.py 2026-06-10
21:15:07.000000000 +0200
@@ -378,6 +378,53 @@
os.environ.pop('_PYTHON_HOST_PLATFORM', None)
[email protected](
+ ('cpu', 'cpu_family'),
+ [
+ ('aarch64', 'aarch64'),
+ ('armv7l', 'arm'),
+ ('armv8l', 'arm'),
+ ('i686', 'x86'),
+ ('x86_64', 'x86_64'),
+ ],
+)
[email protected]('cross', [True, False])
+def test_android_project(package_simple, monkeypatch, tmp_path, cpu,
cpu_family, cross):
+ # Mock being on Android
+ monkeypatch.setattr(sys, 'platform', 'android')
+ monkeypatch.setattr(sys, 'byteorder', 'little')
+ monkeypatch.setattr(platform, 'system', Mock(return_value='Android'))
+ monkeypatch.setattr(platform, 'machine', Mock(return_value=cpu))
+ monkeypatch.setattr(sysconfig, 'get_platform',
Mock(return_value='android-24'))
+ if cross:
+ monkeypatch.setenv('CIBUILDWHEEL', '1')
+
+ # Meson may require some tools to be configured when fatal warnings
are enabled.
+ # Set the same set of variables as cibuildwheel.
+ for name in ['ar', 'as', 'cc', 'cxx', 'ld', 'nm', 'ranlib', 'readelf',
'strip']:
+ monkeypatch.setenv(name.upper(), f'/path/to/{name}')
+
+ # Create a project.
+ project = mesonpy.Project(source_dir=package_simple, build_dir=tmp_path)
+
+ # When cross-compiling, a cross file should be generated and used.
+ setup_args = project._meson_args['setup']
+ cross_path = tmp_path / 'meson-python-cross-file.ini'
+ if cross:
+ assert setup_args[-2:] == ['--cross-file', str(cross_path)]
+ cross_config = cross_path.read_text().splitlines()
+ assert "system = 'android'" in cross_config
+ assert "subsystem = 'android'" in cross_config
+ assert "kernel = 'linux'" in cross_config
+ assert f"cpu_family = '{cpu_family}'" in cross_config
+ assert f"cpu = '{cpu}'" in cross_config
+ assert "endian = 'little'" in cross_config
+ assert 'needs_exe_wrapper = true' in cross_config
+ else:
+ assert '--cross-file' not in setup_args
+ assert not cross_path.exists()
+
+
@pytest.mark.skipif(sys.version_info < (3, 13), reason='requires Python 3.13
or higher')
@pytest.mark.parametrize('multiarch', [
'arm64-iphoneos',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/meson_python-0.19.0/tests/test_tags.py
new/meson_python-0.20.0/tests/test_tags.py
--- old/meson_python-0.19.0/tests/test_tags.py 2026-01-15 14:35:27.000000000
+0100
+++ new/meson_python-0.20.0/tests/test_tags.py 2026-06-10 21:15:07.000000000
+0200
@@ -101,7 +101,8 @@
def wheel_builder_test_factory(content, pure=True, limited_api=False):
manifest = defaultdict(list)
- manifest.update({key: [(pathlib.Path(x), os.path.join('build', x)) for x
in value] for key, value in content.items()})
+ for key, value in content.items():
+ manifest[key] = [mesonpy._Entry(pathlib.Path(x), os.path.join('build',
x)) for x in value]
return mesonpy._WheelBuilder(None, manifest, limited_api, False)