Rollup merge of #138233 - smmalis37:no-advapi32, r=ChrisDenton

Windows: Don't link std (and run-make) against advapi32, except on win7

Std no longer depends on any functionality provided by advapi32, so we can remove it from the list of external libraries we link against. Except, the win7 targets do still rely on advapi32-provided functionality. This PR therefore moves linking against it to only occur on win7 targets, so that no new uses of it slip in without being noticed.
This commit is contained in:
Matthias Krüger
2025-03-09 16:41:52 +01:00
committed by GitHub
5 changed files with 19 additions and 13 deletions
+1 -1
View File
@@ -34,7 +34,7 @@
}
#[cfg(not(feature = "windows_raw_dylib"))]
#[link(name = "advapi32")]
#[cfg_attr(target_vendor = "win7", link(name = "advapi32"))]
#[link(name = "ntdll")]
#[link(name = "userenv")]
#[link(name = "ws2_32")]
+4 -2
View File
@@ -230,8 +230,10 @@ fn make_win_dist(
"libiconv.a",
"libmoldname.a",
"libpthread.a",
//Windows import libs
//This should contain only the set of libraries necessary to link the standard library.
// Windows import libs
// This *should* contain only the set of libraries necessary to link the standard library,
// however we've had problems with people accidentally depending on extra libs being here,
// so we can't easily remove entries.
"libadvapi32.a",
"libbcrypt.a",
"libcomctl32.a",
@@ -1,17 +1,15 @@
use crate::{is_msvc, is_windows, uname};
use crate::{is_msvc, is_win7, is_windows, uname};
/// `EXTRACFLAGS`
pub fn extra_c_flags() -> Vec<&'static str> {
if is_windows() {
if is_msvc() {
vec![
"ws2_32.lib",
"userenv.lib",
"advapi32.lib",
"bcrypt.lib",
"ntdll.lib",
"synchronization.lib",
]
let mut libs =
vec!["ws2_32.lib", "userenv.lib", "bcrypt.lib", "ntdll.lib", "synchronization.lib"];
if is_win7() {
libs.push("advapi32.lib");
}
libs
} else {
vec!["-lws2_32", "-luserenv", "-lbcrypt", "-lntdll", "-lsynchronization"]
}
+1 -1
View File
@@ -84,7 +84,7 @@ pub mod rfs {
/// Helpers for checking target information.
pub use targets::{
apple_os, is_aix, is_darwin, is_msvc, is_windows, is_windows_gnu, llvm_components_contain,
apple_os, is_aix, is_darwin, is_msvc, is_windows, is_windows_gnu, is_win7, llvm_components_contain,
target, uname,
};
@@ -28,6 +28,12 @@ pub fn is_windows_gnu() -> bool {
target().ends_with("windows-gnu")
}
/// Check if target is win7.
#[must_use]
pub fn is_win7() -> bool {
target().contains("win7")
}
/// Check if target uses macOS.
#[must_use]
pub fn is_darwin() -> bool {