diff --git a/Cargo.toml b/Cargo.toml index d990769..7236e58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,15 +11,20 @@ keywords = ["framebuffer", "windowing"] categories = ["game-development", "graphics", "gui", "multimedia", "rendering"] exclude = ["examples"] +[features] +default = ["x11", "wayland"] +wayland = ["wayland-backend", "wayland-client", "nix"] +x11 = ["x11-dl"] + [dependencies] thiserror = "1.0.30" raw-window-handle = "0.5.0" [target.'cfg(any(target_os = "linux", target_os = "freebsd"))'.dependencies] -nix = "0.26.1" -wayland-backend = {version = "0.1.0-beta.14", features = ["client_system"]} -wayland-client = {version = "0.30.0-beta.14"} -x11-dl = "2.19.1" +nix = { version = "0.26.1", optional = true } +wayland-backend = { version = "0.1.0-beta.14", features = ["client_system"], optional = true } +wayland-client = { version = "0.30.0-beta.14", optional = true } +x11-dl = { version = "2.19.1", optional = true } [target.'cfg(target_os = "windows")'.dependencies.windows-sys] version = "0.42.0" diff --git a/src/lib.rs b/src/lib.rs index 37e6f61..f28200b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,9 +9,9 @@ extern crate core; mod win32; #[cfg(target_os = "macos")] mod cg; -#[cfg(any(target_os = "linux", target_os = "freebsd"))] +#[cfg(all(feature = "x11", any(target_os = "linux", target_os = "freebsd")))] mod x11; -#[cfg(any(target_os = "linux", target_os = "freebsd"))] +#[cfg(all(feature = "wayland", any(target_os = "linux", target_os = "freebsd")))] mod wayland; #[cfg(target_arch = "wasm32")] mod web; @@ -49,9 +49,9 @@ impl GraphicsContext { /// lifetime of the GraphicsContext pub unsafe fn from_raw(raw_window_handle: RawWindowHandle, raw_display_handle: RawDisplayHandle) -> Result { let imple: Box = match (raw_window_handle, raw_display_handle) { - #[cfg(any(target_os = "linux", target_os = "freebsd"))] + #[cfg(all(feature = "x11", any(target_os = "linux", target_os = "freebsd")))] (RawWindowHandle::Xlib(xlib_window_handle), RawDisplayHandle::Xlib(xlib_display_handle)) => Box::new(x11::X11Impl::new(xlib_window_handle, xlib_display_handle)?), - #[cfg(any(target_os = "linux", target_os = "freebsd"))] + #[cfg(all(feature = "wayland", any(target_os = "linux", target_os = "freebsd")))] (RawWindowHandle::Wayland(wayland_window_handle), RawDisplayHandle::Wayland(wayland_display_handle)) => Box::new(wayland::WaylandImpl::new(wayland_window_handle, wayland_display_handle)?), #[cfg(target_os = "windows")] (RawWindowHandle::Win32(win32_handle), _) => Box::new(win32::Win32Impl::new(&win32_handle)?),