diff --git a/input-capture/build.rs b/input-capture/build.rs new file mode 100644 index 0000000..58320ad --- /dev/null +++ b/input-capture/build.rs @@ -0,0 +1,25 @@ +fn main() { + let unix = cfg!(unix); + let layer_shell = cfg!(feature = "layer_shell"); + let libei = cfg!(feature = "libei"); + let x11 = cfg!(feature = "x11"); + let macos = cfg!(target_os = "macos"); + + let libei = unix && !macos && libei; + let layer_shell = unix && !macos && layer_shell; + let x11 = unix && !macos && x11; + + println!("cargo::rustc-check-cfg=cfg(layer_shell)"); + println!("cargo::rustc-check-cfg=cfg(libei)"); + println!("cargo::rustc-check-cfg=cfg(x11)"); + + if layer_shell { + println!("cargo::rustc-cfg=layer_shell"); + } + if libei { + println!("cargo::rustc-cfg=libei"); + } + if x11 { + println!("cargo::rustc-cfg=x11"); + } +} diff --git a/input-capture/src/error.rs b/input-capture/src/error.rs index 7324156..592e40f 100644 --- a/input-capture/src/error.rs +++ b/input-capture/src/error.rs @@ -8,16 +8,16 @@ pub enum InputCaptureError { Capture(#[from] CaptureError), } -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] use std::io; -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] use wayland_client::{ ConnectError, DispatchError, backend::WaylandError, globals::{BindError, GlobalError}, }; -#[cfg(all(unix, feature = "libei", not(target_os = "macos")))] +#[cfg(libei)] use ashpd::desktop::ResponseError; #[cfg(target_os = "macos")] @@ -31,13 +31,13 @@ pub enum CaptureError { EndOfStream, #[error("io error: `{0}`")] Io(#[from] std::io::Error), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error("libei error: `{0}`")] Reis(#[from] reis::Error), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error(transparent)] Portal(#[from] ashpd::Error), - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error("libei disconnected - reason: `{0}`")] Disconnected(String), #[cfg(target_os = "macos")] @@ -61,13 +61,13 @@ pub enum CaptureError { pub enum CaptureCreationError { #[error("no backend available")] NoAvailableBackend, - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] #[error("error creating input-capture-portal backend: `{0}`")] Libei(#[from] LibeiCaptureCreationError), - #[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] + #[cfg(layer_shell)] #[error("error creating layer-shell capture backend: `{0}`")] LayerShell(#[from] LayerShellCaptureCreationError), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] #[error("error creating x11 capture backend: `{0}`")] X11(#[from] X11InputCaptureCreationError), #[cfg(windows)] @@ -80,7 +80,7 @@ pub enum CaptureCreationError { impl CaptureCreationError { /// request was intentionally denied by the user - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] pub(crate) fn cancelled_by_user(&self) -> bool { matches!( self, @@ -89,20 +89,20 @@ impl CaptureCreationError { ))) ) } - #[cfg(not(all(unix, feature = "libei", not(target_os = "macos"))))] + #[cfg(not(libei))] pub(crate) fn cancelled_by_user(&self) -> bool { false } } -#[cfg(all(unix, feature = "libei", not(target_os = "macos")))] +#[cfg(libei)] #[derive(Debug, Error)] pub enum LibeiCaptureCreationError { #[error("xdg-desktop-portal: `{0}`")] Ashpd(#[from] ashpd::Error), } -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] #[derive(Debug, Error)] #[error("{protocol} protocol not supported: {inner}")] pub struct WaylandBindError { @@ -110,14 +110,14 @@ pub struct WaylandBindError { protocol: &'static str, } -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] impl WaylandBindError { pub(crate) fn new(inner: BindError, protocol: &'static str) -> Self { Self { inner, protocol } } } -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] #[derive(Debug, Error)] pub enum LayerShellCaptureCreationError { #[error(transparent)] @@ -134,7 +134,7 @@ pub enum LayerShellCaptureCreationError { Io(#[from] io::Error), } -#[cfg(all(unix, feature = "x11", not(target_os = "macos")))] +#[cfg(x11)] #[derive(Debug, Error)] pub enum X11InputCaptureCreationError { #[error("X11 input capture is not yet implemented :(")] diff --git a/input-capture/src/lib.rs b/input-capture/src/lib.rs index b1ef6c0..6a850b3 100644 --- a/input-capture/src/lib.rs +++ b/input-capture/src/lib.rs @@ -15,19 +15,19 @@ pub use error::{CaptureCreationError, CaptureError, InputCaptureError}; pub mod error; -#[cfg(all(unix, feature = "libei", not(target_os = "macos")))] +#[cfg(libei)] mod libei; #[cfg(target_os = "macos")] mod macos; -#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] +#[cfg(layer_shell)] mod layer_shell; #[cfg(windows)] mod windows; -#[cfg(all(unix, feature = "x11", not(target_os = "macos")))] +#[cfg(x11)] mod x11; /// fallback input capture (does not produce events) @@ -85,11 +85,11 @@ impl Display for Position { #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Backend { - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] InputCapturePortal, - #[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] + #[cfg(layer_shell)] LayerShell, - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] X11, #[cfg(windows)] Windows, @@ -101,11 +101,11 @@ pub enum Backend { impl Display for Backend { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::InputCapturePortal => write!(f, "input-capture-portal"), - #[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] + #[cfg(layer_shell)] Backend::LayerShell => write!(f, "layer-shell"), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11 => write!(f, "X11"), #[cfg(windows)] Backend::Windows => write!(f, "windows"), @@ -298,11 +298,11 @@ async fn create_backend( CaptureCreationError, > { match backend { - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::InputCapturePortal => Ok(Box::new(libei::LibeiInputCapture::new().await?)), - #[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] + #[cfg(layer_shell)] Backend::LayerShell => Ok(Box::new(layer_shell::LayerShellInputCapture::new()?)), - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11 => Ok(Box::new(x11::X11InputCapture::new()?)), #[cfg(windows)] Backend::Windows => Ok(Box::new(windows::WindowsInputCapture::new())), @@ -327,11 +327,11 @@ async fn create( } for backend in [ - #[cfg(all(unix, feature = "libei", not(target_os = "macos")))] + #[cfg(libei)] Backend::InputCapturePortal, - #[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))] + #[cfg(layer_shell)] Backend::LayerShell, - #[cfg(all(unix, feature = "x11", not(target_os = "macos")))] + #[cfg(x11)] Backend::X11, #[cfg(windows)] Backend::Windows,