Run 31383454158, arch job. It compiled all 26 other components over two
hours and eighteen minutes and then failed on the last line of `build`:
/usr/sbin/make -C xdg-desktop-portal-cosmic all
make: *** No rule to make target 'all'. Stop.
xdg-desktop-portal-cosmic has no Makefile. It has a justfile, with `build`
and `install` recipes, and the submodule is clean at the commit this fork
pins.
This is upstream's, not something introduced here. The line dates from
2022 (f4fb6a86), pop-os/cosmic-epoch master still carries it verbatim, and
upstream pins the same portal commit this fork does -- f211aa37,
epoch-1.5.0 -- so `just build` on upstream cosmic-epoch fails in exactly
the same place. The portal moved from a Makefile to a justfile and the
meta-repository's recipe was never updated. It goes unnoticed because
distributions build COSMIC one component at a time and never take this
path; it takes a full meta-build to reach the failure, and the failure is
on the very last line.
`build` rather than `build-release`: the portal has no build-release
recipe, and its `build` defaults to debug='0', which selects --release.
`install` takes rootdir/prefix rather than DESTDIR/prefix, being a
justfile.
Every other delegation in this justfile was checked the same way -- each
`make -C dir target` against that directory's Makefile targets, each
`just dir/recipe` against that directory's recipes, following justfile
imports -- and the portal was the only one that did not resolve.
`just build` built 26 upstream components and our two forks. `just install`
installed the same set. Neither touched cosmic-conf or anything under config/,
which meant the recipe that is supposed to produce a desktop produced one with
no config compiler, no bar layout, no rofi theme and no power menu -- a
HyprCosmic session that comes up to a blank screen and cannot be logged out of.
So three lines, in the places the existing recipes already establish:
build cargo build --release --manifest-path cosmic-conf/Cargo.toml
install the binary to $prefix/bin, then tools/install-assets.sh
clean cosmic-conf/target
cargo directly rather than `just cosmic-conf/build-release`, because cosmic-conf
is a crate in this repository rather than a submodule and has no Justfile of its
own to delegate to.
install-assets.sh runs last and with --no-session. Last because it is the only
step whose output is worth reading: several of the files it places name
/usr/share/hyprcosmic as a literal -- a .rasi has no variables and the autostart
file is deliberately not a shell -- so a prefix other than /usr installs them
where nothing will look, and the script says which ones. --no-session because
cosmic-session/install has already placed start-hyprcosmic and
hyprcosmic.desktop by then, and installing them twice would leave it unclear
which recipe owns them.
Verified by running the two new install lines verbatim into a staging root:
eight files, the cosmic-conf binary and the seven shared assets, and no session
entry point among them.