diff options
| -rw-r--r-- | src/librustc/metadata/loader.rs | 16 | ||||
| -rw-r--r-- | src/test/run-make/symlinked-libraries/Makefile | 7 | ||||
| -rw-r--r-- | src/test/run-make/symlinked-libraries/bar.rs | 15 | ||||
| -rw-r--r-- | src/test/run-make/symlinked-libraries/foo.rs | 13 |
4 files changed, 49 insertions, 2 deletions
diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index e7d97f03913..1f5b76953dc 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -67,6 +67,18 @@ pub struct ArchiveMetadata { priv data: &'static [u8], } +// FIXME(#11857) this should be a "real" realpath +fn realpath(p: &Path) -> Path { + use std::os; + use std::io::fs; + + let path = os::make_absolute(p); + match fs::readlink(&path) { + Ok(p) => p, + Err(..) => path + } +} + impl Context { pub fn load_library_crate(&self, root_ident: Option<~str>) -> Library { match self.find_library_crate() { @@ -121,7 +133,7 @@ impl Context { (HashSet::new(), HashSet::new()) }); let (ref mut rlibs, _) = *slot; - rlibs.insert(path.clone()); + rlibs.insert(realpath(path)); FileMatches } None => { @@ -138,7 +150,7 @@ impl Context { (HashSet::new(), HashSet::new()) }); let (_, ref mut dylibs) = *slot; - dylibs.insert(path.clone()); + dylibs.insert(realpath(path)); FileMatches } None => { diff --git a/src/test/run-make/symlinked-libraries/Makefile b/src/test/run-make/symlinked-libraries/Makefile new file mode 100644 index 00000000000..45ef241c28f --- /dev/null +++ b/src/test/run-make/symlinked-libraries/Makefile @@ -0,0 +1,7 @@ +-include ../tools.mk + +all: + $(RUSTC) foo.rs + mkdir -p $(TMPDIR)/other + ln -nsf $(TMPDIR)/$(call DYLIB_GLOB,foo) $(TMPDIR)/other + $(RUSTC) bar.rs -L $(TMPDIR)/other diff --git a/src/test/run-make/symlinked-libraries/bar.rs b/src/test/run-make/symlinked-libraries/bar.rs new file mode 100644 index 00000000000..73596f93f56 --- /dev/null +++ b/src/test/run-make/symlinked-libraries/bar.rs @@ -0,0 +1,15 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate foo; + +fn main() { + foo::bar(); +} diff --git a/src/test/run-make/symlinked-libraries/foo.rs b/src/test/run-make/symlinked-libraries/foo.rs new file mode 100644 index 00000000000..9fbe36f0376 --- /dev/null +++ b/src/test/run-make/symlinked-libraries/foo.rs @@ -0,0 +1,13 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[crate_type = "dylib"]; + +pub fn bar() {} |
