From b7f844ec4746309a35eb939e8f83cd2c9c212f44 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Wed, 26 Aug 2026 19:35:21 +0200 Subject: [PATCH 1/2] fix: switch from xdgen build script to build.rs Requires manually setting `LOCKSTEP_XML_PATH` to fix the atspi-common build error in zbus-lockstep. --- Cargo.lock | 38 +++++ Cargo.toml | 3 + build.rs | 25 ++- justfile | 10 +- scripts/xdgen/Cargo.lock | 316 -------------------------------------- scripts/xdgen/Cargo.toml | 7 - scripts/xdgen/src/main.rs | 28 ---- 7 files changed, 69 insertions(+), 358 deletions(-) delete mode 100644 scripts/xdgen/Cargo.lock delete mode 100644 scripts/xdgen/Cargo.toml delete mode 100644 scripts/xdgen/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index a2f9e678..c873514b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1201,6 +1201,7 @@ dependencies = [ "tracing", "tracing-journald", "tracing-subscriber", + "xdgen", "zbus", ] @@ -1981,6 +1982,16 @@ dependencies = [ "xdg", ] +[[package]] +name = "freedesktop_entry_parser" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b368437186ec63ceb50d0832ee1ebcb5878037fe16ead1c68081d4aee0d140a" +dependencies = [ + "indexmap 2.11.4", + "nom", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -7291,6 +7302,18 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" +[[package]] +name = "xdgen" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25af88f104f06d5aeb80c77e5eb85e6f6f355f86f6e34307a14befd716efe4bf" +dependencies = [ + "fluent", + "freedesktop_entry_parser", + "unic-langid", + "xmltree", +] + [[package]] name = "xkbcommon" version = "0.7.0" @@ -7346,12 +7369,27 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "xml" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f45bb2c13fec6a6cb4c0f76a7e94839e110a14ec803ec2940777a94c347bc52" + [[package]] name = "xml-rs" version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" +[[package]] +name = "xmltree" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc04313cab124e498ab1724e739720807b6dc405b9ed0edc5860164d2e4ff70" +dependencies = [ + "xml", +] + [[package]] name = "xmlwriter" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 251c6891..ea803e66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,9 @@ default = [] wgpu = ["libcosmic/wgpu"] console = ["tokio/tracing"] +[build-dependencies] +xdgen = "0.1.0" + [dependencies] console-subscriber = "0.5.0" futures = "0.3.31" diff --git a/build.rs b/build.rs index f328e4d9..26db6bb0 100644 --- a/build.rs +++ b/build.rs @@ -1 +1,24 @@ -fn main() {} +use std::{env, fs, path::PathBuf}; +use xdgen::{App, Context, FluentString}; + +fn main() { + let id = env::var("APP_ID").unwrap(); + let ctx = Context::new("i18n", env::var("CARGO_PKG_NAME").unwrap()).unwrap(); + let app = App::new(FluentString("xdg-name")) + .comment(FluentString("xdg-comment")) + .keywords(FluentString("xdg-keywords")); + let output = PathBuf::from("target/xdgen"); + fs::create_dir_all(&output).unwrap(); + fs::write( + output.join(format!("{}.desktop", id)), + app.expand_desktop(format!("data/{}.desktop", id), &ctx) + .unwrap(), + ) + .unwrap(); + fs::write( + output.join(format!("{}.metainfo.xml", id)), + app.expand_metainfo(format!("data/{}.metainfo.xml", id), &ctx) + .unwrap(), + ) + .unwrap(); +} diff --git a/justfile b/justfile index 4cdfeb93..ccf0d895 100644 --- a/justfile +++ b/justfile @@ -2,6 +2,7 @@ mod cargo 'cargo.just' name := 'cosmic-launcher' appid := 'com.system76.CosmicLauncher' +export APP_ID := appid rootdir := '' prefix := '/usr' @@ -18,10 +19,11 @@ appdata-dst := base-dir / 'share' / 'appdata' / appdata desktop-dst := base-dir / 'share' / 'applications' / desktop icon-dst := base-dir / 'share' / 'icons' / 'hicolor' / 'scalable' / 'apps' / appid + '.svg' +export LOCKSTEP_XML_PATH := absolute_path('vendor/atspi-common/xml') export RUSTFLAGS := env_var_or_default('RUSTFLAGS', '') + ' --cfg tokio_unstable ' # Default recipe which runs `just build-release` -default: xdgen build-release +default: build-release # Runs `cargo clean` clean: cargo::clean @@ -50,15 +52,11 @@ check *args: (cargo::check args) check-json: (check '--message-format=json') # Vendor dependencies locally -vendor: xdgen cargo::vendor +vendor: cargo::vendor # Extracts vendored dependencies vendor-extract: cargo::vendor-extract -# Generate desktop entries and appstream metadata with translations -xdgen: - env APP_ID={{appid}} APP_NAME={{name}} cargo run --manifest-path scripts/xdgen/Cargo.toml - # Build and run with tokio-console enabled tokio-console: (build-release '--features console') env TOKIO_CONSOLE=1 {{bin-src}} diff --git a/scripts/xdgen/Cargo.lock b/scripts/xdgen/Cargo.lock deleted file mode 100644 index 8bb49f2c..00000000 --- a/scripts/xdgen/Cargo.lock +++ /dev/null @@ -1,316 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "displaydoc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "fluent" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" -dependencies = [ - "fluent-bundle", - "unic-langid", -] - -[[package]] -name = "fluent-bundle" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" -dependencies = [ - "fluent-langneg", - "fluent-syntax", - "intl-memoizer", - "intl_pluralrules", - "rustc-hash", - "self_cell", - "smallvec", - "unic-langid", -] - -[[package]] -name = "fluent-langneg" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "fluent-syntax" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" -dependencies = [ - "memchr", - "thiserror", -] - -[[package]] -name = "freedesktop_entry_parser" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b368437186ec63ceb50d0832ee1ebcb5878037fe16ead1c68081d4aee0d140a" -dependencies = [ - "indexmap", - "nom", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "indexmap" -version = "2.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "intl-memoizer" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" -dependencies = [ - "type-map", - "unic-langid", -] - -[[package]] -name = "intl_pluralrules" -version = "7.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "nom" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" -dependencies = [ - "memchr", -] - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rustc-hash" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" - -[[package]] -name = "self_cell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "smallvec" -version = "1.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" - -[[package]] -name = "syn" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tinystr" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" -dependencies = [ - "displaydoc", - "serde_core", - "zerovec", -] - -[[package]] -name = "type-map" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" -dependencies = [ - "rustc-hash", -] - -[[package]] -name = "unic-langid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" -dependencies = [ - "unic-langid-impl", -] - -[[package]] -name = "unic-langid-impl" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" -dependencies = [ - "tinystr", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "xdgen" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25af88f104f06d5aeb80c77e5eb85e6f6f355f86f6e34307a14befd716efe4bf" -dependencies = [ - "fluent", - "freedesktop_entry_parser", - "unic-langid", - "xmltree", -] - -[[package]] -name = "xdgen-generate" -version = "0.1.0" -dependencies = [ - "xdgen", -] - -[[package]] -name = "xml" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f45bb2c13fec6a6cb4c0f76a7e94839e110a14ec803ec2940777a94c347bc52" - -[[package]] -name = "xmltree" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc04313cab124e498ab1724e739720807b6dc405b9ed0edc5860164d2e4ff70" -dependencies = [ - "xml", -] - -[[package]] -name = "zerofrom" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" - -[[package]] -name = "zerovec" -version = "0.11.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8" -dependencies = [ - "serde", - "zerofrom", -] diff --git a/scripts/xdgen/Cargo.toml b/scripts/xdgen/Cargo.toml deleted file mode 100644 index 74250797..00000000 --- a/scripts/xdgen/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "xdgen-generate" -version = "0.1.0" -edition = "2024" - -[dependencies] -xdgen = "0.1.0" diff --git a/scripts/xdgen/src/main.rs b/scripts/xdgen/src/main.rs deleted file mode 100644 index 1fff622a..00000000 --- a/scripts/xdgen/src/main.rs +++ /dev/null @@ -1,28 +0,0 @@ -use std::path::{Path, PathBuf}; -use std::{env, fs}; -use xdgen::{App, Context, FluentString}; - -fn main() { - let ctx = Context::new("i18n", env::var("APP_NAME").unwrap()).unwrap(); - let app = App::new(FluentString("xdg-name")) - .comment(FluentString("xdg-comment")) - .keywords(FluentString("xdg-keywords")); - - let app_id = env::var("APP_ID").unwrap(); - let app_data = env::var("APP_DATA").unwrap_or_else(|_| String::from("data")); - - let output = Path::new("target/xdgen/"); - - let desktop_entry_path = PathBuf::from(format!("{app_data}/{app_id}.desktop")); - if desktop_entry_path.exists() { - let desktop_entry = app.expand_desktop(desktop_entry_path, &ctx).unwrap(); - fs::create_dir_all(output).unwrap(); - fs::write(output.join(format!("{app_id}.desktop")), desktop_entry).unwrap(); - } - - let metainfo_path = PathBuf::from(format!("{app_data}/{app_id}.metainfo.xml")); - if metainfo_path.exists() { - let metainfo = app.expand_metainfo(metainfo_path, &ctx).unwrap(); - fs::write(output.join(format!("{app_id}.metainfo.xml")), metainfo).unwrap(); - } -} From bdf69479b9227bfd2658154df4af3c620bd3e5b2 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Wed, 26 Aug 2026 19:40:25 +0200 Subject: [PATCH 2/2] chore: update freedesktop-desktop-entry --- Cargo.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c873514b..0689063d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1969,9 +1969,9 @@ dependencies = [ [[package]] name = "freedesktop-desktop-entry" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28273c5c6b97a5f07724f6652f064c0c7f637f9aa5e7c09c83bc3bc4ad4ea245" +checksum = "1f805583a11d4b14f17370a74731e93433c5740d8c401ca8605d3476f4d31fc0" dependencies = [ "bstr", "gettext-rs", @@ -2168,9 +2168,9 @@ dependencies = [ [[package]] name = "gettext-rs" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5857dc1b7f0fee86961de833f434e29494d72af102ce5355738c0664222bdf" +checksum = "9df5e3fa8c077b15fdfa8ce130e2bc73d663b8aaa6d51b71421b8659980b1d80" dependencies = [ "gettext-sys", "locale_config", @@ -5482,7 +5482,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2",