meson-python icon indicating copy to clipboard operation
meson-python copied to clipboard

Regressions against `pyproject-metadata==0.9.0b1` (prerelease)

Open mgorny opened this issue 1 year ago • 4 comments

As a heads up, pyproject-metadata==0.9.0b1 was released and it causes a few test regressions:

ERROR tests/test_sdist.py::test_pep621 - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
ERROR tests/test_wheel.py::test_contents_license_file - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
ERROR tests/test_wheel.py::test_entrypoints - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
FAILED tests/test_sdist.py::test_no_pep621 - AssertionError: assert 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n'
  
    Metadata-Version: 2.1
    Name: library
    Version: 1.0.0
  +
FAILED tests/test_sdist.py::test_dynamic_version - AssertionError: assert 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n'
  
    Metadata-Version: 2.1
    Name: dynamic-version
    Version: 1.0.0
  +
Full output
$ pytest --vl
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --vl
  inifile: /tmp/meson-python/pyproject.toml
  rootdir: /tmp/meson-python

(test-3-11) mgorny@pomiot /tmp/meson-python $ pytest -vvl
========================================================= test session starts =========================================================
platform linux -- Python 3.11.10, pytest-8.3.3, pluggy-1.5.0 -- /tmp/meson-python/.nox/test-3-11/bin/python
cachedir: .pytest_cache
rootdir: /tmp/meson-python
configfile: pyproject.toml
testpaths: tests
plugins: mock-3.14.0, cov-5.0.0
collected 123 items                                                                                                                   

tests/test_consistency.py::test_pyproject_dependencies PASSED                                                                   [  0%]
tests/test_editable.py::test_walk PASSED                                                                                        [  1%]
tests/test_editable.py::test_nodes_tree PASSED                                                                                  [  2%]
tests/test_editable.py::test_collect PASSED                                                                                     [  3%]
tests/test_editable.py::test_mesonpy_meta_finder PASSED                                                                         [  4%]
tests/test_editable.py::test_mesonpy_traversable PASSED                                                                         [  4%]
tests/test_editable.py::test_resources PASSED                                                                                   [  5%]
tests/test_editable.py::test_importlib_resources PASSED                                                                         [  6%]
tests/test_editable.py::test_editable_install PASSED                                                                            [  7%]
tests/test_editable.py::test_editble_reentrant PASSED                                                                           [  8%]
tests/test_editable.py::test_editable_pkgutils_walk_packages PASSED                                                             [  8%]
tests/test_editable.py::test_custom_target_install_dir PASSED                                                                   [  9%]
tests/test_editable.py::test_editable_rebuild[-] PASSED                                                                         [ 10%]
tests/test_editable.py::test_editable_rebuild[-verbose] PASSED                                                                  [ 11%]
tests/test_editable.py::test_editable_rebuild[-Ccompile-args=-j1-] PASSED                                                       [ 12%]
tests/test_editable.py::test_editable_rebuild[-Ccompile-args=-j1-verbose] PASSED                                                [ 13%]
tests/test_editable.py::test_editable_verbose PASSED                                                                            [ 13%]
tests/test_editable.py::test_editable_rebuild_error[] PASSED                                                                    [ 14%]
tests/test_editable.py::test_editable_rebuild_error[verbose] PASSED                                                             [ 15%]
tests/test_examples.py::test_spam PASSED                                                                                        [ 16%]
tests/test_metadata.py::test_package_name PASSED                                                                                [ 17%]
tests/test_metadata.py::test_package_name_from_pyproject PASSED                                                                 [ 17%]
tests/test_metadata.py::test_package_name_invalid PASSED                                                                        [ 18%]
tests/test_metadata.py::test_unsupported_dynamic PASSED                                                                         [ 19%]
tests/test_metadata.py::test_missing_version PASSED                                                                             [ 20%]
tests/test_options.py::test_ndebug[] PASSED                                                                                     [ 21%]
tests/test_options.py::test_ndebug[-Dbuildtype=release] PASSED                                                                  [ 21%]
tests/test_options.py::test_ndebug[-Dbuildtype=debug] PASSED                                                                    [ 22%]
tests/test_output.py::test_use_ansi_escapes[False-env0-False] PASSED                                                            [ 23%]
tests/test_output.py::test_use_ansi_escapes[True-env1-True] PASSED                                                              [ 24%]
tests/test_output.py::test_use_ansi_escapes[False-env2-False] PASSED                                                            [ 25%]
tests/test_output.py::test_use_ansi_escapes[True-env3-False] PASSED                                                             [ 26%]
tests/test_output.py::test_use_ansi_escapes[False-env4-True] PASSED                                                             [ 26%]
tests/test_output.py::test_use_ansi_escapes[True-env5-True] PASSED                                                              [ 27%]
tests/test_output.py::test_use_ansi_escapes[True-env6-False] PASSED                                                             [ 28%]
tests/test_output.py::test_use_ansi_escapes[True-env7-True] PASSED                                                              [ 29%]
tests/test_output.py::test_use_ansi_escapes[True-env8-False] PASSED                                                             [ 30%]
tests/test_pep517.py::test_get_requires_for_build_wheel[noninja-patchelf] PASSED                                                [ 30%]
tests/test_pep517.py::test_get_requires_for_build_wheel[noninja-nopatchelf] PASSED                                              [ 31%]
tests/test_pep517.py::test_get_requires_for_build_wheel[oldninja-patchelf] PASSED                                               [ 32%]
tests/test_pep517.py::test_get_requires_for_build_wheel[oldninja-nopatchelf] PASSED                                             [ 33%]
tests/test_pep517.py::test_get_requires_for_build_wheel[newninja-patchelf] PASSED                                               [ 34%]
tests/test_pep517.py::test_get_requires_for_build_wheel[newninja-nopatchelf] PASSED                                             [ 34%]
tests/test_pep517.py::test_invalid_config_settings PASSED                                                                       [ 35%]
tests/test_pep517.py::test_invalid_config_settings_suggest PASSED                                                               [ 36%]
tests/test_pep517.py::test_validate_config_settings_invalid PASSED                                                              [ 37%]
tests/test_pep517.py::test_validate_config_settings_repeated PASSED                                                             [ 38%]
tests/test_pep517.py::test_validate_config_settings_str PASSED                                                                  [ 39%]
tests/test_pep517.py::test_validate_config_settings_list PASSED                                                                 [ 39%]
tests/test_pep517.py::test_validate_config_settings_tuple PASSED                                                                [ 40%]
tests/test_pep517.py::test_get_meson_command[None] PASSED                                                                       [ 41%]
tests/test_pep517.py::test_get_meson_command[meson] PASSED                                                                      [ 42%]
tests/test_pep517.py::test_get_meson_command_bad_path PASSED                                                                    [ 43%]
tests/test_pep517.py::test_get_meson_command_bad_python_path PASSED                                                             [ 43%]
tests/test_pep517.py::test_get_meson_command_wrong_version PASSED                                                               [ 44%]
tests/test_pep517.py::test_get_meson_command_error PASSED                                                                       [ 45%]
tests/test_project.py::test_unsupported_python_version PASSED                                                                   [ 46%]
tests/test_project.py::test_missing_meson_version PASSED                                                                        [ 47%]
tests/test_project.py::test_missing_dynamic_version PASSED                                                                      [ 47%]
tests/test_project.py::test_user_args PASSED                                                                                    [ 48%]
tests/test_project.py::test_unknown_user_args[top-level] PASSED                                                                 [ 49%]
tests/test_project.py::test_unknown_user_args[meson-args] PASSED                                                                [ 50%]
tests/test_project.py::test_install_tags PASSED                                                                                 [ 51%]
tests/test_project.py::test_validate_pyproject_config_one PASSED                                                                [ 52%]
tests/test_project.py::test_validate_pyproject_config_all PASSED                                                                [ 52%]
tests/test_project.py::test_validate_pyproject_config_unknown PASSED                                                            [ 53%]
tests/test_project.py::test_validate_pyproject_config_empty PASSED                                                              [ 54%]
tests/test_project.py::test_invalid_build_dir PASSED                                                                            [ 55%]
tests/test_project.py::test_compiler SKIPPED (Requires MSVC)                                                                    [ 56%]
tests/test_project.py::test_archflags_envvar_parsing[-arch x86_64] SKIPPED (macOS specific test)                                [ 56%]
tests/test_project.py::test_archflags_envvar_parsing[-arch arm64] SKIPPED (macOS specific test)                                 [ 57%]
tests/test_project.py::test_archflags_envvar_parsing[-arch arm64 -arch arm64] SKIPPED (macOS specific test)                     [ 58%]
tests/test_project.py::test_archflags_envvar_parsing_invalid[-arch arm64 -arch x86_64] SKIPPED (macOS specific test)            [ 59%]
tests/test_project.py::test_archflags_envvar_parsing_invalid[-arch arm64 -DFOO=1] SKIPPED (macOS specific test)                 [ 60%]
tests/test_sdist.py::test_no_pep621 FAILED                                                                                      [ 60%]
tests/test_sdist.py::test_pep621 ERROR                                                                                          [ 61%]
tests/test_sdist.py::test_dynamic_version FAILED                                                                                [ 62%]
tests/test_sdist.py::test_contents PASSED                                                                                       [ 63%]
tests/test_sdist.py::test_contents_subdirs PASSED                                                                               [ 64%]
tests/test_sdist.py::test_contents_unstaged PASSED                                                                              [ 65%]
tests/test_sdist.py::test_executable_bit PASSED                                                                                 [ 65%]
tests/test_sdist.py::test_generated_files PASSED                                                                                [ 66%]
tests/test_sdist.py::test_long_path PASSED                                                                                      [ 67%]
tests/test_sdist.py::test_reproducible PASSED                                                                                   [ 68%]
tests/test_tags.py::test_wheel_tag PASSED                                                                                       [ 69%]
tests/test_tags.py::test_macos_platform_tag SKIPPED (macOS specific test)                                                       [ 69%]
tests/test_tags.py::test_macos_platform_tag_arm64 SKIPPED (macOS specific test)                                                 [ 70%]
tests/test_tags.py::test_python_host_platform SKIPPED (macOS specific test)                                                     [ 71%]
tests/test_tags.py::test_tag_empty_wheel PASSED                                                                                 [ 72%]
tests/test_tags.py::test_tag_purelib_wheel PASSED                                                                               [ 73%]
tests/test_tags.py::test_tag_platlib_wheel PASSED                                                                               [ 73%]
tests/test_tags.py::test_tag_stable_abi PASSED                                                                                  [ 74%]
tests/test_tags.py::test_tag_mixed_abi PASSED                                                                                   [ 75%]
tests/test_wheel.py::test_scipy_like PASSED                                                                                     [ 76%]
tests/test_wheel.py::test_purelib_and_platlib PASSED                                                                            [ 77%]
tests/test_wheel.py::test_pure PASSED                                                                                           [ 78%]
tests/test_wheel.py::test_configure_data PASSED                                                                                 [ 78%]
tests/test_wheel.py::test_contents_license_file ERROR                                                                           [ 79%]
tests/test_wheel.py::test_contents PASSED                                                                                       [ 80%]
tests/test_wheel.py::test_local_lib PASSED                                                                                      [ 81%]
tests/test_wheel.py::test_rpath PASSED                                                                                          [ 82%]
tests/test_wheel.py::test_uneeded_rpath PASSED                                                                                  [ 82%]
tests/test_wheel.py::test_executable_bit PASSED                                                                                 [ 83%]
tests/test_wheel.py::test_detect_wheel_tag_module PASSED                                                                        [ 84%]
tests/test_wheel.py::test_detect_wheel_tag_script PASSED                                                                        [ 85%]
tests/test_wheel.py::test_entrypoints ERROR                                                                                     [ 86%]
tests/test_wheel.py::test_top_level_modules PASSED                                                                              [ 86%]
tests/test_wheel.py::test_purelib_platlib_split PASSED                                                                          [ 87%]
tests/test_wheel.py::test_archflags_envvar[x86_64] SKIPPED (macOS specific test)                                                [ 88%]
tests/test_wheel.py::test_archflags_envvar[arm64] SKIPPED (macOS specific test)                                                 [ 89%]
tests/test_wheel.py::test_subprojects PASSED                                                                                    [ 90%]
tests/test_wheel.py::test_skip_subprojects[--skip-subprojects] PASSED                                                           [ 91%]
tests/test_wheel.py::test_skip_subprojects[--skip-subprojects=dep] PASSED                                                       [ 91%]
tests/test_wheel.py::test_limited_api PASSED                                                                                    [ 92%]
tests/test_wheel.py::test_limited_api_bad PASSED                                                                                [ 93%]
tests/test_wheel.py::test_limited_api_disabled PASSED                                                                           [ 94%]
tests/test_wheel.py::test_install_subdir PASSED                                                                                 [ 95%]
tests/test_wheel.py::test_vendored_meson PASSED                                                                                 [ 95%]
tests/test_wheel.py::test_encoding PASSED                                                                                       [ 96%]
tests/test_wheel.py::test_custom_target_install_dir PASSED                                                                      [ 97%]
tests/test_wheelfile.py::test_basic PASSED                                                                                      [ 98%]
tests/test_wheelfile.py::test_source_date_epoch PASSED                                                                          [ 99%]
tests/test_wheelfile.py::test_compression PASSED                                                                                [100%]

=============================================================== ERRORS ================================================================
____________________________________________________ ERROR at setup of test_pep621 ____________________________________________________

tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

    @pytest.fixture(scope='session')
    def fixture(tmp_path_session):
        with chdir(package_dir / package), in_git_repo_context():
>           return tmp_path_session / mesonpy.build_sdist(tmp_path_session)

package    = 'full-metadata'
tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

tests/conftest.py:131: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
mesonpy/__init__.py:1047: in wrapper
    return func(*args, **kwargs)
        args       = (PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia'),)
        func       = <function build_sdist at 0x7f1ed85e8fe0>
        kwargs     = {}
mesonpy/__init__.py:1089: in build_sdist
    return project.sdist(out).name
        config_settings = None
        out        = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        project    = <mesonpy.Project object at 0x7f1ed5c92550>
        sdist_directory = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
mesonpy/__init__.py:934: in sdist
    metadata = bytes(self._metadata.as_rfc822())
        directory  = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        dist_name  = 'full_metadata-1.2.3'
        file       = <ExFileObject name='/tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31/meson-dist/full-metadata-1.0.0.tar.gz'>
        member     = <TarInfo 'full_metadata-1.2.3/PKG-INFO' at 0x7f1ed5cdc700>
        meson_dist = <tarfile.TarFile object at 0x7f1ed5cb3dd0>
        meson_dist_name = 'full-metadata-1.0.0'
        meson_dist_path = PosixPath('/tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31/meson-dist/full-metadata-1.0.0.tar.gz')
        pyproject_toml_mtime = 1726233738.0
        sdist      = <tarfile.TarFile object at 0x7f1ed5c97490>
        sdist_path = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/full_metadata-1.2.3.tar.gz')
        self       = <mesonpy.Project object at 0x7f1ed5c92550>
        stem       = 'pyproject.toml'
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:623: in as_rfc822
    self.write_to_rfc822(message)
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5c974d0>
        self       = Metadata(name='full-metadata',
         version=<Version('1.2.3')>,
         description='Some package with all of the PEP 621 metadata',
         license=License(text='some license\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/LICENSE')),
         license_files=None,
         readme=Readme(text='<!--\nSPDX-FileCopyrightText: 2021 The meson-python developers\n\nSPDX-License-Identifier: MIT\n-->\n\n# full-metadata\n\nAn example package with all of the PEP 621 metadata!\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/README.md'), content_type='text/markdown'),
         requires_python=<SpecifierSet('>=3.7', prereleases=True)>,
         dependencies=[<Requirement('a')>,
                       <Requirement('b>1')>,
                       <Requirement('c>2; os_name != "nt"')>],
         optional_dependencies={'test': [<Requirement('d<3')>,
                                         <Requirement('e[all]')>]},
         entrypoints={'something.custom': {'example': 'example:custom'}},
         authors=[('Unknown', '[email protected]'), ('Jane Doe', None)],
         maintainers=[('Jane Doe', '[email protected]')],
         urls={'changelog': 'https://github.com/mesonbuild/meson-python/blob/master/CHANGELOG.rst',
               'documentation': 'https://readthedocs.org',
               'homepage': 'https://example.com',
               'repository': 'https://github.com/mesonbuild/meson-python'},
         classifiers=['Development Status :: 4 - Beta',
                      'Programming Language :: Python'],
         keywords=['full', 'metadata'],
         scripts={'example-cli': 'example:cli'},
         gui_scripts={'example-gui': 'example:gui'},
         dynamic=[],
         _metadata_version=None)
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:651: in write_to_rfc822
    smart_message['License'] = self.license.text
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5c974d0>
        self       = Metadata(name='full-metadata',
         version=<Version('1.2.3')>,
         description='Some package with all of the PEP 621 metadata',
         license=License(text='some license\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/LICENSE')),
         license_files=None,
         readme=Readme(text='<!--\nSPDX-FileCopyrightText: 2021 The meson-python developers\n\nSPDX-License-Identifier: MIT\n-->\n\n# full-metadata\n\nAn example package with all of the PEP 621 metadata!\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/README.md'), content_type='text/markdown'),
         requires_python=<SpecifierSet('>=3.7', prereleases=True)>,
         dependencies=[<Requirement('a')>,
                       <Requirement('b>1')>,
                       <Requirement('c>2; os_name != "nt"')>],
         optional_dependencies={'test': [<Requirement('d<3')>,
                                         <Requirement('e[all]')>]},
         entrypoints={'something.custom': {'example': 'example:custom'}},
         authors=[('Unknown', '[email protected]'), ('Jane Doe', None)],
         maintainers=[('Jane Doe', '[email protected]')],
         urls={'changelog': 'https://github.com/mesonbuild/meson-python/blob/master/CHANGELOG.rst',
               'documentation': 'https://readthedocs.org',
               'homepage': 'https://example.com',
               'repository': 'https://github.com/mesonbuild/meson-python'},
         classifiers=['Development Status :: 4 - Beta',
                      'Programming Language :: Python'],
         keywords=['full', 'metadata'],
         scripts={'example-cli': 'example:cli'},
         gui_scripts={'example-gui': 'example:gui'},
         dynamic=[],
         _metadata_version=None)
        smart_message = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5c974d0>)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5c974d0>), name = 'License'
value = 'some license\n'

    def __setitem__(self, name: str, value: str | None) -> None:
        if not value:
            return
        if '\n' in value:
            msg = f'"{name}" should not be multiline; indenting to avoid breakage'
>           warnings.warn(msg, ConfigurationWarning, stacklevel=2)
E           pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage

msg        = '"License" should not be multiline; indenting to avoid breakage'
name       = 'License'
self       = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5c974d0>)
value      = 'some license\n'

.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:137: ConfigurationWarning
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
Initialized empty Git repository in /tmp/meson-python/tests/packages/full-metadata/.git/
+ meson setup /tmp/meson-python/tests/packages/full-metadata /tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31/meson-python-native-file.ini
The Meson build system
Version: 1.5.1
Source dir: /tmp/meson-python/tests/packages/full-metadata
Build dir: /tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31
Build type: native build
Project name: full-metadata
Project version: 1.0.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 0

full-metadata 1.0.0

  User defined options
    Native files: /tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31/meson-python-native-file.ini
    buildtype   : release
    b_ndebug    : if-release
    b_vscrt     : md

Found ninja-1.12.1 at /usr/bin/ninja
+ meson dist --allow-dirty --no-tests --formats gztar
Created /tmp/meson-python/tests/packages/full-metadata/.mesonpy-fnrhas31/meson-dist/full-metadata-1.0.0.tar.gz
____________________________________________ ERROR at setup of test_contents_license_file _____________________________________________

tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

    @pytest.fixture(scope='session')
    def fixture(tmp_path_session):
        with chdir(package_dir / package), in_git_repo_context():
>           return tmp_path_session / mesonpy.build_wheel(tmp_path_session)

package    = 'license-file'
tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

tests/conftest.py:139: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
mesonpy/__init__.py:1047: in wrapper
    return func(*args, **kwargs)
        args       = (PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia'),)
        func       = <function build_wheel at 0x7f1ed85e9120>
        kwargs     = {}
mesonpy/__init__.py:1101: in build_wheel
    return project.wheel(out).name
        config_settings = None
        metadata_directory = None
        out        = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        project    = <mesonpy.Project object at 0x7f1ed5b1c8d0>
        wheel_directory = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
mesonpy/__init__.py:944: in wheel
    return builder.build(directory)
        builder    = <mesonpy._WheelBuilder object at 0x7f1ed5b1d8d0>
        directory  = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        self       = <mesonpy.Project object at 0x7f1ed5b1c8d0>
mesonpy/__init__.py:464: in build
    self._wheel_write_metadata(whl)
        directory  = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        self       = <mesonpy._WheelBuilder object at 0x7f1ed5b1d8d0>
        wheel_file = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/license_file-1.0.0-py3-none-any.whl')
        whl        = <mesonpy._wheelfile.WheelFileWriter object at 0x7f1ed5b1da50>
mesonpy/__init__.py:452: in _wheel_write_metadata
    whl.writestr(f'{self._distinfo_dir}/METADATA', bytes(self._metadata.as_rfc822()))
        self       = <mesonpy._WheelBuilder object at 0x7f1ed5b1d8d0>
        whl        = <mesonpy._wheelfile.WheelFileWriter object at 0x7f1ed5b1da50>
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:623: in as_rfc822
    self.write_to_rfc822(message)
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5b1d350>
        self       = Metadata(name='license-file',
         version=<Version('1.0.0')>,
         description=None,
         license=License(text='Hello!\n', file=PosixPath('/tmp/meson-python/tests/packages/license-file/something/LICENSE.custom')),
         license_files=None,
         readme=None,
         requires_python=None,
         dependencies=[],
         optional_dependencies={},
         entrypoints={},
         authors=[],
         maintainers=[],
         urls={},
         classifiers=[],
         keywords=[],
         scripts={},
         gui_scripts={},
         dynamic=[],
         _metadata_version=None)
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:651: in write_to_rfc822
    smart_message['License'] = self.license.text
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5b1d350>
        self       = Metadata(name='license-file',
         version=<Version('1.0.0')>,
         description=None,
         license=License(text='Hello!\n', file=PosixPath('/tmp/meson-python/tests/packages/license-file/something/LICENSE.custom')),
         license_files=None,
         readme=None,
         requires_python=None,
         dependencies=[],
         optional_dependencies={},
         entrypoints={},
         authors=[],
         maintainers=[],
         urls={},
         classifiers=[],
         keywords=[],
         scripts={},
         gui_scripts={},
         dynamic=[],
         _metadata_version=None)
        smart_message = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5b1d350>)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5b1d350>), name = 'License', value = 'Hello!\n'

    def __setitem__(self, name: str, value: str | None) -> None:
        if not value:
            return
        if '\n' in value:
            msg = f'"{name}" should not be multiline; indenting to avoid breakage'
>           warnings.warn(msg, ConfigurationWarning, stacklevel=2)
E           pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage

msg        = '"License" should not be multiline; indenting to avoid breakage'
name       = 'License'
self       = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5b1d350>)
value      = 'Hello!\n'

.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:137: ConfigurationWarning
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
Initialized empty Git repository in /tmp/meson-python/tests/packages/license-file/.git/
+ meson setup /tmp/meson-python/tests/packages/license-file /tmp/meson-python/tests/packages/license-file/.mesonpy-zchwqh4l -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/tmp/meson-python/tests/packages/license-file/.mesonpy-zchwqh4l/meson-python-native-file.ini
The Meson build system
Version: 1.5.1
Source dir: /tmp/meson-python/tests/packages/license-file
Build dir: /tmp/meson-python/tests/packages/license-file/.mesonpy-zchwqh4l
Build type: native build
Project name: license-file
Project version: 1.0.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 0

license-file 1.0.0

  User defined options
    Native files: /tmp/meson-python/tests/packages/license-file/.mesonpy-zchwqh4l/meson-python-native-file.ini
    buildtype   : release
    b_ndebug    : if-release
    b_vscrt     : md

Found ninja-1.12.1 at /usr/bin/ninja
+ /usr/bin/ninja
ninja: no work to do.
_________________________________________________ ERROR at setup of test_entrypoints __________________________________________________

tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

    @pytest.fixture(scope='session')
    def fixture(tmp_path_session):
        with chdir(package_dir / package), in_git_repo_context():
>           return tmp_path_session / mesonpy.build_wheel(tmp_path_session)

package    = 'full-metadata'
tmp_path_session = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')

tests/conftest.py:139: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
mesonpy/__init__.py:1047: in wrapper
    return func(*args, **kwargs)
        args       = (PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia'),)
        func       = <function build_wheel at 0x7f1ed85e9120>
        kwargs     = {}
mesonpy/__init__.py:1101: in build_wheel
    return project.wheel(out).name
        config_settings = None
        metadata_directory = None
        out        = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        project    = <mesonpy.Project object at 0x7f1ed5b1c6d0>
        wheel_directory = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
mesonpy/__init__.py:944: in wheel
    return builder.build(directory)
        builder    = <mesonpy._WheelBuilder object at 0x7f1ed5b1d0d0>
        directory  = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        self       = <mesonpy.Project object at 0x7f1ed5b1c6d0>
mesonpy/__init__.py:464: in build
    self._wheel_write_metadata(whl)
        directory  = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia')
        self       = <mesonpy._WheelBuilder object at 0x7f1ed5b1d0d0>
        wheel_file = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/full_metadata-1.2.3-py3-none-any.whl')
        whl        = <mesonpy._wheelfile.WheelFileWriter object at 0x7f1ed5b02890>
mesonpy/__init__.py:452: in _wheel_write_metadata
    whl.writestr(f'{self._distinfo_dir}/METADATA', bytes(self._metadata.as_rfc822()))
        self       = <mesonpy._WheelBuilder object at 0x7f1ed5b1d0d0>
        whl        = <mesonpy._wheelfile.WheelFileWriter object at 0x7f1ed5b02890>
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:623: in as_rfc822
    self.write_to_rfc822(message)
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5bcf310>
        self       = Metadata(name='full-metadata',
         version=<Version('1.2.3')>,
         description='Some package with all of the PEP 621 metadata',
         license=License(text='some license\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/LICENSE')),
         license_files=None,
         readme=Readme(text='<!--\nSPDX-FileCopyrightText: 2021 The meson-python developers\n\nSPDX-License-Identifier: MIT\n-->\n\n# full-metadata\n\nAn example package with all of the PEP 621 metadata!\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/README.md'), content_type='text/markdown'),
         requires_python=<SpecifierSet('>=3.7', prereleases=True)>,
         dependencies=[<Requirement('a')>,
                       <Requirement('b>1')>,
                       <Requirement('c>2; os_name != "nt"')>],
         optional_dependencies={'test': [<Requirement('d<3')>,
                                         <Requirement('e[all]')>]},
         entrypoints={'something.custom': {'example': 'example:custom'}},
         authors=[('Unknown', '[email protected]'), ('Jane Doe', None)],
         maintainers=[('Jane Doe', '[email protected]')],
         urls={'changelog': 'https://github.com/mesonbuild/meson-python/blob/master/CHANGELOG.rst',
               'documentation': 'https://readthedocs.org',
               'homepage': 'https://example.com',
               'repository': 'https://github.com/mesonbuild/meson-python'},
         classifiers=['Development Status :: 4 - Beta',
                      'Programming Language :: Python'],
         keywords=['full', 'metadata'],
         scripts={'example-cli': 'example:cli'},
         gui_scripts={'example-gui': 'example:gui'},
         dynamic=[],
         _metadata_version=None)
.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:651: in write_to_rfc822
    smart_message['License'] = self.license.text
        message    = <pyproject_metadata.RFC822Message object at 0x7f1ed5bcf310>
        self       = Metadata(name='full-metadata',
         version=<Version('1.2.3')>,
         description='Some package with all of the PEP 621 metadata',
         license=License(text='some license\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/LICENSE')),
         license_files=None,
         readme=Readme(text='<!--\nSPDX-FileCopyrightText: 2021 The meson-python developers\n\nSPDX-License-Identifier: MIT\n-->\n\n# full-metadata\n\nAn example package with all of the PEP 621 metadata!\n', file=PosixPath('/tmp/meson-python/tests/packages/full-metadata/README.md'), content_type='text/markdown'),
         requires_python=<SpecifierSet('>=3.7', prereleases=True)>,
         dependencies=[<Requirement('a')>,
                       <Requirement('b>1')>,
                       <Requirement('c>2; os_name != "nt"')>],
         optional_dependencies={'test': [<Requirement('d<3')>,
                                         <Requirement('e[all]')>]},
         entrypoints={'something.custom': {'example': 'example:custom'}},
         authors=[('Unknown', '[email protected]'), ('Jane Doe', None)],
         maintainers=[('Jane Doe', '[email protected]')],
         urls={'changelog': 'https://github.com/mesonbuild/meson-python/blob/master/CHANGELOG.rst',
               'documentation': 'https://readthedocs.org',
               'homepage': 'https://example.com',
               'repository': 'https://github.com/mesonbuild/meson-python'},
         classifiers=['Development Status :: 4 - Beta',
                      'Programming Language :: Python'],
         keywords=['full', 'metadata'],
         scripts={'example-cli': 'example:cli'},
         gui_scripts={'example-gui': 'example:gui'},
         dynamic=[],
         _metadata_version=None)
        smart_message = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5bcf310>)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5bcf310>), name = 'License'
value = 'some license\n'

    def __setitem__(self, name: str, value: str | None) -> None:
        if not value:
            return
        if '\n' in value:
            msg = f'"{name}" should not be multiline; indenting to avoid breakage'
>           warnings.warn(msg, ConfigurationWarning, stacklevel=2)
E           pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage

msg        = '"License" should not be multiline; indenting to avoid breakage'
name       = 'License'
self       = _SmartMessageSetter(message=<pyproject_metadata.RFC822Message object at 0x7f1ed5bcf310>)
value      = 'some license\n'

.nox/test-3-11/lib/python3.11/site-packages/pyproject_metadata/__init__.py:137: ConfigurationWarning
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
Initialized empty Git repository in /tmp/meson-python/tests/packages/full-metadata/.git/
+ meson setup /tmp/meson-python/tests/packages/full-metadata /tmp/meson-python/tests/packages/full-metadata/.mesonpy-qtu327ta -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/tmp/meson-python/tests/packages/full-metadata/.mesonpy-qtu327ta/meson-python-native-file.ini
The Meson build system
Version: 1.5.1
Source dir: /tmp/meson-python/tests/packages/full-metadata
Build dir: /tmp/meson-python/tests/packages/full-metadata/.mesonpy-qtu327ta
Build type: native build
Project name: full-metadata
Project version: 1.0.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 0

full-metadata 1.0.0

  User defined options
    Native files: /tmp/meson-python/tests/packages/full-metadata/.mesonpy-qtu327ta/meson-python-native-file.ini
    buildtype   : release
    b_ndebug    : if-release
    b_vscrt     : md

Found ninja-1.12.1 at /usr/bin/ninja
+ /usr/bin/ninja
ninja: no work to do.
============================================================== FAILURES ===============================================================
___________________________________________________________ test_no_pep621 ____________________________________________________________

sdist_library = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/library-1.0.0.tar.gz')

    def test_no_pep621(sdist_library):
        with tarfile.open(sdist_library, 'r:gz') as sdist:
            sdist_pkg_info = sdist.extractfile('library-1.0.0/PKG-INFO').read().decode()
    
>       assert sdist_pkg_info == textwrap.dedent('''\
            Metadata-Version: 2.1
            Name: library
            Version: 1.0.0
        ''')
E       AssertionError: assert 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n'
E         
E           Metadata-Version: 2.1
E           Name: library
E           Version: 1.0.0
E         +

sdist      = <tarfile.TarFile object at 0x7f1ed5cb29d0>
sdist_library = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/library-1.0.0.tar.gz')
sdist_pkg_info = 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n\n'

tests/test_sdist.py:25: AssertionError
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
Initialized empty Git repository in /tmp/meson-python/tests/packages/library/.git/
+ meson setup /tmp/meson-python/tests/packages/library /tmp/meson-python/tests/packages/library/.mesonpy-d_83134r -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/tmp/meson-python/tests/packages/library/.mesonpy-d_83134r/meson-python-native-file.ini
The Meson build system
Version: 1.5.1
Source dir: /tmp/meson-python/tests/packages/library
Build dir: /tmp/meson-python/tests/packages/library/.mesonpy-d_83134r
Build type: native build
Project name: library
Project version: 1.0.0
C compiler for the host machine: sccache cc (gcc 14.2.1 "cc (Gentoo 14.2.1_p20240817 p4) 14.2.1 20240817")
C linker for the host machine: cc ld.bfd 2.43
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 2

library 1.0.0

  User defined options
    Native files: /tmp/meson-python/tests/packages/library/.mesonpy-d_83134r/meson-python-native-file.ini
    buildtype   : release
    b_ndebug    : if-release
    b_vscrt     : md

Found ninja-1.12.1 at /usr/bin/ninja
+ meson dist --allow-dirty --no-tests --formats gztar
Created /tmp/meson-python/tests/packages/library/.mesonpy-d_83134r/meson-dist/library-1.0.0.tar.gz
________________________________________________________ test_dynamic_version _________________________________________________________

sdist_dynamic_version = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/dynamic_version-1.0.0.tar.gz')

    def test_dynamic_version(sdist_dynamic_version):
        with tarfile.open(sdist_dynamic_version, 'r:gz') as sdist:
            sdist_pkg_info = sdist.extractfile('dynamic_version-1.0.0/PKG-INFO').read().decode()
    
>       assert sdist_pkg_info == textwrap.dedent('''\
            Metadata-Version: 2.1
            Name: dynamic-version
            Version: 1.0.0
        ''')
E       AssertionError: assert 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n'
E         
E           Metadata-Version: 2.1
E           Name: dynamic-version
E           Version: 1.0.0
E         +

sdist      = <tarfile.TarFile object at 0x7f1ed5f6bd90>
sdist_dynamic_version = PosixPath('/tmp/pytest-of-mgorny/pytest-2/test0/mesonpy-test-swc0ohia/dynamic_version-1.0.0.tar.gz')
sdist_pkg_info = 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n\n'

tests/test_sdist.py:82: AssertionError
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
Initialized empty Git repository in /tmp/meson-python/tests/packages/dynamic-version/.git/
+ meson setup /tmp/meson-python/tests/packages/dynamic-version /tmp/meson-python/tests/packages/dynamic-version/.mesonpy-kxn8g8xt -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/tmp/meson-python/tests/packages/dynamic-version/.mesonpy-kxn8g8xt/meson-python-native-file.ini
The Meson build system
Version: 1.5.1
Source dir: /tmp/meson-python/tests/packages/dynamic-version
Build dir: /tmp/meson-python/tests/packages/dynamic-version/.mesonpy-kxn8g8xt
Build type: native build
Project name: dynamic-version
Project version: 1.0.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 0

dynamic-version 1.0.0

  User defined options
    Native files: /tmp/meson-python/tests/packages/dynamic-version/.mesonpy-kxn8g8xt/meson-python-native-file.ini
    buildtype   : release
    b_ndebug    : if-release
    b_vscrt     : md

Found ninja-1.12.1 at /usr/bin/ninja
+ meson dist --allow-dirty --no-tests --formats gztar
Created /tmp/meson-python/tests/packages/dynamic-version/.mesonpy-kxn8g8xt/meson-dist/dynamic-version-1.0.0.tar.gz
======================================================= short test summary info =======================================================
SKIPPED [1] tests/test_project.py:204: Requires MSVC
SKIPPED [3] tests/test_project.py:216: macOS specific test
SKIPPED [2] tests/test_project.py:233: macOS specific test
SKIPPED [1] tests/test_tags.py:47: macOS specific test
SKIPPED [1] tests/test_tags.py:59: macOS specific test
SKIPPED [1] tests/test_tags.py:69: macOS specific test
SKIPPED [2] tests/test_wheel.py:251: macOS specific test
ERROR tests/test_sdist.py::test_pep621 - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
ERROR tests/test_wheel.py::test_contents_license_file - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
ERROR tests/test_wheel.py::test_entrypoints - pyproject_metadata.ConfigurationWarning: "License" should not be multiline; indenting to avoid breakage
FAILED tests/test_sdist.py::test_no_pep621 - AssertionError: assert 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: library\nVersion: 1.0.0\n'
  
    Metadata-Version: 2.1
    Name: library
    Version: 1.0.0
  +
FAILED tests/test_sdist.py::test_dynamic_version - AssertionError: assert 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n\n' == 'Metadata-Version: 2.1\nName: dynamic-version\nVersion: 1.0.0\n'
  
    Metadata-Version: 2.1
    Name: dynamic-version
    Version: 1.0.0
  +
=================================== 2 failed, 107 passed, 11 skipped, 3 errors in 68.85s (0:01:08) ====================================

To reproduce, I've first ran nox, then entered the venv and issued pip install -U --pre pyproject-metadata. This is on top of 04e00668ae869ab42579cc5bfa8264d0475e83fc.

mgorny avatar Sep 13 '24 13:09 mgorny

Okay, looks like more problems are to be expected. E.g. while building matplotlib==3.9.2:

raceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/site-packages/gpep517/__main__.py", line 443, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/lib/python3.11/site-packages/gpep517/__main__.py", line 439, in main
    return func(args)
           ^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gpep517/__main__.py", line 229, in build_wheel
    print(build_wheel_impl(args, args.wheel_dir), file=out)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gpep517/__main__.py", line 221, in build_wheel_impl
    wheel_name = backend.build_wheel(str(wheel_dir), args.config_json)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/mesonpy/__init__.py", line 1020, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/mesonpy/__init__.py", line 1074, in build_wheel
    return project.wheel(out).name
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/mesonpy/__init__.py", line 925, in wheel
    return builder.build(directory)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/mesonpy/__init__.py", line 463, in build
    self._wheel_write_metadata(whl)
  File "/usr/lib/python3.11/site-packages/mesonpy/__init__.py", line 451, in _wheel_write_metadata
    whl.writestr(f'{self._distinfo_dir}/METADATA', bytes(self._metadata.as_rfc822()))
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/email/message.py", line 194, in __bytes__
    return self.as_bytes()
           ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/email/message.py", line 208, in as_bytes
    g.flatten(self, unixfrom=unixfrom)
  File "/usr/lib/python3.11/email/generator.py", line 117, in flatten
    self._write(msg)
  File "/usr/lib/python3.11/email/generator.py", line 182, in _write
    self._dispatch(msg)
  File "/usr/lib/python3.11/email/generator.py", line 219, in _dispatch
    meth(msg)
  File "/usr/lib/python3.11/email/generator.py", line 446, in _handle_text
    super(BytesGenerator,self)._handle_text(msg)
  File "/usr/lib/python3.11/email/generator.py", line 263, in _handle_text
    self._write_lines(payload)
  File "/usr/lib/python3.11/email/generator.py", line 156, in _write_lines
    self.write(line)
  File "/usr/lib/python3.11/email/generator.py", line 420, in write
    self._fp.write(s.encode('ascii', 'surrogateescape'))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'ascii' codec can't encode character '\u2014' in position 61: ordinal not in range(128)
meson-python: warning: "License" should not be multiline; indenting to avoid breakage

mgorny avatar Sep 13 '24 13:09 mgorny

There is no regression in meson-python. The test failures are just the test being too strict in what they check for and tripping on a slight change in serialization format in pyproject-metadata. The build failure is a problem in pyproject-metadata that has already been reported pypa/pyproject-metadata#149 Thanks for testing, but in general, you must expect bugs in testing pre-releases. Reporting these bugs to down-stream projects is very seldom useful.

dnicolodi avatar Sep 13 '24 13:09 dnicolodi

Reporting these bugs to down-stream projects is very seldom useful.

Prereleases are made so that a small number of people, willing to live on the edge, can find bugs before releasing to everyone. Reporting is always useful, unless the issue is already known. (Maybe not to every project involved, though, pyproject-metadata would be enough in this case ;) )

henryiii avatar Sep 13 '24 13:09 henryiii

I would feed very bad if when I make a pre-release of meson-python that contains a bug, people goes around reporting it to every project that uses meson-python as a build backend. As I wrote, reporting bugs in a pre-release of dependency to the projects using it is very often unnecessary.

dnicolodi avatar Sep 13 '24 14:09 dnicolodi

I'm sorry, the traceback didn't mention pyproject-metadata anywhere, so it seemed reasonable to report it here first.

mgorny avatar Sep 13 '24 17:09 mgorny

The original test regression is valid: we've changed the whitespace slightly to better match the email module's output. The other two are being fixed.

henryiii avatar Sep 13 '24 20:09 henryiii

The warning and ascii error should be fixed. The spacing comparison in the tests still needs to be handled here, though.

henryiii avatar Sep 13 '24 21:09 henryiii

Since we now have a CI job testing against pyproject-metadata 0.9.0rc1, I think this can be closed right?

rgommers avatar Oct 22 '24 14:10 rgommers

I think so too.

dnicolodi avatar Oct 22 '24 15:10 dnicolodi