Problem: Multiple crates with the same name can exist in one executable E.g. - `librustc` and `rustc` - rustc/src/libnum and vendor/num/ - bitflags-0.7.0 and bitflags-0.8.2 When a crate's source specfies `extern crate foo;`, - First `--extern foo=foo.hir` should be used (if present) - A search should be performed of the search directories for the specified crate name - This might consider wildcard matches Once the crate is located, that crate's unique specifier should be stored for if/when the referencer is referenced itself. Cases: - Loading from `extern crate` with `--extern` - Just use the specified path - Loading from `extern crate` and searching - Search for a suitable crate - Loading from a crate's extern list - Only use the specified crate TODO: How should the unique specifier be determined/obtained when loading? - It could just be the base filename (and do a path search for that exact filename) - Requires encoding the filename in the item paths. - It could be extracted from the filename in a standard format. - Ties to the filename format - It could be stored in the metadata - Disconnect between filename and tag, possible lookup errors? - Would require that the filename be exactly `lib.hir` for external reference loading to work. - Could store the internal name _and_ the base filename in the crate metadata? (and error if an incompatible file is picked) NOTE: The specifier should be present on the crate name used for internal lookups. - This requires `load_crate` to return the specifier/unique name Command line options: `--extern` - Override the path for a named crate `--crate-tag` - Specifies a string to append to the crate name (plus a `-`) during HIR lower