Skip to content

Commit e746ed6

Browse files
committed
rustc: Add cargo's lib directory to search paths
1 parent 54cf0e9 commit e746ed6

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/cargo/cargo.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std;
55

66
import rustc::syntax::{ast, codemap, visit};
77
import rustc::syntax::parse::parser;
8+
import rustc::util::filesearch::get_cargo_root;
89

910
import std::fs;
1011
import std::generic_os;
@@ -300,14 +301,9 @@ fn load_source_packages(&c: cargo, &src: source) {
300301
}
301302

302303
fn configure() -> cargo {
303-
let p = alt generic_os::getenv("CARGO_ROOT") {
304-
some(_p) { _p }
305-
none. {
306-
alt generic_os::getenv("HOME") {
307-
some(_q) { fs::connect(_q, ".cargo") }
308-
none. { fail "no CARGO_ROOT or HOME"; }
309-
}
310-
}
304+
let p = alt get_cargo_root() {
305+
result::ok(p) { p }
306+
result::err(e) { fail e }
311307
};
312308

313309
let sources = map::new_str_hash::<source>();

src/comp/util/filesearch.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import core::option;
66
import std::fs;
77
import vec;
88
import std::os;
9+
import result;
10+
import std::generic_os;
911

1012
export filesearch;
1113
export mk_filesearch;
1214
export pick;
1315
export pick_file;
1416
export search;
1517
export relative_target_lib_path;
18+
export get_cargo_root;
1619

1720
type pick<T> = block(path: fs::path) -> option::t<T>;
1821

@@ -38,6 +41,10 @@ fn mk_filesearch(maybe_sysroot: option::t<fs::path>,
3841
fn lib_search_paths() -> [fs::path] {
3942
addl_lib_search_paths
4043
+ [make_target_lib_path(sysroot, target_triple)]
44+
+ alt get_cargo_lib_path() {
45+
result::ok(p) { [p] }
46+
result::err(p) { [] }
47+
}
4148
}
4249

4350
fn get_target_lib_path() -> fs::path {
@@ -99,3 +106,21 @@ fn get_sysroot(maybe_sysroot: option::t<fs::path>) -> fs::path {
99106
option::none. { get_default_sysroot() }
100107
}
101108
}
109+
110+
fn get_cargo_root() -> result::t<fs::path, str> {
111+
alt generic_os::getenv("CARGO_ROOT") {
112+
some(_p) { result::ok(_p) }
113+
none. {
114+
alt generic_os::getenv("HOME") {
115+
some(_q) { result::ok(fs::connect(_q, ".cargo")) }
116+
none. { result::err("no CARGO_ROOT or HOME") }
117+
}
118+
}
119+
}
120+
}
121+
122+
fn get_cargo_lib_path() -> result::t<fs::path, str> {
123+
result::chain(get_cargo_root()) { |p|
124+
result::ok(fs::connect(p, "lib"))
125+
}
126+
}

0 commit comments

Comments
 (0)