✎ cosmic: cosmic-edit — la 4ª aplicación, y el Cargo.lock miente por exceso
El editor de texto sella en b3:2323a325, igual que el dry-run. Es la más barata de las cuatro: depende de `cosmic-files` como CRATE con `default-features = false`, así que su árbol ya estaba compilado (68 min de enlace, no de compilación desde cero). Lo que aprendió esta receta, y que corrige un borde de la regla anterior: **el `Cargo.lock` lista lo POSIBLE, no lo ENCENDIDO**. Aparecen `gio-sys`, `glib-sys` y `gobject-sys` —que en cualquier otro paquete mandarían a declarar glib y de ahí a la cadena compartida— y sin embargo entran sólo por la feature `gvfs`, que se apaga. El lock dice el universo; las features dicen el recorte. Features: `--no-default-features --features dbus-config,wayland`. Fuera `gvfs` (pide las glib compartidas, el corpus las tiene estáticas) y `wgpu` (el que desbordó el filesystem dos veces en cosmic-files). La doble barra `pop-os//` que mordió en applets y settings acá está comentada en el Cargo.toml; verificado con grep ANTES del build. Evidencia: el binario enlaza sólo `libxkbcommon.so.0` y `libc.so` — dos NEEDED, el mínimo de la suite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -116,6 +116,10 @@ paquetes = [
|
||||
# La tercera: el panel de control. Habla con los daemons por zbus, así que NO arrastra
|
||||
# NetworkManager/udisks/accountsservice — sólo libdrm y dav1d sobre el juego fijo.
|
||||
"cosmic-settings",
|
||||
# La cuarta: el editor de texto, y la más barata de las cuatro — su árbol ya estaba compilado (usa
|
||||
# `cosmic-files` como crate, igual que la terminal). Su binario enlaza SÓLO `libxkbcommon` y
|
||||
# `libc.so`: dos NEEDED, el mínimo de todos los clientes de la suite.
|
||||
"cosmic-edit",
|
||||
# Datos, no binarios: el tema de iconos (y el hicolor del que hereda), las tablas de xkb y una
|
||||
# tipografía. Ninguno es dep de build de nadie y sin ellos el escritorio arranca roto — sin puntero,
|
||||
# sin teclado o con tofu.
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
# cosmic-edit — el editor de texto. **Cuarta aplicación con ventana** del catálogo, y la más barata
|
||||
# de las cuatro: su árbol de dependencias ya está compilado entero. Depende de `cosmic-files` como
|
||||
# CRATE (el selector de ficheros y el árbol de proyecto), igual que `cosmic-term`, y con la misma
|
||||
# línea: `default-features = false`. O sea que acá «ya se compiló» **sí** es cierto — al revés que
|
||||
# cuando `cosmic-files` pasó de librería a programa (ver su receta).
|
||||
#
|
||||
# ── EL `Cargo.lock` MIENTE POR EXCESO, Y ACÁ SE VE ──────────────────────────────────────────────
|
||||
# La regla de leer los crates `-sys` del lock antes de adivinar deps sigue siendo la buena, pero tiene
|
||||
# un borde: el lock lista lo que es POSIBLE, no lo que está ENCENDIDO. Acá aparecen `gio-sys`,
|
||||
# `glib-sys` y `gobject-sys` —que en cualquier otro paquete significarían «hay que declarar glib»—
|
||||
# y sin embargo esta receta no declara ninguna: entran sólo por la feature `gvfs`, que se apaga.
|
||||
# El lock dice el universo; las features dicen el recorte.
|
||||
#
|
||||
# ── FEATURES: `gvfs` y `wgpu` APAGADAS, por lo mismo que en cosmic-files ─────────────────────────
|
||||
# `default = ["dbus-config", "gvfs", "wgpu", "wayland"]`.
|
||||
# · `gvfs` → cosmic-files/gvfs → crates `gio`/`glib` por pkg-config sobre las glib **COMPARTIDAS**,
|
||||
# que el corpus sólo empaqueta estáticas. Se pierden los montajes remotos del diálogo de abrir,
|
||||
# no la edición local.
|
||||
# · `wgpu` → el árbol wgpu+naga+ash+glow+spirv a `codegen-units=1` desbordó el filesystem dos veces
|
||||
# construyendo cosmic-files. Sin él se pinta con tiny-skia, que es lo que hace el resto de los
|
||||
# clientes de la imagen (mesa es llvmpipe por software: el backend wgpu se caería a software
|
||||
# igual).
|
||||
# Quedan `dbus-config` (cosmic-config por zbus, Rust puro) y `wayland`.
|
||||
#
|
||||
# ── LO QUE NO PASÓ, Y VALE ANOTARLO ─────────────────────────────────────────────────────────────
|
||||
# La doble barra `pop-os//` que mordió en `cosmic-applets` y `cosmic-settings` acá está **comentada**
|
||||
# en el `Cargo.toml` (bloques `[patch.…]` de la rama `theme-v2`). Se verificó con `grep 'pop-os//'`
|
||||
# sobre `Cargo.toml` y `Cargo.lock` antes de construir: cuesta un segundo y evita un fetch fallido a
|
||||
# los cuarenta minutos.
|
||||
name = "cosmic-edit"
|
||||
version = "1.5.0"
|
||||
|
||||
[source]
|
||||
tarball = "https://github.com/pop-os/cosmic-edit/archive/epoch-1.5.0/cosmic-edit-epoch-1.5.0.tar.gz"
|
||||
sha256 = "d567902b1e04829eedd428cd37372137908947cfafccc14ba485b1ad58832cba"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
# Dinámico como todo cliente de la suite: `wayland-client` entra con la feature `dlopen` y un musl
|
||||
# estático no la honra — arranca y muere con «The wayland library could not be loaded» *teniendo*
|
||||
# el `.so`.
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
# Fase compile CUSTOM porque hay que elegir features a mano (`--no-default-features`), que la fase
|
||||
# autogenerada del lab no permite. `INSTALL_DIR` y `APPID` los exporta el justfile de upstream y los
|
||||
# lee el `build.rs` (crate `xdgen`) para generar el `.desktop` y el `.metainfo.xml` en
|
||||
# `target/xdgen/`; sin ellos el `.desktop` sale con rutas equivocadas, y ese fichero es justo lo que
|
||||
# hace que la aplicación aparezca en la biblioteca.
|
||||
compile = '''
|
||||
printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec zig cc -mcpu=baseline "$@"' > "$PWD/.hammer-zig-cc"
|
||||
chmod +x "$PWD/.hammer-zig-cc"
|
||||
RF="-C linker=$PWD/.hammer-zig-cc -C target-feature=-crt-static"
|
||||
rustc -vV | grep -q 'host: .*-alpine-' || RF="$RF -C link-self-contained=no"
|
||||
export INSTALL_DIR=/usr/share APPID=com.system76.CosmicEdit
|
||||
CC="$PWD/.hammer-zig-cc" RUSTFLAGS="$RF" cargo build --release --locked --offline \
|
||||
--no-default-features --features dbus-config,wayland
|
||||
'''
|
||||
install = '''
|
||||
mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo
|
||||
cp target/release/cosmic-edit /out/usr/bin/cosmic-edit
|
||||
chmod 755 /out/usr/bin/cosmic-edit
|
||||
cp target/xdgen/com.system76.CosmicEdit.desktop /out/usr/share/applications/ 2>/dev/null || true
|
||||
cp target/xdgen/com.system76.CosmicEdit.metainfo.xml /out/usr/share/metainfo/ 2>/dev/null || true
|
||||
for size in res/icons/hicolor/*; do
|
||||
[ -d "$size" ] || continue
|
||||
s=$(basename "$size")
|
||||
if [ -f "$size/apps/com.system76.CosmicEdit.svg" ]; then
|
||||
mkdir -p "/out/usr/share/icons/hicolor/$s/apps"
|
||||
cp "$size/apps/com.system76.CosmicEdit.svg" "/out/usr/share/icons/hicolor/$s/apps/"
|
||||
fi
|
||||
done
|
||||
'''
|
||||
|
||||
[deps]
|
||||
# El juego fijo de todo cliente de la suite, y nada más. `syntect`/`two-face` (resaltado), `grep`,
|
||||
# `ignore`, `notify` y `icu` son Rust puro; `dbus-config` habla por zbus. Sin `gvfs` no hay glib.
|
||||
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]
|
||||
Reference in New Issue
Block a user