It is currently not possible to build Squeekboard with only
packages that are available in Debian.
This is not likely to change until Squeekboard has been ported
to GTK4 or gtk4-layer-shell.
Until then, vendor the dependencies during the build,
so that one can still use the ".deb"-packages for testing.
Part-of: <https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/659>
Remove Fragile from the list of dependencies
It is not necessary for building 'gio' anymore,
since the upgrade to 'glib v2_58'.
Remove "online" and "reset_lock" Meson-options
Building Squeekboard should work offline.
Use a single "Cargo.toml"-file instead of splitting it into parts
and putting it back together when building.
Part-of: <https://gitlab.gnome.org/World/Phosh/squeekboard/-/merge_requests/623>
This commit is a bit bigger than it could have: Meson changes could have gone in separately from CI and Debian.
This commit looks more complicated than it should reasonably be. Alas, Cargo is a piece of work, and it doesn't let honest people just choose different versions of dependencies, leading to a cascade of misery. Several things were tried to curb the disaster:
- Cargo [feature] supports choosing dependencies, but doesn't support specifying dependency versions
- Cargo has a cfg() syntax in sections for choosing dependencies by build options, but it explicitly doesn't support selecting on features…
- Cargo allows choosing different dependencies based on features, so perhaps dependencies with different versions could live in stub crates pulled in as needed? Nope! If a dependency doesn't exist in the repo (and that's the point here), Cargo throws up its hands.
This means Cargo.toml needs to be generated based on the build type. More misery:
- we lose the simplicity of just doing `cargo.sh` for simple housekeeping like deps updates. HACKING.md was updated to reflect that. Perhaps that's inevitable - build options need to be like this.
- Some flaky adjustments needed in `cargo.sh` because of an additional argument that can be mistaken for an argument to the exec in `cargo run`.
- Specifying a custom `Cargo.toml` means Cargo can no longer find any tests, examples, benchmarks, or binaries, because it searches relative to the directory of `Cargo.toml`, which is now the build dir. Extra care needed to not forget about them now.
As soon as Cargo allows anything better for managing deps versions, the above should be undone in its favor.
Good side is that a couple bugs went away:
- build flags not always making it to Cargo
- arm64 builds were optional while they shouldn't
- test layouts in unit tests are loaded from an explicit directory now
The Bullseye versions of dependencies are canonical now, Buster considered legacy.
Debian uses a separate registry for the packages it distributes. Checksums for some Debian packages don't match anything that's available on crates.io, which is the default source of dependencies. *linked-hash-map* in particular doesn't provide any hash.
As a result, Debian's `Cargo.lock` and crates.io's `Cargo.lock` are not matching, and building is only possible with one or the other, depending on what's checked in.
As a separate issue, Debian packages are usually not checked in in multiple versions, so checking in Debian's `Cargo.lock` would result in the package not building whenever a bugfix is distributed (due to checksum changes).
This change removes the crates.io `Cargo.lock` so that a new one will be created whenever a .deb is built, solving the above. What keeps falsely passing builds from happening is `Cargo.toml` specifying no interface changes, as well as Build-Depends, which seem enough for any other Debian package.