Skip to content

Unable to map files without a starting placeholder in the Meson metadata (regression) #341

Closed
@FFY00

Description

@FFY00

When writing a test to check something else, I hit a case where Meson still uses the full path in the metadata, instead of having a placeholder. This happens because I install from py.get_path('purelib').

The heuristics that used to deal with this were removed in #280. We were under the impression these issues were fixed in newer Meson versions, but apparently using paths returned from functions, at least in install_subdir, is still broken. I should have tried this when reviewing the PR, sorry. IIRC, I did try another similar snippet, which IIRC was working, but I shouldn't have stopped there. We should have had a test covering this already too.

Reproducible:

# SPDX-FileCopyrightText: 2022 The meson-python developers
#
# SPDX-License-Identifier: MIT

project('install-subdir-python-path', version: '1.0.0')

py = import('python').find_installation()

install_subdir(
  'foo',
  install_dir: py.get_path('purelib'),
)
* Building wheel...
+ meson setup --prefix=/usr /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/builddir --native-file=/home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/builddir/meson-python-native-file.ini -Ddebug=false -Db_ndebug=if-release -Doptimization=2 --python.purelibdir /usr/lib/python3.10/site-packages --python.platlibdir /usr/lib/python3.10/site-packages
The Meson build system
Version: 1.0.1
Source dir: /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude
Build dir: /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/builddir
Build type: native build
Project name: install-subdir-python-path
Project version: 1.0.0
Host machine cpu family: x86_64
Host machine cpu: x86_64
Program python found: YES (/usr/bin/python)
Build targets in project: 0

install-subdir-python-path 1.0.0

  User defined options
    Native files     : /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/builddir/meson-python-native-file.ini
    debug            : false
    optimization     : 2
    prefix           : /usr
    python.platlibdir: /usr/lib/python3.10/site-packages
    python.purelibdir: /usr/lib/python3.10/site-packages
    b_ndebug         : if-release

Found ninja-1.11.1 at /usr/bin/ninja
! Using Meson to generate the project metadata (no `project` section in pyproject.toml)
+ /usr/bin/ninja
ninja: no work to do.
+ meson install --only-changed --destdir /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/.mesonpy-7s72kj4n/install
ninja: Entering directory `/home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/builddir'
ninja: no work to do.
Installing subdir /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/foo to /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/.mesonpy-7s72kj4n/install/usr/lib/python3.10/site-packages/foo
Installing /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/foo/file2 to /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/.mesonpy-7s72kj4n/install/usr/lib/python3.10/site-packages/foo
Installing /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/foo/bar/file1 to /home/anubis/git/mesonpy/tests/packages/install-subdir-exclude/.mesonpy-7s72kj4n/install/usr/lib/python3.10/site-packages/foo/bar
meson-python: warning: Could not map installation path to an equivalent wheel directory: '/usr/lib/python3.10/site-packages/foo'
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
    main()
  File "/usr/lib/python3.10/site-packages/pyproject_hooks/_in_process/_in_process.py", line 335, in main
    json_out['return_val'] = hook(**hook_input['kwargs'])
  File "/usr/lib/python3.10/site-packages/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
    return _build_backend().build_wheel(wheel_directory, config_settings,
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 1034, in wrapper
    return func(*args, **kwargs)
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 1098, in build_wheel
    return project.wheel(out).name
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 967, in wheel
    file = self._wheel_builder.build(directory)
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 490, in build
    wheel_file = pathlib.Path(directory, f'{self.name}.whl')
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 274, in name
    tag=self.tag,
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 259, in tag
    if self.is_pure:
  File "/usr/lib/python3.10/functools.py", line 981, in __get__
    val = self.func(instance)
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 292, in is_pure
    if self._wheel_files['platlib']:
  File "/usr/lib/python3.10/functools.py", line 981, in __get__
    val = self.func(instance)
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 233, in _wheel_files
    return _map_to_wheel(self._sources)
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 167, in _map_to_wheel
    directory, path = _map_meson_destination(target['destination'])
  File "/home/anubis/git/mesonpy/mesonpy/__init__.py", line 158, in _map_meson_destination
    raise RuntimeError('Meson installation path {destination!r} does not start with a placeholder. Meson bug!')
RuntimeError: Meson installation path {destination!r} does not start with a placeholder. Meson bug!

ERROR Backend subprocess exited when trying to invoke build_wheel

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidThis doesn't seem right

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions