Open
Description
I am trying to llink a cdylib
created by cargo
, see the following build file
project('foo', ['c', 'rust'],
version: '0.1.0'
)
# Common
prefix = get_option('prefix')
includedir = join_paths(prefix, get_option('includedir'))
libdir = join_paths(prefix, get_option('libdir'))
pkglibdir = join_paths(libdir, 'foo')
cargo = find_program('cargo')
cbindgen = find_program('cbindgen')
cargo_script = find_program('build-aux/cargo.sh')
# Library
sources = [
'src/lib.rs'
]
libfoo_target = custom_target(
'libfoo',
build_by_default: true,
input: sources,
output: ['libfoo.so'],
install: true,
install_dir: libdir,
command: [cargo_script, '@CURRENT_SOURCE_DIR@', '@OUTPUT@', pkglibdir]
)
libfoo_header = custom_target(
'libfoo_header',
build_by_default: true,
input: [sources, 'cbindgen.toml'],
output: ['foo.h'],
install: true,
depends: [libfoo_target], # TODO: needs Cargo.lock produced by libfoo_target
install_dir: includedir,
command: [cbindgen, '@CURRENT_SOURCE_DIR@', '-o', '@OUTPUT@']
)
libfoo = declare_dependency(
link_with: libfoo_target, # ERROR: 'CustomTarget' object has no attribute 'is_linkable_target'
sources: [libfoo_header],
)
# Executables
if get_option('examples')
demo_sources = [
'demo.c'
]
executable('demo',
demo_sources,
dependencies: [libfoo],
)
endif
but meson crashes with this error
The Meson build system
Version: 0.46.1
Source dir: /media/projects/foo
Build dir: /media/projects/foo/build
Build type: native build
Project name: foo
Native C compiler: gcc (gcc 7.3.0 "gcc (GCC) 7.3.0")
Native Rust compiler: rustc (rustc 1.25.0)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Program cargo found: YES (/nix/store/nxdmqb9vika2faxl69air39z9smv8pm1-cargo-0.26.0/bin/cargo)
Program cbindgen found: YES (/nix/store/4vgpai41vsylc53dsaxd6shq2nz4g51f-rust-cbindgen-0.6.0/bin/cbindgen)
Program build-aux/cargo.sh found: YES (/bin/sh /media/projects/foo/build-aux/cargo.sh)
Traceback (most recent call last):
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 364, in run
app.generate()
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 135, in generate
self._generate(env)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 186, in _generate
intr.run()
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 3261, in run
super().run()
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 215, in run
self.evaluate_codeblock(self.ast, start=1)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 239, in evaluate_codeblock
raise e
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 231, in evaluate_codeblock
self.evaluate_statement(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 254, in evaluate_statement
return self.evaluate_if(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 307, in evaluate_if
self.evaluate_codeblock(i.block)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 239, in evaluate_codeblock
raise e
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 231, in evaluate_codeblock
self.evaluate_statement(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 244, in evaluate_statement
return self.function_call(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 504, in function_call
return func(node, posargs, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 99, in wrapped
return f(s, node_or_state, args, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 2919, in func_subdir
self.evaluate_codeblock(codeblock)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 239, in evaluate_codeblock
raise e
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 231, in evaluate_codeblock
self.evaluate_statement(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 244, in evaluate_statement
return self.function_call(cur)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 504, in function_call
return func(node, posargs, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 99, in wrapped
return f(s, node_or_state, args, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 2643, in func_executable
return self.build_target(node, args, kwargs, ExecutableHolder)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 3424, in build_target
target = targetclass(name, self.subdir, self.subproject, is_cross, sources, objs, self.environment, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/build.py", line 1219, in __init__
super().__init__(name, subdir, subproject, is_cross, sources, objects, environment, kwargs)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/build.py", line 391, in __init__
self.process_kwargs(kwargs, environment)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/build.py", line 739, in process_kwargs
self.add_deps(deplist)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/build.py", line 875, in add_deps
self.link(l)
File "/nix/store/81zi75jjhc8ay0adx6xdipglfl433m5h-meson-0.46.1/lib/python3.6/site-packages/mesonbuild/build.py", line 914, in link
if not t.is_linkable_target():
AttributeError: 'CustomTarget' object has no attribute 'is_linkable_target'