From 93cec568aec11db1caccb1e731264e7038f25c65 Mon Sep 17 00:00:00 2001 From: Trevor Gross Date: Wed, 27 Nov 2024 17:10:52 -0500 Subject: [PATCH] Fix the build with `rustc-dep-of-std` Since [1] we use derive macros rather than manually implementing `Clone` and `Copy`. However, this caused the build in `std` to start failing since the `core` prelude is not available. This provides the derive macros as well as `derive` itself. Resolve this by using complete paths. Additionally allow `internal_features` to suppress the warning using `link_cfg`. Link: https://github.com/rust-lang/libc/pull/4038 [1] --- src/lib.rs | 1 + src/macros.rs | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 35b68ded5c9e..01c092b2a6b4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,6 +20,7 @@ #![cfg_attr(libc_deny_warnings, deny(warnings))] // Attributes needed when building as part of the standard library #![cfg_attr(feature = "rustc-dep-of-std", feature(link_cfg, no_core))] +#![cfg_attr(feature = "rustc-dep-of-std", allow(internal_features))] // Enable extra lints: #![cfg_attr(feature = "extra_traits", deny(missing_debug_implementations))] #![deny(missing_copy_implementations, safe_packed_borrows)] diff --git a/src/macros.rs b/src/macros.rs index 92345928a769..74f4761aac13 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -108,8 +108,11 @@ macro_rules! s { (it: $(#[$attr:meta])* pub struct $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] - #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] - #[derive(Copy, Clone)] + #[cfg_attr( + feature = "extra_traits", + core::prelude::v1::derive(Debug, Eq, Hash, PartialEq) + )] + #[core::prelude::v1::derive(core::clone::Clone, core::marker::Copy)] #[allow(deprecated)] $(#[$attr])* pub struct $i { $($field)* } @@ -127,8 +130,11 @@ macro_rules! s_paren { pub struct $i:ident ( $($field:tt)* ); )*) => ($( __item! { - #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] - #[derive(Copy, Clone)] + #[cfg_attr( + feature = "extra_traits", + core::prelude::v1::derive(Debug, Eq, Hash, PartialEq) + )] + #[core::prelude::v1::derive(core::clone::Clone, core::marker::Copy)] $(#[$attr])* pub struct $i ( $($field)* ); } @@ -149,7 +155,7 @@ macro_rules! s_no_extra_traits { (it: $(#[$attr:meta])* pub union $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] - #[derive(Copy, Clone)] + #[core::prelude::v1::derive(core::clone::Clone, core::marker::Copy)] $(#[$attr])* pub union $i { $($field)* } } @@ -158,7 +164,7 @@ macro_rules! s_no_extra_traits { (it: $(#[$attr:meta])* pub struct $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] - #[derive(Copy, Clone)] + #[core::prelude::v1::derive(core::clone::Clone, core::marker::Copy)] $(#[$attr])* pub struct $i { $($field)* } } @@ -186,8 +192,11 @@ macro_rules! e { pub enum $i:ident { $($field:tt)* } )*) => ($( __item! { - #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] - #[derive(Copy, Clone)] + #[cfg_attr( + feature = "extra_traits", + core::prelude::v1::derive(Debug, Eq, Hash, PartialEq) + )] + #[core::prelude::v1::derive(core::clone::Clone, core::marker::Copy)] $(#[$attr])* pub enum $i { $($field)* } }