Skip to content

Commit

Permalink
auto merge of #10089 : pythonesque/rust/issue-7718, r=catamorphism
Browse files Browse the repository at this point in the history
Seems pretty straightforward, but please let me know if I'm doing something wrong or the test needs to be rewritten.
  • Loading branch information
bors committed Oct 28, 2013
2 parents 560d999 + a239c0e commit 0a9a706
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 23 deletions.
4 changes: 3 additions & 1 deletion src/librustc/driver/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -757,7 +757,9 @@ pub fn build_session_options(binary: @str,

let statik = debugging_opts & session::statik != 0;

let addl_lib_search_paths = matches.opt_strs("L").map(|s| Path::new(s.as_slice()));
let addl_lib_search_paths = matches.opt_strs("L").map(|s| {
Path::new(s.as_slice())
}).move_iter().collect();
let linker = matches.opt_str("linker");
let linker_args = matches.opt_strs("link-args").flat_map( |a| {
a.split_iter(' ').map(|arg| arg.to_owned()).collect()
Expand Down
10 changes: 5 additions & 5 deletions src/librustc/driver/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use syntax::parse::token;
use syntax;

use std::int;
use std::hashmap::HashMap;
use std::hashmap::{HashMap,HashSet};

#[deriving(Eq)]
pub enum Os { OsWin32, OsMacos, OsLinux, OsAndroid, OsFreebsd, }
Expand Down Expand Up @@ -158,9 +158,9 @@ pub struct options {
save_temps: bool,
jit: bool,
output_type: back::link::output_type,
addl_lib_search_paths: @mut ~[Path], // This is mutable for rustpkg, which
// updates search paths based on the
// parsed code
addl_lib_search_paths: @mut HashSet<Path>, // This is mutable for rustpkg, which
// updates search paths based on the
// parsed code
linker: Option<~str>,
linker_args: ~[~str],
maybe_sysroot: Option<@Path>,
Expand Down Expand Up @@ -366,7 +366,7 @@ pub fn basic_options() -> @options {
save_temps: false,
jit: false,
output_type: link::output_type_exe,
addl_lib_search_paths: @mut ~[],
addl_lib_search_paths: @mut HashSet::new(),
linker: None,
linker_args: ~[],
maybe_sysroot: None,
Expand Down
4 changes: 2 additions & 2 deletions src/librustc/metadata/filesearch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ pub trait FileSearch {

pub fn mk_filesearch(maybe_sysroot: &Option<@Path>,
target_triple: &str,
addl_lib_search_paths: @mut ~[Path])
addl_lib_search_paths: @mut HashSet<Path>)
-> @FileSearch {
struct FileSearchImpl {
sysroot: @Path,
addl_lib_search_paths: @mut ~[Path],
addl_lib_search_paths: @mut HashSet<Path>,
target_triple: ~str
}
impl FileSearch for FileSearchImpl {
Expand Down
6 changes: 3 additions & 3 deletions src/librustdoc/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use syntax;

use std::os;
use std::local_data;
use std::hashmap::HashMap;
use std::hashmap::{HashMap,HashSet};

use visit_ast::RustdocVisitor;
use clean;
Expand All @@ -39,7 +39,7 @@ pub struct CrateAnalysis {

/// Parses, resolves, and typechecks the given crate
fn get_ast_and_resolve(cpath: &Path,
libs: ~[Path]) -> (DocContext, CrateAnalysis) {
libs: HashSet<Path>) -> (DocContext, CrateAnalysis) {
use syntax::codemap::dummy_spanned;
use rustc::driver::driver::{file_input, build_configuration,
phase_1_parse_input,
Expand Down Expand Up @@ -89,7 +89,7 @@ fn get_ast_and_resolve(cpath: &Path,
CrateAnalysis { reexports: reexports, exported_items: exported_items });
}

pub fn run_core (libs: ~[Path], path: &Path) -> (clean::Crate, CrateAnalysis) {
pub fn run_core (libs: HashSet<Path>, path: &Path) -> (clean::Crate, CrateAnalysis) {
let (ctxt, analysis) = get_ast_and_resolve(path, libs);
let ctxt = @ctxt;
debug!("defmap:");
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/rustdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ fn rust_input(cratefile: &str, matches: &getopts::Matches) -> Output {
info!("starting to run rustc");
let (crate, analysis) = do std::task::try {
let cr = cr.take();
core::run_core(libs.take(), &cr)
core::run_core(libs.take().move_iter().collect(), &cr)
}.unwrap();
info!("finished with rustc");
local_data::set(analysiskey, analysis);
Expand Down
12 changes: 7 additions & 5 deletions src/librustpkg/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@

// Context data structure used by rustpkg

use std::os;
use extra::workcache;
use rustc::driver::session::{OptLevel, No};

use std::hashmap::HashSet;
use std::os;

#[deriving(Clone)]
pub struct Context {
// Config strings that the user passed in with --cfg
Expand Down Expand Up @@ -60,7 +62,7 @@ impl BuildContext {
self.context.add_library_path(p);
}

pub fn additional_library_paths(&self) -> ~[Path] {
pub fn additional_library_paths(&self) -> HashSet<Path> {
self.context.rustc_flags.additional_library_paths.clone()
}
}
Expand Down Expand Up @@ -96,7 +98,7 @@ pub struct RustcFlags {
target_cpu: Option<~str>,
// Additional library directories, which get passed with the -L flag
// This can't be set with a rustpkg flag, only from package scripts
additional_library_paths: ~[Path],
additional_library_paths: HashSet<Path>,
// Any -Z features
experimental_features: Option<~[~str]>
}
Expand Down Expand Up @@ -163,7 +165,7 @@ impl Context {
}

pub fn add_library_path(&mut self, p: Path) {
self.rustc_flags.additional_library_paths.push(p);
self.rustc_flags.additional_library_paths.insert(p);
}
}

Expand Down Expand Up @@ -227,7 +229,7 @@ impl RustcFlags {
save_temps: false,
target: None,
target_cpu: None,
additional_library_paths: ~[],
additional_library_paths: HashSet::new(),
experimental_features: None
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/librustpkg/rustpkg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ extern mod rustc;
extern mod syntax;

use std::{os, result, run, str, task};
use std::hashmap::HashSet;
pub use std::path::Path;

use extra::workcache;
Expand Down Expand Up @@ -841,7 +842,8 @@ pub fn main_args(args: &[~str]) -> int {
save_temps: save_temps,
target: target,
target_cpu: target_cpu,
additional_library_paths: ~[], // No way to set this from the rustpkg command line
additional_library_paths:
HashSet::new(), // No way to set this from the rustpkg command line
experimental_features: experimental_features
};

Expand Down
6 changes: 1 addition & 5 deletions src/librustpkg/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,11 +285,7 @@ pub fn compile_input(context: &BuildContext,
debug!("a dependency: {}", p.display());
// Pass the directory containing a dependency
// as an additional lib search path
if !addl_lib_search_paths.contains(&p) {
// Might be inefficient, but this set probably
// won't get too large -- tjc
addl_lib_search_paths.push(p);
}
addl_lib_search_paths.insert(p);
});

// Inject the link attributes so we get the right package name and version
Expand Down
17 changes: 17 additions & 0 deletions src/test/run-pass/duplicated-external-mods.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright 2013 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.

// xfail-fast
// aux-build:anon-extern-mod-cross-crate-1.rs
// aux-build:anon-extern-mod-cross-crate-1.rs
extern mod anonexternmod;

pub fn main() { }

0 comments on commit 0a9a706

Please sign in to comment.