aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-06-19 00:25:15 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2014-06-19 00:25:15 +0300
commit7b4595e07c6da1c147a6d0f5df8c2bd24b6b46ae (patch)
treedba2b9ff376c4ab023695e0e0cbc6570fcd412fb
parentbf4708eb832538189b1e878cd11cb7888d7f2c70 (diff)
downloadmeson-7b4595e07c6da1c147a6d0f5df8c2bd24b6b46ae.zip
meson-7b4595e07c6da1c147a6d0f5df8c2bd24b6b46ae.tar.gz
meson-7b4595e07c6da1c147a6d0f5df8c2bd24b6b46ae.tar.bz2
Set up dependencies for Rust linking. Does not work fully yet.
-rw-r--r--ninjabackend.py10
-rw-r--r--test cases/rust/2 sharedlib/meson.build2
-rw-r--r--test cases/rust/2 sharedlib/prog.rs3
3 files changed, 15 insertions, 0 deletions
diff --git a/ninjabackend.py b/ninjabackend.py
index 543cc12..1f3bfab 100644
--- a/ninjabackend.py
+++ b/ninjabackend.py
@@ -514,7 +514,17 @@ class NinjaBackend(backends.Backend):
depfile = target.name + '.d'
flags += ['--out-dir', target.subdir, '-o', target.get_filename()]
flags += ['--dep-info', depfile]
+ orderdeps = [os.path.join(t.subdir, t.get_filename()) for t in target.link_targets]
+ linkdirs = {}
+ for d in target.link_targets:
+ linkdirs[d.subdir] = True
+ for d in linkdirs.keys():
+ if d == '':
+ d = '.'
+ flags += ['-L', d]
element = NinjaBuildElement(target_name, 'rust_COMPILER', relsrc)
+ if len(orderdeps) > 0:
+ element.add_orderdep(orderdeps)
element.add_item('FLAGS', flags)
element.add_item('targetdep', depfile)
element.write(outfile)
diff --git a/test cases/rust/2 sharedlib/meson.build b/test cases/rust/2 sharedlib/meson.build
index 88a0623..563ef15 100644
--- a/test cases/rust/2 sharedlib/meson.build
+++ b/test cases/rust/2 sharedlib/meson.build
@@ -1,3 +1,5 @@
project('rust shared library', 'rust')
l = shared_library('stuff', 'stuff.rs')
+e = executable('prog', 'prog.rs', link_with : l)
+test('linktest', e)
diff --git a/test cases/rust/2 sharedlib/prog.rs b/test cases/rust/2 sharedlib/prog.rs
new file mode 100644
index 0000000..fbf3181
--- /dev/null
+++ b/test cases/rust/2 sharedlib/prog.rs
@@ -0,0 +1,3 @@
+extern crate stuff;
+
+fn main() { println!("printing: {}", stuff::explore()); }