rustc: Find crates by matching the name metadata

This commit is contained in:
Haitao Li 2011-10-30 17:40:35 +08:00 committed by Brian Anderson
parent 329f045d4c
commit 16dad84f7b
1 changed files with 9 additions and 22 deletions

View File

@ -119,37 +119,24 @@ fn find_library_crate(sess: session::session, ident: ast::ident,
attr::require_unique_names(sess, metas); attr::require_unique_names(sess, metas);
let crate_name = // Metadata "name" will be used to find the crate. Use `ident'
{ // as "name" if the attribute is not explicitly specified
let name_items = attr::find_meta_items_by_name(metas, "name"); if !attr::contains_name(metas, "name") {
alt vec::last(name_items) { metas += [attr::mk_name_value_item_str("name", ident)];
some(i) { }
alt attr::get_meta_item_value_str(i) {
some(n) { n }
// FIXME: Probably want a warning here since the user
// is using the wrong type of meta item
_ { ident }
}
}
none. { ident }
}
};
let nn = default_native_lib_naming(sess, sess.get_opts().static); let nn = default_native_lib_naming(sess, sess.get_opts().static);
let x = let x =
find_library_crate_aux(nn, crate_name, metas, find_library_crate_aux(nn, metas, sess.filesearch());
sess.filesearch());
if x != none || sess.get_opts().static { ret x; } if x != none || sess.get_opts().static { ret x; }
let nn2 = default_native_lib_naming(sess, true); let nn2 = default_native_lib_naming(sess, true);
ret find_library_crate_aux(nn2, crate_name, metas, ret find_library_crate_aux(nn2, metas, sess.filesearch());
sess.filesearch());
} }
fn find_library_crate_aux(nn: {prefix: str, suffix: str}, crate_name: str, fn find_library_crate_aux(nn: {prefix: str, suffix: str},
metas: [@ast::meta_item], metas: [@ast::meta_item],
filesearch: filesearch::filesearch) -> filesearch: filesearch::filesearch) ->
option::t<{ident: str, data: @[u8]}> { option::t<{ident: str, data: @[u8]}> {
let prefix: str = nn.prefix + crate_name; let prefix: str = nn.prefix;
let suffix: str = nn.suffix; let suffix: str = nn.suffix;
ret filesearch::search(filesearch, { |path| ret filesearch::search(filesearch, { |path|