about summary refs log tree commit diff
path: root/src/comp/driver
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-06-29 11:12:13 -0700
committerBrian Anderson <banderson@mozilla.com>2011-06-29 14:35:39 -0700
commite130e7b5981d9de4fe5d3c4479356eed88c09ef9 (patch)
tree500e51fb4636113cd5f4ab7ee35d29f10bc87375 /src/comp/driver
parente60cb9197f4404684206e282c1d8391fd7b3e26c (diff)
downloadrust-e130e7b5981d9de4fe5d3c4479356eed88c09ef9.tar.gz
rust-e130e7b5981d9de4fe5d3c4479356eed88c09ef9.zip
Display an error when linking fails
Diffstat (limited to 'src/comp/driver')
-rw-r--r--src/comp/driver/rustc.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index 7c035f84ae8..aeb3467a2d9 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -419,7 +419,13 @@ fn main(vec[str] args) {
             }
         }
 
-        gcc_args += sess.get_used_crate_files();
+        for (str cratepath in sess.get_used_crate_files()) {
+            auto dir = fs::dirname(cratepath);
+            if (dir != "") {
+                gcc_args += ["-L" + dir];
+            }
+            gcc_args += [fs::basename(cratepath)];
+        }
 
         auto used_libs = sess.get_used_libraries();
         for (str l in used_libs) {
@@ -435,7 +441,12 @@ fn main(vec[str] args) {
         }
         // We run 'gcc' here
 
-        run::run_program(prog, gcc_args);
+        auto err_code = run::run_program(prog, gcc_args);
+        if (0 != err_code) {
+            sess.err(#fmt("linking with gcc failed with code %d", err_code));
+            sess.note(#fmt("gcc arguments: %s", str::connect(gcc_args, " ")));
+            sess.abort_if_errors();
+        }
         // Clean up on Darwin
 
         if (sess.get_targ_cfg().os == session::os_macos) {