From 743895516c9bce5db67ec052954f0638e46f7198 Mon Sep 17 00:00:00 2001 From: Ferdinand Schober Date: Sat, 16 May 2026 12:23:26 +0200 Subject: [PATCH] same for input-emulation --- input-emulation/build.rs | 31 ++++++++++++++++++++++++++ input-emulation/src/error.rs | 42 +++++++++++++++--------------------- input-emulation/src/lib.rs | 40 +++++++++++++++++----------------- 3 files changed, 68 insertions(+), 45 deletions(-) create mode 100644 input-emulation/build.rs diff --git a/input-emulation/build.rs b/input-emulation/build.rs new file mode 100644 index 0000000..e9b39c1 --- /dev/null +++ b/input-emulation/build.rs @@ -0,0 +1,31 @@ +fn main() { + let unix = cfg!(unix); + let libei = cfg!(feature = "libei"); + let x11 = cfg!(feature = "x11"); + let macos = cfg!(target_os = "macos"); + let wlroots = cfg!(feature = "wlroots"); + let rdp = cfg!(feature = "remote_desktop_portal"); + + let libei = unix && !macos && libei; + let wlroots = unix && !macos && wlroots; + let x11 = unix && !macos && x11; + let rdp = unix && !macos && rdp; + + println!("cargo::rustc-check-cfg=cfg(wlroots)"); + println!("cargo::rustc-check-cfg=cfg(libei)"); + println!("cargo::rustc-check-cfg=cfg(x11)"); + println!("cargo::rustc-check-cfg=cfg(rdp)"); + + if libei { + println!("cargo::rustc-cfg=libei"); + } + if x11 { + println!("cargo::rustc-cfg=x11"); + } + if wlroots { + println!("cargo::rustc-cfg=wlroots"); + } + if rdp { + println!("cargo::rustc-cfg=rdp"); + } +} diff --git a/input-emulation/src/error.rs b/input-emulation/src/error.rs index 9ba9f0e..5197dbf 100644 --- a/input-emulation/src/error.rs +++ b/input-emulation/src/error.rs @@ -6,16 +6,12 @@ pub enum InputEmulationError { Emulate(#[from] EmulationError), } -#[cfg(all( - unix, - any(feature = "remote_desktop_portal", feature = "libei"), - not(target_os = "macos") -))] +#[cfg(any(libei, rdp))] use ashpd::{Error::Response, desktop::ResponseError}; use std::io; use thiserror::Error; -#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] +#[cfg(wlroots)] use wayland_client::{ ConnectError, DispatchError, backend::WaylandError, @@ -26,17 +22,13 @@ use wayland_client::{ pub enum EmulationError { #[error("event stream closed")] EndOfStream, - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error("libei error: `{0}`")] Libei(#[from] reis::Error), - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] #[error("wayland error: `{0}`")] Wayland(#[from] wayland_client::backend::WaylandError), - #[cfg(all( - unix, - any(feature = "remote_desktop_portal", feature = "libei"), - not(target_os = "macos") - ))] + #[cfg(any(rdp, libei))] #[error("xdg-desktop-portal: `{0}`")] Ashpd(#[from] ashpd::Error), #[error("io error: `{0}`")] @@ -45,16 +37,16 @@ pub enum EmulationError { #[derive(Debug, Error)] pub enum EmulationCreationError { - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] #[error("wlroots backend: `{0}`")] Wlroots(#[from] WlrootsEmulationCreationError), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error("libei backend: `{0}`")] Libei(#[from] LibeiEmulationCreationError), - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] #[error("xdg-desktop-portal: `{0}`")] Xdp(#[from] XdpEmulationCreationError), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] #[error("x11: `{0}`")] X11(#[from] X11EmulationCreationError), #[cfg(target_os = "macos")] @@ -70,7 +62,7 @@ pub enum EmulationCreationError { impl EmulationCreationError { /// request was intentionally denied by the user pub(crate) fn cancelled_by_user(&self) -> bool { - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] if matches!( self, EmulationCreationError::Libei(LibeiEmulationCreationError::Ashpd(Response( @@ -79,7 +71,7 @@ impl EmulationCreationError { ) { return true; } - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] if matches!( self, EmulationCreationError::Xdp(XdpEmulationCreationError::Ashpd(Response( @@ -92,7 +84,7 @@ impl EmulationCreationError { } } -#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] +#[cfg(wlroots)] #[derive(Debug, Error)] pub enum WlrootsEmulationCreationError { #[error(transparent)] @@ -109,7 +101,7 @@ pub enum WlrootsEmulationCreationError { Io(#[from] std::io::Error), } -#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] +#[cfg(wlroots)] #[derive(Debug, Error)] #[error("wayland protocol \"{protocol}\" not supported: {inner}")] pub struct WaylandBindError { @@ -117,14 +109,14 @@ pub struct WaylandBindError { protocol: &'static str, } -#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] +#[cfg(wlroots)] impl WaylandBindError { pub(crate) fn new(inner: BindError, protocol: &'static str) -> Self { Self { inner, protocol } } } -#[cfg(all(unix, feature = "libei", not(target_os = "macos")))] +#[cfg(libei)] #[derive(Debug, Error)] pub enum LibeiEmulationCreationError { #[error(transparent)] @@ -135,14 +127,14 @@ pub enum LibeiEmulationCreationError { Reis(#[from] reis::Error), } -#[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] +#[cfg(rdp)] #[derive(Debug, Error)] pub enum XdpEmulationCreationError { #[error(transparent)] Ashpd(#[from] ashpd::Error), } -#[cfg(all(unix, feature = "x11", not(target_os = "macos")))] +#[cfg(x11)] #[derive(Debug, Error)] pub enum X11EmulationCreationError { #[error("could not open display")] diff --git a/input-emulation/src/lib.rs b/input-emulation/src/lib.rs index 930695f..f77c607 100644 --- a/input-emulation/src/lib.rs +++ b/input-emulation/src/lib.rs @@ -11,16 +11,16 @@ pub use self::error::{EmulationCreationError, EmulationError, InputEmulationErro #[cfg(windows)] mod windows; -#[cfg(all(unix, feature = "x11", not(target_os = "macos")))] +#[cfg(x11)] mod x11; -#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] +#[cfg(wlroots)] mod wlroots; -#[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] +#[cfg(rdp)] mod xdg_desktop_portal; -#[cfg(all(unix, feature = "libei", not(target_os = "macos")))] +#[cfg(libei)] mod libei; #[cfg(target_os = "macos")] @@ -34,13 +34,13 @@ pub type EmulationHandle = u64; #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Backend { - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] Wlroots, - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Libei, - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] Xdp, - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] X11, #[cfg(windows)] Windows, @@ -52,13 +52,13 @@ pub enum Backend { impl Display for Backend { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] Backend::Wlroots => write!(f, "wlroots"), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::Libei => write!(f, "libei"), - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] Backend::Xdp => write!(f, "xdg-desktop-portal"), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11 => write!(f, "X11"), #[cfg(windows)] Backend::Windows => write!(f, "windows"), @@ -78,13 +78,13 @@ pub struct InputEmulation { impl InputEmulation { async fn with_backend(backend: Backend) -> Result { let emulation: Box = match backend { - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] Backend::Wlroots => Box::new(wlroots::WlrootsEmulation::new()?), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::Libei => Box::new(libei::LibeiEmulation::new().await?), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11 => Box::new(x11::X11Emulation::new()?), - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] Backend::Xdp => Box::new(xdg_desktop_portal::DesktopPortalEmulation::new().await?), #[cfg(windows)] Backend::Windows => Box::new(windows::WindowsEmulation::new()?), @@ -109,13 +109,13 @@ impl InputEmulation { } for backend in [ - #[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))] + #[cfg(wlroots)] Backend::Wlroots, - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::Libei, - #[cfg(all(unix, feature = "remote_desktop_portal", not(target_os = "macos")))] + #[cfg(rdp)] Backend::Xdp, - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11, #[cfg(windows)] Backend::Windows,