docs(INSTALL): native run-time dependencies

This commit is contained in:
Alain Emilia Anna Zscheile 2024-12-31 20:01:49 +01:00
parent 1f7c6eafc7
commit 7f48888c14
2 changed files with 33 additions and 2 deletions

View File

@ -103,6 +103,32 @@ You can then invoke the application from your terminal by running
topola-egui topola-egui
``` ```
#### Native run-time dependencies
On Linux and BSDs, the `egui` depends on the native graphics libraries (X11, Wayland),
and requires [GNOME `zenity`](https://gitlab.gnome.org/GNOME/zenity) when using `xdg-portal`
(which is the default) as the backend for [`rfd`](https://docs.rs/rfd) (which we use for file chooser dialogs).
If the Topola GUI crashes on startup (no window is shown), necessary graphics libraries (X11, Wayland)
might be missing. Note that running `ldd` on the `topola-egui` executable doesn't show these,
they are loaded dynamically (via some `dlopen`-like mechanism) on startup.
If no file chooser dialog is shown (e.g. when trying to Open a DSN file),
and, if `topola-egui` is started from a terminal, an error message like:
```
[2025-01-01T01:16:17Z ERROR rfd::backend::xdg_desktop_portal] pick_file error No such file or directory (os error 2)
```
is emitted (which should only happen on Linux/BSDs and similar environments), then
[GNOME `zenity`](https://gitlab.gnome.org/GNOME/zenity) is not installed, but is required
for the file choser to work.
Alternatively, one might try the alternative `gtk3` backend for `rfd` by enabling the `gtk3`
feature of `topola-egui`, e.g.
```
cargo build -p topola-egui --release --no-default-features --features disable_contracts --features gtk3
```
This is mostly interesting for people who want to package Topola, and allow exposing features
(e.g. Gentoo Linux / Portage)
#### Building and running without installing #### Building and running without installing
If you chose not to install the GUI application, you can build and run If you chose not to install the GUI application, you can build and run

View File

@ -9,8 +9,10 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[features] [features]
default = ["disable_contracts"] default = ["disable_contracts", "xdg-portal"]
disable_contracts = ["topola/disable_contracts"] disable_contracts = ["topola/disable_contracts"]
gtk3 = ["rfd/gtk3"]
xdg-portal = ["rfd/xdg-portal"]
[dependencies] [dependencies]
derive-getters.workspace = true derive-getters.workspace = true
@ -21,7 +23,6 @@ icu_experimental = "0.2"
icu_locale_core = "2.0.0-beta1" icu_locale_core = "2.0.0-beta1"
log = "0.4" log = "0.4"
petgraph.workspace = true petgraph.workspace = true
rfd = "0.15"
rstar.workspace = true rstar.workspace = true
serde.workspace = true serde.workspace = true
serde_json.workspace = true serde_json.workspace = true
@ -41,6 +42,10 @@ version = "0.29"
default-features = false default-features = false
features = ["accesskit", "default_fonts", "glow", "persistence"] features = ["accesskit", "default_fonts", "glow", "persistence"]
[dependencies.rfd]
version = "0.15"
default-features = false
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
futures-lite = "2.5" futures-lite = "2.5"
env_logger = "0.11" env_logger = "0.11"