Skip to content

Make addl_lib_search_paths a HashSet (Closes #7718). #10089

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -840,7 +841,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() { }