Cannot access version in default_options
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 6.6k
- Forks
- 1.9k
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 33
Description
When I try the following
project(
'telepathy-idle',
'c',
version: '0.2.0.1',
default_options: [
'c_std=c99',
'werror=@0@'.format((meson.project_version().split('.')[3] == '0').to_string()), # development version
],
)
meson crashes:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mesonbuild/mesonmain.py", line 351, in run
app.generate()
File "/usr/lib/python3/dist-packages/mesonbuild/mesonmain.py", line 117, in generate
self._generate(env)
File "/usr/lib/python3/dist-packages/mesonbuild/mesonmain.py", line 134, in _generate
intr = interpreter.Interpreter(b)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreter.py", line 1877, in __init__
self.parse_project()
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 365, in parse_project
self.evaluate_codeblock(self.ast, end=1)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 404, in evaluate_codeblock
raise e
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 398, in evaluate_codeblock
self.evaluate_statement(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 409, in evaluate_statement
return self.function_call(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 691, in function_call
(posargs, kwargs) = self.reduce_arguments(node.args)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 928, in reduce_arguments
reduced_kw[key] = self.evaluate_statement(a)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 425, in evaluate_statement
return self.evaluate_arraystatement(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 454, in evaluate_arraystatement
(arguments, kwargs) = self.reduce_arguments(cur.args)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 922, in reduce_arguments
reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 922, in <listcomp>
reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 413, in evaluate_statement
return self.method_call(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 713, in method_call
return self.string_method_call(obj, method_name, args)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 798, in string_method_call
(posargs, kwargs) = self.reduce_arguments(args)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 922, in reduce_arguments
reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 922, in <listcomp>
reduced_pos = [self.evaluate_statement(arg) for arg in args.arguments]
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 413, in evaluate_statement
return self.method_call(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 709, in method_call
obj = self.evaluate_statement(invokable)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 423, in evaluate_statement
return self.evaluate_comparison(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 491, in evaluate_comparison
val1 = self.evaluate_statement(node.left)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 445, in evaluate_statement
return self.evaluate_indexing(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 666, in evaluate_indexing
iobject = self.evaluate_statement(node.iobject)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 413, in evaluate_statement
return self.method_call(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 709, in method_call
obj = self.evaluate_statement(invokable)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 413, in evaluate_statement
return self.method_call(cur)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 735, in method_call
return obj.method_call(method_name, args, kwargs)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 304, in method_call
return method(args, kwargs)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 115, in wrapped
return f(*wrapped_args, **wrapped_kwargs)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreterbase.py", line 162, in wrapped
return f(*wrapped_args, **wrapped_kwargs)
File "/usr/lib/python3/dist-packages/mesonbuild/interpreter.py", line 1754, in project_version_method
return self.build.dep_manifest[self.interpreter.active_projectname]['version']
AttributeError: 'Interpreter' object has no attribute 'active_projectname'
While it makes sense, as project call has not finalized yet, due to the meson limitation, the following does not work either:
idle_major_version = '0'
idle_minor_version = '2'
idle_micro_version = '0'
idle_nano_version = '1'
version = '@0@.@1@.@2@.@3@'.format(
idle_major_version,
idle_minor_version,
idle_micro_version,
idle_nano_version,
)
project(
'telepathy-idle',
'c',
version: '0.2.0.1',
default_options: [
'c_std=c99',
'werror=@0@'.format((idle_nano_version == '0').to_string()), # development version
],
)
We need an error message and some way to make the default_options depend on the version.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the reproducer in the issue and trace the failure through mesonbuild/interpreter.py, especially project_version_method, and the argument evaluation paths in mesonbuild/interpreterbase.py. Determine how default_options should handle access to the project version before project() finishes. Done means the invalid access produces a clear error and there is a supported way for default_options to depend on the version.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100