Add initial FreeBSD support (#20480)
This PR adds initial support for FreeBSD (https://github.com/zed-industries/zed/issues/15309). While there is still work left to be done, it seems to be usable. As discussed by @syobocat (https://github.com/zed-industries/zed/discussions/10247), the changes were just adding ```target_os = "freebsd"``` to wherever it checks if the OS is Linux.  Needs to be build with ```RUSTFLAGS="-C link-dead-code"``` Known Issues: - There's an issue in ```crates/project/src/environment.rs``` where a command fails because ```/bin/sh``` on FreeBSD doesn't support the ```-l``` option.  - The file/folder choosers provided by the ```ashpd``` crate don't work on FreeBSD (at least with KDE). This isn't that bad since a fallback dialog is used.  - Moving to trash won't work. - Numerous tests fail (when running on FreeBSD). While I haven't looked into this much, it appears that the corresponding features seem to work fine. Release Notes: - Added initial support for FreeBSD
This commit is contained in:
parent
b5da1198f5
commit
a47759fd03
34 changed files with 139 additions and 96 deletions
|
@ -100,12 +100,12 @@ fn fail_to_open_window(e: anyhow::Error, _cx: &mut AppContext) {
|
|||
eprintln!(
|
||||
"Zed failed to open a window: {e:?}. See https://zed.dev/docs/linux for troubleshooting steps."
|
||||
);
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
#[cfg(not(any(target_os = "linux", target_os = "freebsd")))]
|
||||
{
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
{
|
||||
use ashpd::desktop::notification::{Notification, NotificationProxy, Priority};
|
||||
_cx.spawn(|_cx| async move {
|
||||
|
@ -172,7 +172,7 @@ fn main() {
|
|||
if *db::ZED_STATELESS || *release_channel::RELEASE_CHANNEL == ReleaseChannel::Dev {
|
||||
false
|
||||
} else {
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
{
|
||||
crate::zed::listen_for_cli_connections(open_listener.clone()).is_err()
|
||||
}
|
||||
|
@ -426,7 +426,7 @@ fn main() {
|
|||
|
||||
load_embedded_fonts(cx);
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
crate::zed::linux_prompts::init(cx);
|
||||
|
||||
app_state.languages.set_theme(cx.theme().clone());
|
||||
|
@ -942,7 +942,7 @@ fn init_logger() {
|
|||
config_builder.set_time_offset(offset);
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
{
|
||||
config_builder.add_filter_ignore_str("zbus");
|
||||
config_builder.add_filter_ignore_str("blade_graphics::hal::resource");
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
mod app_menus;
|
||||
pub mod inline_completion_registry;
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
pub(crate) mod linux_prompts;
|
||||
#[cfg(target_os = "macos")]
|
||||
pub(crate) mod mac_only_instance;
|
||||
|
@ -153,7 +153,7 @@ pub fn initialize_workspace(
|
|||
})
|
||||
.detach();
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
if let Err(e) = fs::linux_watcher::global(|_| {}) {
|
||||
let message = format!(db::indoc!{r#"
|
||||
inotify_init returned {}
|
||||
|
@ -361,7 +361,7 @@ pub fn initialize_workspace(
|
|||
})
|
||||
.register_action(|_, _: &install_cli::Install, cx| {
|
||||
cx.spawn(|workspace, mut cx| async move {
|
||||
if cfg!(target_os = "linux") {
|
||||
if cfg!(any(target_os = "linux", target_os = "freebsd")) {
|
||||
let prompt = cx.prompt(
|
||||
PromptLevel::Warning,
|
||||
"CLI should already be installed",
|
||||
|
|
|
@ -144,7 +144,7 @@ impl OpenListener {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
|
||||
pub fn listen_for_cli_connections(opener: OpenListener) -> Result<()> {
|
||||
use release_channel::RELEASE_CHANNEL_NAME;
|
||||
use std::os::unix::net::UnixDatagram;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue