Cannot use output of gnome.genmarshal as input.
- Dominant language
- Python
- Stars
- 6.6k
- Forks
- 1.9k
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 33
Description
here is my code:
```
my_headers = […]
my_marshal = gnome.genmarshal('my_marshal', …)
my_headers += my_marshal[1]
my_enums = gnome.mkenums_simple('my-enum-types',
sources: my_headers,
…
)
```
The output:
```
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/mesonbuild/mesonmain.py", line 129, in run
return options.run_func(options)
File "/usr/lib/python3.8/site-packages/mesonbuild/msetup.py", line 245, in run
app.generate()
File "/usr/lib/python3.8/site-packages/mesonbuild/msetup.py", line 159, in generate
self._generate(env)
File "/usr/lib/python3.8/site-packages/mesonbuild/msetup.py", line 192, in _generate
intr.run()
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreter.py", line 4165, in run
super().run()
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 412, in run
self.evaluate_codeblock(self.ast, start=1)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 436, in evaluate_codeblock
raise e
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 430, in evaluate_codeblock
self.evaluate_statement(cur)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 441, in evaluate_statement
return self.function_call(cur)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 788, in function_call
return func(node, posargs, kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 285, in wrapped
return f(*wrapped_args, **wrapped_kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 174, in wrapped
return f(*wrapped_args, **wrapped_kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreter.py", line 3687, in func_subdir
self.evaluate_codeblock(codeblock)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 436, in evaluate_codeblock
raise e
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 430, in evaluate_codeblock
self.evaluate_statement(cur)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 443, in evaluate_statement
return self.assignment(cur)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 1064, in assignment
value = self.evaluate_statement(node.value)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 445, in evaluate_statement
return self.method_call(cur)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 828, in method_call
return obj.method_call(method_name, args, kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreter.py", line 1756, in method_call
value = fn(state, args, kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/interpreterbase.py", line 231, in wrapped
return f(*wrapped_args, **wrapped_kwargs)
File "/usr/lib/python3.8/site-packages/mesonbuild/modules/gnome.py", line 1376, in mkenums_simple
c_file_kwargs = copy.deepcopy(mkenums_kwargs)
File "/usr/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.8/copy.py", line 205, in _deepcopy_list
append(deepcopy(a, memo))
File "/usr/lib/python3.8/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.8/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/usr/lib/python3.8/copy.py", line 270, in _reconstruct
state = deepcopy(state, memo)
File "/usr/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.8/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/lib/python3.8/copy.py", line 161, in deepcopy
rv = reductor(4)
TypeError: cannot pickle '_thread.lock' object
```
Also, it cannot be used as an input for `install_headers`. It should, because duplicating things like `get_option('includedir') / 'my_api_name'` is really crappy.
Contributor guide
Research direction
Start in mesonbuild/modules/gnome.py at mkenums_simple and the handling of gnome.genmarshal outputs; reproduce the deepcopy failure from the issue's Meson snippet. Trace how generated outputs are represented when passed to mkenums_simple and install_headers, and consider the request complete when both consumers accept the generated output without requiring duplicated paths.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100