]> git.lizzy.rs Git - rust.git/commitdiff
rustc: Add cargo's lib directory to search paths
authorBrian Anderson <banderson@mozilla.com>
Fri, 6 Jan 2012 00:03:28 +0000 (16:03 -0800)
committerBrian Anderson <banderson@mozilla.com>
Fri, 6 Jan 2012 00:03:31 +0000 (16:03 -0800)
src/cargo/cargo.rs
src/comp/util/filesearch.rs

index f3eaacb2ba3bf397a15b5bdf923ecc68877f7729..2e119cdb7dd80c7efcfdff8623005f2e0285eb41 100644 (file)
@@ -5,6 +5,7 @@
 
 import rustc::syntax::{ast, codemap, visit};
 import rustc::syntax::parse::parser;
+import rustc::util::filesearch::get_cargo_root;
 
 import std::fs;
 import std::generic_os;
@@ -300,14 +301,9 @@ fn load_source_packages(&c: cargo, &src: source) {
 }
 
 fn configure() -> cargo {
-    let p = alt generic_os::getenv("CARGO_ROOT") {
-        some(_p) { _p }
-        none. {
-            alt generic_os::getenv("HOME") {
-                some(_q) { fs::connect(_q, ".cargo") }
-                none. { fail "no CARGO_ROOT or HOME"; }
-            }
-        }
+    let p = alt get_cargo_root() {
+      result::ok(p) { p }
+      result::err(e) { fail e }
     };
 
     let sources = map::new_str_hash::<source>();
index ce8a1d7fde05b0c0ad98acf656e15fb300f455a7..e4ac615d97314ca5cdf30b762554a3b8a3c926f5 100644 (file)
@@ -6,6 +6,8 @@
 import std::fs;
 import vec;
 import std::os;
+import result;
+import std::generic_os;
 
 export filesearch;
 export mk_filesearch;
@@ -13,6 +15,7 @@
 export pick_file;
 export search;
 export relative_target_lib_path;
+export get_cargo_root;
 
 type pick<T> = block(path: fs::path) -> option::t<T>;
 
@@ -38,6 +41,10 @@ fn sysroot() -> fs::path { sysroot }
         fn lib_search_paths() -> [fs::path] {
             addl_lib_search_paths
                 + [make_target_lib_path(sysroot, target_triple)]
+                + alt get_cargo_lib_path() {
+                  result::ok(p) { [p] }
+                  result::err(p) { [] }
+                }
         }
 
         fn get_target_lib_path() -> fs::path {
@@ -99,3 +106,21 @@ fn get_sysroot(maybe_sysroot: option::t<fs::path>) -> fs::path {
       option::none. { get_default_sysroot() }
     }
 }
+
+fn get_cargo_root() -> result::t<fs::path, str> {
+    alt generic_os::getenv("CARGO_ROOT") {
+        some(_p) { result::ok(_p) }
+        none. {
+            alt generic_os::getenv("HOME") {
+                some(_q) { result::ok(fs::connect(_q, ".cargo")) }
+                none. { result::err("no CARGO_ROOT or HOME") }
+            }
+        }
+    }
+}
+
+fn get_cargo_lib_path() -> result::t<fs::path, str> {
+    result::chain(get_cargo_root()) { |p|
+        result::ok(fs::connect(p, "lib"))
+    }
+}
\ No newline at end of file