mesonbuild / mesonbuild/meson

Cannot use output of gnome.genmarshal as input.

Open
#6,871 4 comments 0 reactions 0 assignees View on GitHub
gnome module:gnome
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.