project('transitive dependencies', 'rust', 'c',
  version : '1.0.0',
  meson_version : '>= 1.0.0',
  default_options : ['rust_std=2018'],
)

subdir('liba')
subdir('libb')

main = executable('main', 'main.rs',
  link_with : [libb],
)

main = executable('main-with-staticlib', 'main-with-staticlib.rs',
  link_with : [libb_staticlib],
)

# Since foo-rs is a static library, its dependencies are normally added to
# footest link command. However, since pm is a proc-macro, footest should not
# link with it. In native build this is an harmless overlinking, but in cross
# building foo and pm are for different arch and it would fail to link.
rust = import('rust')
pm = rust.proc_macro('pm', 'proc.rs')
foo = static_library('foo-rs', 'foo.rs',
  rust_abi: 'c',
  link_with: pm,
)
shared_library('shared', 'foo.c', link_with : foo)
exe = executable('footest', 'foo.c',
  link_with: foo,
)
test('footest', exe)

subdir('diamond')

# The ninja rule for libstatic2.a does not depend on libstatic1.a because it
# only need static2.c.o to create the archive. That means that the ninja rule
# for app must depend on both, otherwise libstatic1.a won't be built and linking
# will fail.
static1 = static_library('static1', 'static1.c', build_by_default: false)
static2 = static_library('static2', 'static2.c', link_with: static1)
exe = executable('app', 'app.rs', link_with: static2)
