Skip to content

Commit

Permalink
auto merge of #11041 : cmr/rust/pkgid_changes, r=cmr,metajack
Browse files Browse the repository at this point in the history
  • Loading branch information
bors committed Dec 19, 2013
2 parents e86cdaf + b25a052 commit d760f99
Show file tree
Hide file tree
Showing 65 changed files with 138 additions and 69 deletions.
1 change: 1 addition & 0 deletions src/etc/combine-tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def scrub(b):
c.write(
"""
// AUTO-GENERATED FILE: DO NOT EDIT
#[crate_id=\"run_pass_stage2#0.1\"];
#[pkgid=\"run_pass_stage2#0.1\"];
#[link(name=\"run_pass_stage2\", vers=\"0.1\")];
#[feature(globs, macro_rules, struct_variant, managed_boxes)];
Expand Down
2 changes: 2 additions & 0 deletions src/libextra/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ Rust extras are part of the standard Rust distribution.
*/

// NOTE: remove after snapshot
#[pkgid = "extra#0.9-pre"];
#[crate_id = "extra#0.9-pre"];
#[comment = "Rust extras"];
#[license = "MIT/ASL2"];
#[crate_type = "rlib"];
Expand Down
22 changes: 14 additions & 8 deletions src/librustc/back/link.rs
Original file line number Diff line number Diff line change
Expand Up @@ -751,14 +751,10 @@ fn is_writeable(p: &Path) -> bool {
}
}

fn link_binary_output(sess: Session,
trans: &CrateTranslation,
output: session::OutputStyle,
obj_filename: &Path,
out_filename: &Path,
lm: &LinkMeta) -> Path {
pub fn filename_for_input(sess: &Session, output: session::OutputStyle, lm: &LinkMeta,
out_filename: &Path) -> Path {
let libname = output_lib_filename(lm);
let out_filename = match output {
match output {
session::OutputRlib => {
out_filename.with_filename(format!("lib{}.rlib", libname))
}
Expand All @@ -776,7 +772,17 @@ fn link_binary_output(sess: Session,
out_filename.with_filename(format!("lib{}.a", libname))
}
session::OutputExecutable => out_filename.clone(),
};
}

}

fn link_binary_output(sess: Session,
trans: &CrateTranslation,
output: session::OutputStyle,
obj_filename: &Path,
out_filename: &Path,
lm: &LinkMeta) -> Path {
let out_filename = filename_for_input(&sess, output, lm, out_filename);

// Make sure the output and obj_filename are both writeable.
// Mac, FreeBSD, and Windows system linkers check this already --
Expand Down
48 changes: 46 additions & 2 deletions src/librustc/driver/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -446,13 +446,49 @@ pub fn compile_input(sess: Session, cfg: ast::CrateConfig, input: &input,
let (outputs, trans) = {
let expanded_crate = {
let crate = phase_1_parse_input(sess, cfg.clone(), input);
let (crate_id, crate_name, crate_file_name) = sess.opts.print_metas;
// these nasty nested conditions are to avoid doing extra work
if crate_id || crate_name || crate_file_name {
let t_outputs = build_output_filenames(input, outdir, output, crate.attrs, sess);
if crate_id || crate_name {
let pkgid = match attr::find_pkgid(crate.attrs) {
Some(pkgid) => pkgid,
None => fail!("No crate_id and --crate-id or --crate-name requested")
};
if crate_id {
println(pkgid.to_str());
}
if crate_name {
println(pkgid.name);
}
}

if crate_file_name {
let lm = link::build_link_meta(sess, &crate, &t_outputs.obj_filename,
&mut ::util::sha2::Sha256::new());
// if the vector is empty we default to OutputExecutable.
let style = sess.opts.outputs.get_opt(0).unwrap_or(&OutputExecutable);
let fname = link::filename_for_input(&sess, *style, &lm,
&t_outputs.out_filename);
println!("{}", fname.display());

// we already maybe printed the first one, so skip it
for style in sess.opts.outputs.iter().skip(1) {
let fname = link::filename_for_input(&sess, *style, &lm,
&t_outputs.out_filename);
println!("{}", fname.display());
}
}

return;
}
if stop_after_phase_1(sess) { return; }
phase_2_configure_and_expand(sess, cfg, crate)
};
let analysis = phase_3_run_analysis_passes(sess, &expanded_crate);
if stop_after_phase_3(sess) { return; }
let outputs = build_output_filenames(input, outdir, output,
expanded_crate.attrs, sess);
let analysis = phase_3_run_analysis_passes(sess, &expanded_crate);
if stop_after_phase_3(sess) { return; }
let trans = phase_4_translate_to_llvm(sess, expanded_crate,
&analysis, outputs);
(outputs, trans)
Expand Down Expand Up @@ -789,6 +825,9 @@ pub fn build_session_options(binary: @str,
}).collect()
}
};
let print_metas = (matches.opt_present("crate-id"),
matches.opt_present("crate-name"),
matches.opt_present("crate-file-name"));

let sopts = @session::options {
outputs: outputs,
Expand Down Expand Up @@ -817,6 +856,7 @@ pub fn build_session_options(binary: @str,
debugging_opts: debugging_opts,
android_cross_path: android_cross_path,
write_dependency_info: write_dependency_info,
print_metas: print_metas,
};
return sopts;
}
Expand Down Expand Up @@ -897,6 +937,10 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] {
optflag("", "dylib", "Compile a dynamic library crate"),
optopt("", "linker", "Program to use for linking instead of the default.", "LINKER"),
optopt("", "ar", "Program to use for managing archives instead of the default.", "AR"),
optflag("", "crate-id", "Output the crate id and exit"),
optflag("", "crate-name", "Output the crate name and exit"),
optflag("", "crate-file-name", "Output the file(s) that would be written if compilation \
continued and exit"),
optmulti("", "link-args", "FLAGS is a space-separated list of flags
passed to the linker", "FLAGS"),
optflag("", "ls", "List the symbols defined by a library crate"),
Expand Down
5 changes: 4 additions & 1 deletion src/librustc/driver/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,10 @@ pub struct options {
no_trans: bool,
debugging_opts: uint,
android_cross_path: Option<~str>,
// Whether to write .d dependency files
/// Whether to write .d dependency files
write_dependency_info: bool,
/// Crate id-related things to maybe print. It's (crate_id, crate_name, crate_file_name).
print_metas: (bool, bool, bool),
}

pub struct crate_metadata {
Expand Down Expand Up @@ -396,6 +398,7 @@ pub fn basic_options() -> @options {
debugging_opts: 0u,
android_cross_path: None,
write_dependency_info: false,
print_metas: (false, false, false),
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/librustc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// NOTE: remove after snapshot
#[pkgid = "rustc#0.9-pre"];
#[crate_id = "rustc#0.9-pre"];
#[comment = "The Rust compiler"];
#[license = "MIT/ASL2"];
#[crate_type = "dylib"];
Expand Down
4 changes: 2 additions & 2 deletions src/librustc/metadata/encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1499,13 +1499,13 @@ fn synthesize_crate_attrs(ecx: &EncodeContext,

attr::mk_attr(
attr::mk_name_value_item_str(
@"pkgid",
@"crate_id",
ecx.link_meta.pkgid.to_str().to_managed()))
}

let mut attrs = ~[];
for attr in crate.attrs.iter() {
if "pkgid" != attr.name() {
if "crate_id" != attr.name() {
attrs.push(*attr);
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/librustc/middle/lint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,8 @@ fn check_heap_item(cx: &Context, it: &ast::item) {
}

static crate_attrs: &'static [&'static str] = &[
"crate_type", "feature", "no_uv", "no_main", "no_std", "pkgid",
// NOTE: remove pkgid after snapshot
"crate_type", "feature", "no_uv", "no_main", "no_std", "pkgid", "crate_id",
"desc", "comment", "license", "copyright", // not used in rustc now
];

Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/clean.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ impl Clean<Crate> for visit_ast::RustdocVisitor {
Crate {
name: match find_pkgid(self.attrs) {
Some(n) => n.name,
None => fail!("rustdoc requires a `pkgid` crate attribute"),
None => fail!("rustdoc requires a `crate_id` crate attribute"),
},
module: Some(self.module.clean()),
externs: externs,
Expand Down
2 changes: 2 additions & 0 deletions src/librustdoc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// NOTE: remove after snapshot
#[pkgid = "rustdoc#0.9-pre"];
#[crate_id = "rustdoc#0.9-pre"];
#[desc = "rustdoc, the Rust documentation extractor"];
#[license = "MIT/ASL2"];
#[crate_type = "dylib"];
Expand Down
2 changes: 2 additions & 0 deletions src/librustpkg/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@

// rustpkg - a package manager and build system for Rust

// NOTE: remove after snapshot
#[pkgid = "rustpkg#0.9-pre"];
#[crate_id = "rustpkg#0.9-pre"];
#[license = "MIT/ASL2"];
#[crate_type = "dylib"];

Expand Down
6 changes: 3 additions & 3 deletions src/librustpkg/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1892,9 +1892,9 @@ fn pkgid_pointing_to_subdir() {
fs::mkdir_recursive(&foo_dir, io::UserRWX);
fs::mkdir_recursive(&bar_dir, io::UserRWX);
writeFile(&foo_dir.join("lib.rs"),
"#[pkgid=\"mockgh.neting.cc/mozilla/some_repo/extras/foo\"]; pub fn f() {}");
"#[crate_id=\"mockgh.neting.cc/mozilla/some_repo/extras/foo\"]; pub fn f() {}");
writeFile(&bar_dir.join("lib.rs"),
"#[pkgid=\"mockgh.neting.cc/mozilla/some_repo/extras/bar\"]; pub fn g() {}");
"#[crate_id=\"mockgh.neting.cc/mozilla/some_repo/extras/bar\"]; pub fn g() {}");

debug!("Creating a file in {}", workspace.display());
let testpkg_dir = workspace.join_many(["src", "testpkg-0.0"]);
Expand Down Expand Up @@ -2316,7 +2316,7 @@ fn find_sources_in_cwd() {
let source_dir = temp_dir.join("foo");
fs::mkdir_recursive(&source_dir, io::UserRWX);
writeFile(&source_dir.join("main.rs"),
"fn main() { let _x = (); }");
r#"#[crate_id="foo"]; fn main() { let _x = (); }"#);
command_line_test([~"install", ~"foo"], &source_dir);
assert_executable_exists(&source_dir.join(".rust"), "foo");
}
Expand Down
4 changes: 2 additions & 2 deletions src/librustpkg/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,10 +291,10 @@ pub fn compile_input(context: &BuildContext,
});

// Inject the pkgid attribute so we get the right package name and version
if !attr::contains_name(crate.attrs, "pkgid") {
if !attr::contains_name(crate.attrs, "crate_id") {
// FIXME (#9639): This needs to handle non-utf8 paths
let pkgid_attr =
attr::mk_name_value_item_str(@"pkgid",
attr::mk_name_value_item_str(@"crate_id",
format!("{}\\#{}",
pkg_id.path.as_str().unwrap(),
pkg_id.version.to_str()).to_managed());
Expand Down
2 changes: 2 additions & 0 deletions src/librustuv/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ via `close` and `delete` methods.
*/

// NOTE: remove after snapshot
#[pkgid = "rustuv#0.9-pre"];
#[crate_id = "rustuv#0.9-pre"];
#[license = "MIT/ASL2"];
#[crate_type = "rlib"];
#[crate_type = "dylib"];
Expand Down
2 changes: 2 additions & 0 deletions src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@
//!
//! use std::prelude::*;
// NOTE: remove after snapshot
#[pkgid = "std#0.9-pre"];
#[crate_id = "std#0.9-pre"];
#[comment = "The Rust standard library"];
#[license = "MIT/ASL2"];
#[crate_type = "rlib"];
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ pub fn find_linkage_metas(attrs: &[Attribute]) -> ~[@MetaItem] {
}

pub fn find_pkgid(attrs: &[Attribute]) -> Option<PkgId> {
match first_attr_value_str_by_name(attrs, "pkgid") {
match first_attr_value_str_by_name(attrs, "crate_id") {
None => None,
Some(id) => from_str::<PkgId>(id),
}
Expand Down
2 changes: 2 additions & 0 deletions src/libsyntax/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
* macros.
*/

// NOTE: remove pkgid after snapshot
#[pkgid = "syntax#0.9-pre"];
#[crate_id = "syntax#0.9-pre"];
#[license = "MIT/ASL2"];
#[crate_type = "dylib"];
#[crate_type = "rlib"];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/anon-extern-mod-cross-crate-1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="anonexternmod#0.1"];
#[crate_id="anonexternmod#0.1"];

use std::libc;

Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/cci_impl_lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="cci_impl_lib"];
#[crate_id="cci_impl_lib"];
// NOTE: remove after the next snapshot
#[link(name="cci_impl_lib", vers="0.0")];

Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/cci_iter_lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="cci_iter_lib"];
#[crate_id="cci_iter_lib"];
// NOTE: remove after the next snapshot
#[link(name="cci_iter_lib", vers="0.0")];

Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/cci_no_inline_lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="cci_no_inline_lib"];
#[crate_id="cci_no_inline_lib"];
// NOTE: remove after the next snapshot
#[link(name="cci_no_inline_lib", vers="0.0")];

Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crate-method-reexport-grrrrrrr2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// except according to those terms.

#[feature(managed_boxes)];
#[pkgid="crate_method_reexport_grrrrrrr2"];
#[crate_id="crate_method_reexport_grrrrrrr2"];
// NOTE: remove after the next snapshot
#[link(name = "crate_method_reexport_grrrrrrr2")];

Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve1-1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve1#0.1"];
#[crate_id="crateresolve1#0.1"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve1",
vers = "0.1")];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve1-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve1#0.2"];
#[crate_id="crateresolve1#0.2"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve1",
vers = "0.2")];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve1-3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve1#0.3"];
#[crate_id="crateresolve1#0.3"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve1",
vers = "0.3")];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve2-1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve2#0.1"];
#[crate_id="crateresolve2#0.1"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve2",
vers = "0.1")];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve2-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve2#0.2"];
#[crate_id="crateresolve2#0.2"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve2",
vers = "0.2")];
Expand Down
2 changes: 1 addition & 1 deletion src/test/auxiliary/crateresolve2-3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[pkgid="crateresolve2#0.3"];
#[crate_id="crateresolve2#0.3"];
// NOTE: remove after the next snapshot
#[link(name = "crateresolve2",
vers = "0.3")];
Expand Down
Loading

0 comments on commit d760f99

Please sign in to comment.