mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Make addl_lib_search_paths a HashSet (Closes #7718).
This commit is contained in:
parent
950add4e49
commit
a239c0ed66
@ -757,7 +757,9 @@ pub fn build_session_options(binary: @str,
|
|||||||
|
|
||||||
let statik = debugging_opts & session::statik != 0;
|
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 = matches.opt_str("linker");
|
||||||
let linker_args = matches.opt_strs("link-args").flat_map( |a| {
|
let linker_args = matches.opt_strs("link-args").flat_map( |a| {
|
||||||
a.split_iter(' ').map(|arg| arg.to_owned()).collect()
|
a.split_iter(' ').map(|arg| arg.to_owned()).collect()
|
||||||
|
@ -29,7 +29,7 @@ use syntax::parse::token;
|
|||||||
use syntax;
|
use syntax;
|
||||||
|
|
||||||
use std::int;
|
use std::int;
|
||||||
use std::hashmap::HashMap;
|
use std::hashmap::{HashMap,HashSet};
|
||||||
|
|
||||||
#[deriving(Eq)]
|
#[deriving(Eq)]
|
||||||
pub enum Os { OsWin32, OsMacos, OsLinux, OsAndroid, OsFreebsd, }
|
pub enum Os { OsWin32, OsMacos, OsLinux, OsAndroid, OsFreebsd, }
|
||||||
@ -158,9 +158,9 @@ pub struct options {
|
|||||||
save_temps: bool,
|
save_temps: bool,
|
||||||
jit: bool,
|
jit: bool,
|
||||||
output_type: back::link::output_type,
|
output_type: back::link::output_type,
|
||||||
addl_lib_search_paths: @mut ~[Path], // This is mutable for rustpkg, which
|
addl_lib_search_paths: @mut HashSet<Path>, // This is mutable for rustpkg, which
|
||||||
// updates search paths based on the
|
// updates search paths based on the
|
||||||
// parsed code
|
// parsed code
|
||||||
linker: Option<~str>,
|
linker: Option<~str>,
|
||||||
linker_args: ~[~str],
|
linker_args: ~[~str],
|
||||||
maybe_sysroot: Option<@Path>,
|
maybe_sysroot: Option<@Path>,
|
||||||
@ -366,7 +366,7 @@ pub fn basic_options() -> @options {
|
|||||||
save_temps: false,
|
save_temps: false,
|
||||||
jit: false,
|
jit: false,
|
||||||
output_type: link::output_type_exe,
|
output_type: link::output_type_exe,
|
||||||
addl_lib_search_paths: @mut ~[],
|
addl_lib_search_paths: @mut HashSet::new(),
|
||||||
linker: None,
|
linker: None,
|
||||||
linker_args: ~[],
|
linker_args: ~[],
|
||||||
maybe_sysroot: None,
|
maybe_sysroot: None,
|
||||||
|
@ -40,11 +40,11 @@ pub trait FileSearch {
|
|||||||
|
|
||||||
pub fn mk_filesearch(maybe_sysroot: &Option<@Path>,
|
pub fn mk_filesearch(maybe_sysroot: &Option<@Path>,
|
||||||
target_triple: &str,
|
target_triple: &str,
|
||||||
addl_lib_search_paths: @mut ~[Path])
|
addl_lib_search_paths: @mut HashSet<Path>)
|
||||||
-> @FileSearch {
|
-> @FileSearch {
|
||||||
struct FileSearchImpl {
|
struct FileSearchImpl {
|
||||||
sysroot: @Path,
|
sysroot: @Path,
|
||||||
addl_lib_search_paths: @mut ~[Path],
|
addl_lib_search_paths: @mut HashSet<Path>,
|
||||||
target_triple: ~str
|
target_triple: ~str
|
||||||
}
|
}
|
||||||
impl FileSearch for FileSearchImpl {
|
impl FileSearch for FileSearchImpl {
|
||||||
|
@ -20,7 +20,7 @@ use syntax;
|
|||||||
|
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::local_data;
|
use std::local_data;
|
||||||
use std::hashmap::HashMap;
|
use std::hashmap::{HashMap,HashSet};
|
||||||
|
|
||||||
use visit_ast::RustdocVisitor;
|
use visit_ast::RustdocVisitor;
|
||||||
use clean;
|
use clean;
|
||||||
@ -39,7 +39,7 @@ pub struct CrateAnalysis {
|
|||||||
|
|
||||||
/// Parses, resolves, and typechecks the given crate
|
/// Parses, resolves, and typechecks the given crate
|
||||||
fn get_ast_and_resolve(cpath: &Path,
|
fn get_ast_and_resolve(cpath: &Path,
|
||||||
libs: ~[Path]) -> (DocContext, CrateAnalysis) {
|
libs: HashSet<Path>) -> (DocContext, CrateAnalysis) {
|
||||||
use syntax::codemap::dummy_spanned;
|
use syntax::codemap::dummy_spanned;
|
||||||
use rustc::driver::driver::{file_input, build_configuration,
|
use rustc::driver::driver::{file_input, build_configuration,
|
||||||
phase_1_parse_input,
|
phase_1_parse_input,
|
||||||
@ -89,7 +89,7 @@ fn get_ast_and_resolve(cpath: &Path,
|
|||||||
CrateAnalysis { reexports: reexports, exported_items: exported_items });
|
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, analysis) = get_ast_and_resolve(path, libs);
|
||||||
let ctxt = @ctxt;
|
let ctxt = @ctxt;
|
||||||
debug!("defmap:");
|
debug!("defmap:");
|
||||||
|
@ -198,7 +198,7 @@ fn rust_input(cratefile: &str, matches: &getopts::Matches) -> Output {
|
|||||||
info!("starting to run rustc");
|
info!("starting to run rustc");
|
||||||
let (crate, analysis) = do std::task::try {
|
let (crate, analysis) = do std::task::try {
|
||||||
let cr = cr.take();
|
let cr = cr.take();
|
||||||
core::run_core(libs.take(), &cr)
|
core::run_core(libs.take().move_iter().collect(), &cr)
|
||||||
}.unwrap();
|
}.unwrap();
|
||||||
info!("finished with rustc");
|
info!("finished with rustc");
|
||||||
local_data::set(analysiskey, analysis);
|
local_data::set(analysiskey, analysis);
|
||||||
|
@ -10,10 +10,12 @@
|
|||||||
|
|
||||||
// Context data structure used by rustpkg
|
// Context data structure used by rustpkg
|
||||||
|
|
||||||
use std::os;
|
|
||||||
use extra::workcache;
|
use extra::workcache;
|
||||||
use rustc::driver::session::{OptLevel, No};
|
use rustc::driver::session::{OptLevel, No};
|
||||||
|
|
||||||
|
use std::hashmap::HashSet;
|
||||||
|
use std::os;
|
||||||
|
|
||||||
#[deriving(Clone)]
|
#[deriving(Clone)]
|
||||||
pub struct Context {
|
pub struct Context {
|
||||||
// Config strings that the user passed in with --cfg
|
// Config strings that the user passed in with --cfg
|
||||||
@ -60,7 +62,7 @@ impl BuildContext {
|
|||||||
self.context.add_library_path(p);
|
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()
|
self.context.rustc_flags.additional_library_paths.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,7 +98,7 @@ pub struct RustcFlags {
|
|||||||
target_cpu: Option<~str>,
|
target_cpu: Option<~str>,
|
||||||
// Additional library directories, which get passed with the -L flag
|
// Additional library directories, which get passed with the -L flag
|
||||||
// This can't be set with a rustpkg flag, only from package scripts
|
// 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
|
// Any -Z features
|
||||||
experimental_features: Option<~[~str]>
|
experimental_features: Option<~[~str]>
|
||||||
}
|
}
|
||||||
@ -163,7 +165,7 @@ impl Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_library_path(&mut self, p: Path) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +229,7 @@ impl RustcFlags {
|
|||||||
save_temps: false,
|
save_temps: false,
|
||||||
target: None,
|
target: None,
|
||||||
target_cpu: None,
|
target_cpu: None,
|
||||||
additional_library_paths: ~[],
|
additional_library_paths: HashSet::new(),
|
||||||
experimental_features: None
|
experimental_features: None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ extern mod rustc;
|
|||||||
extern mod syntax;
|
extern mod syntax;
|
||||||
|
|
||||||
use std::{os, result, run, str, task};
|
use std::{os, result, run, str, task};
|
||||||
|
use std::hashmap::HashSet;
|
||||||
pub use std::path::Path;
|
pub use std::path::Path;
|
||||||
|
|
||||||
use extra::workcache;
|
use extra::workcache;
|
||||||
@ -840,7 +841,8 @@ pub fn main_args(args: &[~str]) -> int {
|
|||||||
save_temps: save_temps,
|
save_temps: save_temps,
|
||||||
target: target,
|
target: target,
|
||||||
target_cpu: target_cpu,
|
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
|
experimental_features: experimental_features
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -285,11 +285,7 @@ pub fn compile_input(context: &BuildContext,
|
|||||||
debug!("a dependency: {}", p.display());
|
debug!("a dependency: {}", p.display());
|
||||||
// Pass the directory containing a dependency
|
// Pass the directory containing a dependency
|
||||||
// as an additional lib search path
|
// as an additional lib search path
|
||||||
if !addl_lib_search_paths.contains(&p) {
|
addl_lib_search_paths.insert(p);
|
||||||
// Might be inefficient, but this set probably
|
|
||||||
// won't get too large -- tjc
|
|
||||||
addl_lib_search_paths.push(p);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Inject the link attributes so we get the right package name and version
|
// Inject the link attributes so we get the right package name and version
|
||||||
|
17
src/test/run-pass/duplicated-external-mods.rs
Normal file
17
src/test/run-pass/duplicated-external-mods.rs
Normal file
@ -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() { }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user