Skip to content

.wraplock broken again on read-only source directories #15429

@mintsuki

Description

@mintsuki

Describe the bug
Similar to #14948, it seems like the bug has come back on meson 1.10.0 (not sure if the first version with the issue back, but it's certainly a version with the issue)

To Reproduce
Attempt to perform an out-of-tree build with a read-only source directory.

Expected behavior
Meson should work, but it does not, and it fails with this trace:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/mesonbuild/mesonmain.py", line 193, in run
    return options.run_func(options)
           ~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/msetup.py", line 404, in run
    app.generate()
    ~~~~~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/mesonbuild/msetup.py", line 196, in generate
    return self._generate(env, capture, vslite_ctx)
           ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/msetup.py", line 255, in _generate
    intr.run()
    ~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreter/interpreter.py", line 3063, in run
    super().run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 178, in run
    self.evaluate_codeblock(self.ast, start=1)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 203, in evaluate_codeblock
    raise e
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 195, in evaluate_codeblock
    self.evaluate_statement(cur)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 209, in evaluate_statement
    return self.function_call(cur)
           ~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 524, in function_call
    (h_posargs, h_kwargs) = self.reduce_arguments(node.args)
                            ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 609, in reduce_arguments
    reduced_val = self.evaluate_statement(val)
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 233, in evaluate_statement
    return self.evaluate_arraystatement(cur)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 267, in evaluate_arraystatement
    (arguments, kwargs) = self.reduce_arguments(cur.args)
                          ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 602, in reduce_arguments
    reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
                   ~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 215, in evaluate_statement
    return self.method_call(cur)
           ~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 550, in method_call
    obj = self.evaluate_statement(invocable)
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 209, in evaluate_statement
    return self.function_call(cur)
           ~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/interpreterbase.py", line 536, in function_call
    res = func(node, func_args, kwargs)
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/decorators.py", line 237, in wrapper
    return f(*nargs, **wrapped_kwargs)
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase/decorators.py", line 565, in wrapper
    return f(*wrapped_args, **wrapped_kwargs)
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreter/interpreter.py", line 857, in func_subproject
    return self.do_subproject(args[0], kw)
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/interpreter/interpreter.py", line 915, in do_subproject
    subdir, method = r.resolve(subp_name, force_method)
                     ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/wrap/wrap.py", line 610, in resolve
    with DirectoryLock(self.subdir_root, '.wraplock',
         ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       DirectoryLockAction.WAIT,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^
                       'Failed to lock subprojects directory', optional=True):
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mesonbuild/utils/platform.py", line 111, in __exit__
    if self.lockfile is None or self.lockfile.closed:
       ^^^^^^^^^^^^^
AttributeError: 'DirectoryLock' object has no attribute 'lockfile'

../../../base_dir/sources/gcon/meson.build:19:8: ERROR: Unhandled python exception

    This is a Meson bug and should be reported!

I would suggest adding a test to avoid breaking this in the future.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions