Skip to content

TST: enable --fatal-meson-warnings for all tests #768

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion mesonpy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,8 @@ def __init__(
cpp = ['c++', '-arch', {arch!r}]
objc = ['cc', '-arch', {arch!r}]
objcpp = ['c++', '-arch', {arch!r}]
strip = ['strip', '-arch', {arch!r}]

[host_machine]
system = 'darwin'
cpu = {arch!r}
Expand All @@ -731,11 +733,12 @@ def __init__(

cross_file_data = textwrap.dedent(f'''
[binaries]
ar = '{arch}-apple-{subsystem}-ar'
c = '{arch}-apple-{subsystem}-clang'
cpp = '{arch}-apple-{subsystem}-clang++'
objc = '{arch}-apple-{subsystem}-clang'
objcpp = '{arch}-apple-{subsystem}-clang++'
ar = '{arch}-apple-{subsystem}-ar'
strip = ['strip', '-arch', {arch!r}]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@freakboy3742 Can you please verify that this is correct? I have no experience with building for iOS. Thanks!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will be a valid invocation for strip; but I've never needed to call strip on any iOS program, so I'm not sure where I'd be looking to verify this works. Have you got an example in mind that would be using this?

Copy link
Member Author

@dnicolodi dnicolodi Jun 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Maybe calling strip in this way and checking that the resulting binary is still working would be a way to verify that this does something that at least is not harmful. The reason I'm adding this is that, without it, meson emits a warning https://github.com/mesonbuild/meson-python/actions/runs/15653996265/job/44102572727#step:10:1105

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood - I'll investigate and report back shortly (likely tomorrow my time, at this point)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the correct way to get to the strip utility is to run something like xcrun --sdk iphoneos -f strip. The system strip may not work for iOS binaries.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does not really matter if it is not available even if we say its should be in the cross file, as long as no one is using it 🙂 Adding it to the support package build would be my preferred solution, unless you see an issue with this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Cross file does not specify strip binary, result will not be stripped.

As noted by the warning, the consequences of it not being available are not earth-shattering.

Quite likely, an appstore upload will do server-side stripping anyway.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eli-schwartz Yeah, I know. The main reason for adding a definition of strip in the generated cross files is to shut up the warning. It does not look nice if the generated configuration file results in a warning. The user does not have any way to suppress the warning other than providing an additional cross file that defines a strip binary. It is much cleaner if we can add a strip definition ourselves, even better would be to add one that works

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@freakboy3742 Where is the CPython support package for iOS developed?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dnicolodi I maintain it as part of BeeWare in https://github.com/beeware/Python-Apple-support. I'm about to start getting the mechanics of that PR upstream into CPython core so that an iOS artefact will be part of official CPython releases.


[host_machine]
system = 'ios'
Expand Down
15 changes: 15 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,18 @@ def cleanenv():
# $MACOSX_DEPLOYMENT_TARGET affects the computation of the platform tag on macOS.
yield mpatch.delenv('MACOSX_DEPLOYMENT_TARGET', raising=False)
mpatch.undo()


@pytest.fixture(autouse=True, scope='session')
def meson_fatal_warnings():
# Cannot use the 'monkeypatch' fixture because of scope mismatch.
mpatch = pytest.MonkeyPatch()
mesonpy_project_init = mesonpy.Project.__init__

def __init__(self, source_dir, build_dir, meson_args=None, editable_verbose=False):
if meson_args is None:
meson_args = {}
meson_args['setup'] = meson_args.get('setup', []) + ['--fatal-meson-warnings']
mesonpy_project_init(self, source_dir, build_dir, meson_args, editable_verbose)

mpatch.setattr(mesonpy.Project, '__init__', __init__)
2 changes: 1 addition & 1 deletion tests/packages/limited-api/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# SPDX-License-Identifier: MIT

project('limited-api', 'c', version: '1.0.0')
project('limited-api', 'c', version: '1.0.0', meson_version: '>= 1.3')

py = import('python').find_installation(pure: false)

Expand Down
2 changes: 1 addition & 1 deletion tests/test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@
project = mesonpy.Project(source_dir=package_simple, build_dir=tmp_path)

# Meson configuration points at the cross file
assert project._meson_args['setup'] == ['--cross-file', os.fspath(tmp_path / 'meson-python-cross-file.ini')]
assert project._meson_args['setup'][-2:] == ['--cross-file', os.fspath(tmp_path / 'meson-python-cross-file.ini')]

Check warning on line 403 in tests/test_project.py

View check run for this annotation

Codecov / codecov/patch

tests/test_project.py#L403

Added line #L403 was not covered by tests

# Meson config files exist, and have some relevant keys
assert (tmp_path / 'meson-python-native-file.ini').exists()
Expand Down
Loading