Skip to content

AttributeError: 'CustomTarget' object has no attribute 'is_linkable_target' #3613

Open
@jtojnar

Description

@jtojnar

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'

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions