Rollup merge of #104360 - petrochenkov:stabverb, r=TaKO8Ki
Stabilize native library modifier `verbatim` Stabilization report - https://github.com/rust-lang/rust/pull/104360#issuecomment-1312724787. cc https://github.com/rust-lang/rust/issues/81490 Closes https://github.com/rust-lang/rust/issues/99425
This commit is contained in:
commit
f33d4094f0
17 changed files with 73 additions and 95 deletions
|
@ -377,12 +377,8 @@ fn link_rlib<'a>(
|
|||
find_native_static_library(name.as_str(), lib.verbatim, &lib_search_paths, sess);
|
||||
if sess.opts.unstable_opts.packed_bundled_libs && flavor == RlibFlavor::Normal {
|
||||
let filename = lib.filename.unwrap();
|
||||
let lib_path = find_native_static_library(
|
||||
filename.as_str(),
|
||||
Some(true),
|
||||
&lib_search_paths,
|
||||
sess,
|
||||
);
|
||||
let lib_path =
|
||||
find_native_static_library(filename.as_str(), true, &lib_search_paths, sess);
|
||||
let src = read(lib_path)
|
||||
.map_err(|e| sess.emit_fatal(errors::ReadFileError { message: e }))?;
|
||||
let (data, _) = create_wrapper_file(sess, b".bundled_lib".to_vec(), &src);
|
||||
|
@ -465,7 +461,7 @@ fn collate_raw_dylibs<'a, 'b>(
|
|||
|
||||
for lib in used_libraries {
|
||||
if lib.kind == NativeLibKind::RawDylib {
|
||||
let ext = if matches!(lib.verbatim, Some(true)) { "" } else { ".dll" };
|
||||
let ext = if lib.verbatim { "" } else { ".dll" };
|
||||
let name = format!("{}{}", lib.name.expect("unnamed raw-dylib library"), ext);
|
||||
let imports = dylib_table.entry(name.clone()).or_default();
|
||||
for import in &lib.dll_imports {
|
||||
|
@ -1335,7 +1331,7 @@ fn print_native_static_libs(sess: &Session, all_native_libs: &[NativeLib]) {
|
|||
NativeLibKind::Static { bundle: Some(false), .. }
|
||||
| NativeLibKind::Dylib { .. }
|
||||
| NativeLibKind::Unspecified => {
|
||||
let verbatim = lib.verbatim.unwrap_or(false);
|
||||
let verbatim = lib.verbatim;
|
||||
if sess.target.is_like_msvc {
|
||||
Some(format!("{}{}", name, if verbatim { "" } else { ".lib" }))
|
||||
} else if sess.target.linker_flavor.is_gnu() {
|
||||
|
@ -2306,7 +2302,7 @@ fn add_native_libs_from_crate(
|
|||
_ => &codegen_results.crate_info.native_libraries[&cnum],
|
||||
};
|
||||
|
||||
let mut last = (None, NativeLibKind::Unspecified, None);
|
||||
let mut last = (None, NativeLibKind::Unspecified, false);
|
||||
for lib in native_libs {
|
||||
let Some(name) = lib.name else {
|
||||
continue;
|
||||
|
@ -2323,7 +2319,7 @@ fn add_native_libs_from_crate(
|
|||
};
|
||||
|
||||
let name = name.as_str();
|
||||
let verbatim = lib.verbatim.unwrap_or(false);
|
||||
let verbatim = lib.verbatim;
|
||||
match lib.kind {
|
||||
NativeLibKind::Static { bundle, whole_archive } => {
|
||||
if link_static {
|
||||
|
|
|
@ -515,7 +515,7 @@ impl<'a> Linker for GccLinker<'a> {
|
|||
// -force_load is the macOS equivalent of --whole-archive, but it
|
||||
// involves passing the full path to the library to link.
|
||||
self.linker_arg("-force_load");
|
||||
let lib = find_native_static_library(lib, Some(verbatim), search_path, &self.sess);
|
||||
let lib = find_native_static_library(lib, verbatim, search_path, &self.sess);
|
||||
self.linker_arg(&lib);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ pub struct NativeLib {
|
|||
pub name: Option<Symbol>,
|
||||
pub filename: Option<Symbol>,
|
||||
pub cfg: Option<ast::MetaItem>,
|
||||
pub verbatim: Option<bool>,
|
||||
pub verbatim: bool,
|
||||
pub dll_imports: Vec<cstore::DllImport>,
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ impl From<&cstore::NativeLib> for NativeLib {
|
|||
filename: lib.filename,
|
||||
name: lib.name,
|
||||
cfg: lib.cfg.clone(),
|
||||
verbatim: lib.verbatim,
|
||||
verbatim: lib.verbatim.unwrap_or(false),
|
||||
dll_imports: lib.dll_imports.clone(),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -237,6 +237,8 @@ declare_features! (
|
|||
(accepted, native_link_modifiers, "1.61.0", Some(81490), None),
|
||||
/// Allows specifying the bundle link modifier
|
||||
(accepted, native_link_modifiers_bundle, "1.63.0", Some(81490), None),
|
||||
/// Allows specifying the verbatim link modifier
|
||||
(accepted, native_link_modifiers_verbatim, "CURRENT_RUSTC_VERSION", Some(81490), None),
|
||||
/// Allows specifying the whole-archive link modifier
|
||||
(accepted, native_link_modifiers_whole_archive, "1.61.0", Some(81490), None),
|
||||
/// Allows using non lexical lifetimes (RFC 2094).
|
||||
|
|
|
@ -455,8 +455,6 @@ declare_features! (
|
|||
(active, naked_functions, "1.9.0", Some(32408), None),
|
||||
/// Allows specifying the as-needed link modifier
|
||||
(active, native_link_modifiers_as_needed, "1.53.0", Some(81490), None),
|
||||
/// Allows specifying the verbatim link modifier
|
||||
(active, native_link_modifiers_verbatim, "1.53.0", Some(81490), None),
|
||||
/// Allow negative trait implementations.
|
||||
(active, negative_impls, "1.44.0", Some(68318), None),
|
||||
/// Allows the `!` type. Does not imply 'exhaustive_patterns' (below) any more.
|
||||
|
|
|
@ -29,11 +29,11 @@ use std::path::PathBuf;
|
|||
|
||||
pub fn find_native_static_library(
|
||||
name: &str,
|
||||
verbatim: Option<bool>,
|
||||
verbatim: bool,
|
||||
search_paths: &[PathBuf],
|
||||
sess: &Session,
|
||||
) -> PathBuf {
|
||||
let formats = if verbatim.unwrap_or(false) {
|
||||
let formats = if verbatim {
|
||||
vec![("".into(), "".into())]
|
||||
} else {
|
||||
let os = (sess.target.staticlib_prefix.clone(), sess.target.staticlib_suffix.clone());
|
||||
|
@ -52,7 +52,7 @@ pub fn find_native_static_library(
|
|||
}
|
||||
}
|
||||
|
||||
sess.emit_fatal(MissingNativeLibrary::new(name, verbatim.unwrap_or(false)));
|
||||
sess.emit_fatal(MissingNativeLibrary::new(name, verbatim));
|
||||
}
|
||||
|
||||
fn find_bundled_library(
|
||||
|
@ -66,7 +66,7 @@ fn find_bundled_library(
|
|||
let NativeLibKind::Static { bundle: Some(true) | None, .. } = kind {
|
||||
find_native_static_library(
|
||||
name.unwrap().as_str(),
|
||||
verbatim,
|
||||
verbatim.unwrap_or(false),
|
||||
&sess.target_filesearch(PathKind::Native).search_path_dirs(),
|
||||
sess,
|
||||
).file_name().and_then(|s| s.to_str()).map(Symbol::intern)
|
||||
|
@ -311,10 +311,7 @@ impl<'tcx> Collector<'tcx> {
|
|||
sess.emit_err(BundleNeedsStatic { span });
|
||||
}
|
||||
|
||||
("verbatim", _) => {
|
||||
report_unstable_modifier!(native_link_modifiers_verbatim);
|
||||
assign_modifier(&mut verbatim)
|
||||
}
|
||||
("verbatim", _) => assign_modifier(&mut verbatim),
|
||||
|
||||
("whole-archive", Some(NativeLibKind::Static { whole_archive, .. })) => {
|
||||
assign_modifier(whole_archive)
|
||||
|
|
|
@ -2029,10 +2029,7 @@ fn parse_native_lib_modifiers(
|
|||
"linking modifier `bundle` is only compatible with `static` linking kind",
|
||||
),
|
||||
|
||||
("verbatim", _) => {
|
||||
report_unstable_modifier();
|
||||
assign_modifier(&mut verbatim)
|
||||
}
|
||||
("verbatim", _) => assign_modifier(&mut verbatim),
|
||||
|
||||
("whole-archive", NativeLibKind::Static { whole_archive, .. }) => {
|
||||
assign_modifier(whole_archive)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue