Add suggestion to the "missing native library" error
If we fail to locate a native library that we are linking with, it could be the case the user entered a complete file name like `foo.lib` or `libfoo.a` when we expect them to simply provide `foo`. In this situation, we now detect that case and suggest the user only provide the library name itself.
This commit is contained in:
parent
0938e1680d
commit
097b6d3baf
7 changed files with 68 additions and 2 deletions
|
@ -372,7 +372,41 @@ pub struct FailedWriteError {
|
|||
#[derive(Diagnostic)]
|
||||
#[diag(metadata::missing_native_library)]
|
||||
pub struct MissingNativeLibrary<'a> {
|
||||
pub libname: &'a str,
|
||||
libname: &'a str,
|
||||
#[subdiagnostic]
|
||||
suggest_name: Option<SuggestLibraryName<'a>>,
|
||||
}
|
||||
|
||||
impl<'a> MissingNativeLibrary<'a> {
|
||||
pub fn new(libname: &'a str, verbatim: bool) -> Self {
|
||||
// if it looks like the user has provided a complete filename rather just the bare lib name,
|
||||
// then provide a note that they might want to try trimming the name
|
||||
let suggested_name = if !verbatim {
|
||||
if let Some(libname) = libname.strip_prefix("lib") && let Some(libname) = libname.strip_suffix(".a") {
|
||||
// this is a unix style filename so trim prefix & suffix
|
||||
Some(libname)
|
||||
} else if let Some(libname) = libname.strip_suffix(".lib") {
|
||||
// this is a Windows style filename so just trim the suffix
|
||||
Some(libname)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
Self {
|
||||
libname,
|
||||
suggest_name: suggested_name
|
||||
.map(|suggested_name| SuggestLibraryName { suggested_name }),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[help(metadata::only_provide_library_name)]
|
||||
pub struct SuggestLibraryName<'a> {
|
||||
suggested_name: &'a str,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -52,7 +52,7 @@ pub fn find_native_static_library(
|
|||
}
|
||||
}
|
||||
|
||||
sess.emit_fatal(MissingNativeLibrary { libname: name });
|
||||
sess.emit_fatal(MissingNativeLibrary::new(name, verbatim.unwrap_or(false)));
|
||||
}
|
||||
|
||||
fn find_bundled_library(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue