Date: Mon, 23 Aug 2021 06:22:35 GMT From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-branches@FreeBSD.org Subject: git: 262d20cfc2b5 - 2021Q3 - x11/wezterm: enable toast notifications Message-ID: <202108230622.17N6MZM8029374@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch 2021Q3 has been updated by jbeich: URL: https://cgit.FreeBSD.org/ports/commit/?id=262d20cfc2b50beeda7f9caa458e8cb4176dbaed commit 262d20cfc2b50beeda7f9caa458e8cb4176dbaed Author: Jan Beich <jbeich@FreeBSD.org> AuthorDate: 2021-08-23 05:59:33 +0000 Commit: Jan Beich <jbeich@FreeBSD.org> CommitDate: 2021-08-23 06:22:28 +0000 x11/wezterm: enable toast notifications (cherry picked from commit a15225b4441fd381a6216151a8e05707c22eb8a4) --- x11/wezterm/Makefile | 4 +- x11/wezterm/distinfo | 4 - x11/wezterm/files/patch-zbus | 267 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 268 insertions(+), 7 deletions(-) diff --git a/x11/wezterm/Makefile b/x11/wezterm/Makefile index 203c4dad76de..55214e6c05af 100644 --- a/x11/wezterm/Makefile +++ b/x11/wezterm/Makefile @@ -1,6 +1,6 @@ PORTNAME= wezterm DISTVERSION= 20210502-154244-3f7122cb -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= x11 MAINTAINER= jbeich@FreeBSD.org @@ -246,7 +246,6 @@ CARGO_CRATES= ab_glyph_rasterizer-0.1.4 \ nanorand-0.5.2 \ nb-connect-1.2.0 \ net2-0.2.37 \ - nix-0.17.0 \ nix-0.18.0 \ nix-0.19.1 \ nix-0.20.0 \ @@ -431,7 +430,6 @@ CARGO_CRATES= ab_glyph_rasterizer-0.1.4 \ vcpkg-0.2.12 \ 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 e7ec3baea7c0..bf4420546d7b 100644 --- a/x11/wezterm/distinfo +++ b/x11/wezterm/distinfo @@ -413,8 +413,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.18.0.crate) = 83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055 SIZE (rust/crates/nix-0.18.0.crate) = 209962 SHA256 (rust/crates/nix-0.19.1.crate) = b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2 @@ -783,8 +781,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..229122850542 --- /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-05-02 22:42:44 UTC ++++ wezterm-toast-notification/Cargo.toml +@@ -11,7 +11,7 @@ build = "build.rs" + open = "1.4" + 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-05-02 22:42:44 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-05-02 22:42:44 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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108230622.17N6MZM8029374>