diff options
author | Jan Beich <jbeich@FreeBSD.org> | 2021-08-23 05:59:33 +0000 |
---|---|---|
committer | Jan Beich <jbeich@FreeBSD.org> | 2021-08-23 06:18:23 +0000 |
commit | a15225b4441fd381a6216151a8e05707c22eb8a4 (patch) | |
tree | ce7892f1e660557580b029d2598cfffcd58d2094 /x11/wezterm | |
parent | sysutils/rubygem-puppetserver-ca: Update to 2.3.3 (diff) |
x11/wezterm: enable toast notifications
Diffstat (limited to 'x11/wezterm')
-rw-r--r-- | x11/wezterm/Makefile | 3 | ||||
-rw-r--r-- | x11/wezterm/distinfo | 4 | ||||
-rw-r--r-- | x11/wezterm/files/patch-zbus | 267 |
3 files changed, 268 insertions, 6 deletions
diff --git a/x11/wezterm/Makefile b/x11/wezterm/Makefile index ee75a2759aee..90ce9672f4ad 100644 --- a/x11/wezterm/Makefile +++ b/x11/wezterm/Makefile @@ -1,5 +1,6 @@ PORTNAME= wezterm DISTVERSION= 20210814-124438-54e29167 +PORTREVISION= 1 CATEGORIES= x11 MAINTAINER= jbeich@FreeBSD.org @@ -278,7 +279,6 @@ CARGO_CRATES= addr2line-0.16.0 \ native-tls-0.2.7 \ nb-connect-1.2.0 \ net2-0.2.37 \ - nix-0.17.0 \ nix-0.19.1 \ nix-0.20.0 \ nom-5.1.2 \ @@ -482,7 +482,6 @@ CARGO_CRATES= addr2line-0.16.0 \ vcpkg-0.2.15 \ vec_map-0.8.2 \ version_check-0.9.3 \ - void-1.0.2 \ vswhom-0.1.0 \ vswhom-sys-0.1.0 \ waker-fn-1.1.0 \ diff --git a/x11/wezterm/distinfo b/x11/wezterm/distinfo index e998d2a6d9ae..5fa04adda6c7 100644 --- a/x11/wezterm/distinfo +++ b/x11/wezterm/distinfo @@ -477,8 +477,6 @@ SHA256 (rust/crates/nb-connect-1.2.0.crate) = b1bb540dc6ef51cfe1916ec038ce7a620d SIZE (rust/crates/nb-connect-1.2.0.crate) = 8126 SHA256 (rust/crates/net2-0.2.37.crate) = 391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae SIZE (rust/crates/net2-0.2.37.crate) = 21311 -SHA256 (rust/crates/nix-0.17.0.crate) = 50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363 -SIZE (rust/crates/nix-0.17.0.crate) = 195654 SHA256 (rust/crates/nix-0.19.1.crate) = b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2 SIZE (rust/crates/nix-0.19.1.crate) = 213462 SHA256 (rust/crates/nix-0.20.0.crate) = fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a @@ -885,8 +883,6 @@ SHA256 (rust/crates/vec_map-0.8.2.crate) = f1bddf1187be692e79c5ffeab891132dfb0f2 SIZE (rust/crates/vec_map-0.8.2.crate) = 14466 SHA256 (rust/crates/version_check-0.9.3.crate) = 5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe SIZE (rust/crates/version_check-0.9.3.crate) = 12547 -SHA256 (rust/crates/void-1.0.2.crate) = 6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d -SIZE (rust/crates/void-1.0.2.crate) = 2356 SHA256 (rust/crates/vswhom-0.1.0.crate) = be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b SIZE (rust/crates/vswhom-0.1.0.crate) = 9420 SHA256 (rust/crates/vswhom-sys-0.1.0.crate) = fc2f5402d3d0e79a069714f7b48e3ecc60be7775a2c049cb839457457a239532 diff --git a/x11/wezterm/files/patch-zbus b/x11/wezterm/files/patch-zbus new file mode 100644 index 000000000000..614cf51d53f0 --- /dev/null +++ b/x11/wezterm/files/patch-zbus @@ -0,0 +1,267 @@ +https://gitlab.freedesktop.org/dbus/zbus/-/commit/01d8f0ec41d3 +https://gitlab.freedesktop.org/dbus/zbus/-/commit/807909a6c7bf +https://gitlab.freedesktop.org/dbus/zbus/-/commit/e3e2f7ddfd6e +https://gitlab.freedesktop.org/dbus/zbus/-/commit/35d1b8778754 +https://github.com/wez/wezterm/pull/829 + +--- cargo-crates/zbus-1.9.1/Cargo.toml.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/Cargo.toml +@@ -48,7 +48,7 @@ version = "0.3.8" + version = "1.0.2" + + [dependencies.nix] +-version = "^0.17" ++version = "0.20.0" + + [dependencies.once_cell] + version = "1.4.0" +--- cargo-crates/zbus-1.9.1/src/address.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/address.rs +@@ -55,8 +55,9 @@ impl Address { + match env::var("DBUS_SESSION_BUS_ADDRESS") { + Ok(val) => Self::from_str(&val), + _ => { +- let uid = Uid::current(); +- let path = format!("unix:path=/run/user/{}/bus", uid); ++ let runtime_dir = env::var("XDG_RUNTIME_DIR") ++ .unwrap_or_else(|_| format!("/run/user/{}", Uid::current())); ++ let path = format!("unix:path={}/bus", runtime_dir); + + Self::from_str(&path) + } +--- cargo-crates/zbus-1.9.1/src/azync/connection.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/azync/connection.rs +@@ -177,13 +177,29 @@ where + /// Upon successful return, the connection is fully established and negotiated: D-Bus messages + /// can be sent and received. + pub async fn new_server(stream: S, guid: &Guid) -> Result<Self> { +- use nix::sys::socket::{getsockopt, sockopt::PeerCredentials}; ++ #[cfg(any(target_os = "android", target_os = "linux"))] ++ let client_uid = { ++ use nix::sys::socket::{getsockopt, sockopt::PeerCredentials}; + +- // FIXME: Could and should this be async? +- let creds = getsockopt(stream.as_raw_fd(), PeerCredentials) +- .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?; ++ let creds = getsockopt(stream.as_raw_fd(), PeerCredentials) ++ .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?; + +- let auth = Authenticated::server(Async::new(stream)?, guid.clone(), creds.uid()).await?; ++ creds.uid() ++ }; ++ #[cfg(any( ++ target_os = "macos", ++ target_os = "ios", ++ target_os = "freebsd", ++ target_os = "dragonfly", ++ target_os = "openbsd", ++ target_os = "netbsd" ++ ))] ++ let client_uid = nix::unistd::getpeereid(stream.as_raw_fd()) ++ .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))? ++ .0 ++ .into(); ++ ++ let auth = Authenticated::server(Async::new(stream)?, guid.clone(), client_uid).await?; + + Ok(Self::new_authenticated(auth)) + } +--- cargo-crates/zbus-1.9.1/src/connection.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/connection.rs +@@ -160,12 +160,29 @@ impl Connection { + /// Upon successful return, the connection is fully established and negotiated: D-Bus messages + /// can be sent and received. + pub fn new_unix_server(stream: UnixStream, guid: &Guid) -> Result<Self> { +- use nix::sys::socket::{getsockopt, sockopt::PeerCredentials}; ++ #[cfg(any(target_os = "android", target_os = "linux"))] ++ let client_uid = { ++ use nix::sys::socket::{getsockopt, sockopt::PeerCredentials}; + +- let creds = getsockopt(stream.as_raw_fd(), PeerCredentials) +- .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?; ++ let creds = getsockopt(stream.as_raw_fd(), PeerCredentials) ++ .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?; + +- let handshake = ServerHandshake::new(stream, guid.clone(), creds.uid()); ++ creds.uid() ++ }; ++ #[cfg(any( ++ target_os = "macos", ++ target_os = "ios", ++ target_os = "freebsd", ++ target_os = "dragonfly", ++ target_os = "openbsd", ++ target_os = "netbsd" ++ ))] ++ let client_uid = nix::unistd::getpeereid(stream.as_raw_fd()) ++ .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))? ++ .0 ++ .into(); ++ ++ let handshake = ServerHandshake::new(stream, guid.clone(), client_uid); + handshake + .blocking_finish() + .map(Connection::new_authenticated_unix) +--- cargo-crates/zbus-1.9.1/src/handshake.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/handshake.rs +@@ -124,7 +124,7 @@ impl<S: Socket> ClientHandshake<S> { + + fn flush_buffer(&mut self) -> Result<()> { + while !self.buffer.is_empty() { +- let written = self.socket.sendmsg(&self.buffer, &[])?; ++ let written = self.socket.sendmsg(&self.buffer, &[], false)?; + self.buffer.drain(..written); + } + Ok(()) +@@ -182,6 +182,15 @@ impl<S: Socket> Handshake<S> for ClientHandshake<S> { + self.step = ClientHandshakeStep::SendingOauth; + } + ClientHandshakeStep::SendingOauth => { ++ #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))] ++ { ++ let zero = self.buffer.drain(..1).next().unwrap(); ++ if self.socket.sendmsg(&[zero], &[], true)? != 1 { ++ return Err(Error::Handshake( ++ "Could not send zero byte with credentials".to_string(), ++ )); ++ } ++ } + self.flush_buffer()?; + self.step = ClientHandshakeStep::WaitOauth; + } +@@ -385,7 +394,7 @@ impl<S: Socket> ServerHandshake<S> { + + fn flush_buffer(&mut self) -> Result<()> { + while !self.buffer.is_empty() { +- let written = self.socket.sendmsg(&self.buffer, &[])?; ++ let written = self.socket.sendmsg(&self.buffer, &[], false)?; + self.buffer.drain(..written); + } + Ok(()) +--- cargo-crates/zbus-1.9.1/src/raw/connection.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/raw/connection.rs +@@ -47,7 +47,7 @@ impl<S: Socket> Connection<S> { + // VecDeque should never return an empty front buffer if the VecDeque + // itself is not empty + debug_assert!(!front.is_empty()); +- let written = self.socket.sendmsg(front, &[])?; ++ let written = self.socket.sendmsg(front, &[], false)?; + self.raw_out_buffer.drain(..written); + } + +@@ -55,14 +55,14 @@ impl<S: Socket> Connection<S> { + while let Some(msg) = self.msg_out_buffer.front() { + let mut data = msg.as_bytes(); + let fds = msg.fds(); +- let written = self.socket.sendmsg(data, &fds)?; ++ let written = self.socket.sendmsg(data, &fds, false)?; + // at least some part of the message has been sent, see if we can/need to send more + // now the message must be removed from msg_out_buffer and any leftover bytes + // must be stored into raw_out_buffer + let msg = self.msg_out_buffer.pop_front().unwrap(); + data = &msg.as_bytes()[written..]; + while !data.is_empty() { +- match self.socket.sendmsg(data, &[]) { ++ match self.socket.sendmsg(data, &[], false) { + Ok(n) => data = &data[n..], + Err(e) => { + // an error occured, we cannot send more, store the remaining into +--- cargo-crates/zbus-1.9.1/src/raw/socket.rs.orig 1970-01-01 00:00:00 UTC ++++ cargo-crates/zbus-1.9.1/src/raw/socket.rs +@@ -47,7 +47,7 @@ pub trait Socket { + /// + /// If the underlying transport does not support transmitting file descriptors, this + /// will return `Err(ErrorKind::InvalidInput)`. +- fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize>; ++ fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize>; + + /// Close the socket. + /// +@@ -74,6 +74,10 @@ impl Socket for UnixStream { + Ok(msg) => { + let mut fds = vec![]; + for cmsg in msg.cmsgs() { ++ #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))] ++ if let ControlMessageOwned::ScmCreds(_) = cmsg { ++ continue; ++ } + if let ControlMessageOwned::ScmRights(fd) = cmsg { + fds.extend(fd.iter().map(|&f| unsafe { OwnedFd::from_raw_fd(f) })); + } else { +@@ -90,12 +94,23 @@ impl Socket for UnixStream { + } + } + +- fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize> { +- let cmsg = if !fds.is_empty() { ++ fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize> { ++ let mut cmsg = if !fds.is_empty() { + vec![ControlMessage::ScmRights(fds)] + } else { + vec![] + }; ++ #[cfg(any(target_os = "android", target_os = "linux"))] ++ let unix_creds; ++ if creds { ++ #[cfg(any(target_os = "android", target_os = "linux"))] ++ { ++ unix_creds = Some(nix::sys::socket::UnixCredentials::new()); ++ cmsg.push(ControlMessage::ScmCredentials(unix_creds.as_ref().unwrap())); ++ } ++ #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))] ++ cmsg.push(ControlMessage::ScmCreds); ++ } + let iov = [IoVec::from_slice(buffer)]; + match sendmsg(self.as_raw_fd(), &iov, &cmsg, MsgFlags::empty(), None) { + // can it really happen? +@@ -124,8 +139,8 @@ where + self.get_mut().recvmsg(buffer) + } + +- fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize> { +- self.get_mut().sendmsg(buffer, fds) ++ fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize> { ++ self.get_mut().sendmsg(buffer, fds, creds) + } + + fn close(&self) -> io::Result<()> { +--- wezterm-toast-notification/Cargo.toml.orig 2021-08-14 19:44:38 UTC ++++ wezterm-toast-notification/Cargo.toml +@@ -11,7 +11,7 @@ build = "build.rs" + open = "2.0" + log = "0.4" + +-[target.'cfg(all(not(windows), not(target_os="macos"), not(target_os="freebsd")))'.dependencies] ++[target.'cfg(all(not(windows), not(target_os="macos")))'.dependencies] + serde = {version="1.0", features = ["derive"]} + zbus = "1.8" + zvariant = "2.0" +--- wezterm-toast-notification/src/dbus.rs.orig 2021-08-14 19:44:38 UTC ++++ wezterm-toast-notification/src/dbus.rs +@@ -1,4 +1,4 @@ +-#![cfg(all(not(target_os = "macos"), not(windows), not(target_os = "freebsd")))] ++#![cfg(all(not(target_os = "macos"), not(windows)))] + //! See <https://developer.gnome.org/notification-spec/> + + use crate::ToastNotification; +--- wezterm-toast-notification/src/lib.rs.orig 2021-08-14 19:44:38 UTC ++++ wezterm-toast-notification/src/lib.rs +@@ -18,7 +18,7 @@ impl ToastNotification { + + #[cfg(windows)] + use crate::windows as backend; +-#[cfg(all(not(target_os = "macos"), not(windows), not(target_os = "freebsd")))] ++#[cfg(all(not(target_os = "macos"), not(windows)))] + use dbus as backend; + #[cfg(target_os = "macos")] + use macos as backend; +@@ -31,9 +31,6 @@ mod nop { + Ok(()) + } + } +- +-#[cfg(target_os = "freebsd")] +-use nop as backend; + + pub fn show(notif: ToastNotification) { + if let Err(err) = backend::show_notif(notif) { |