Add flatpak build plumbing
- io.github.bemagri.nomines.yml: builds libsigc++/glibmm/cairomm/pangomm/gtkmm from tarballs against the GNOME 46 runtime, then the app from the v1.0.0 tag - Icon: app-id-named PNGs (128/512) for flatpak export, svg kept for native installs; desktop file Icon updated - README/AGENTS.md: flatpak build instructions and version traps
This commit is contained in:
@@ -6,6 +6,9 @@ bin/
|
|||||||
lib/
|
lib/
|
||||||
obj/
|
obj/
|
||||||
|
|
||||||
|
# Flatpak
|
||||||
|
.flatpak-builder/
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
*.d
|
*.d
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ meson compile -C build
|
|||||||
- Version `1.0.0` is stamped in FOUR places: `meson.build`, `flake.nix`, `default.nix`, and the `<releases>` entry in `resources/io.github.bemagri.nomines.metainfo.xml`. Bump all four together.
|
- Version `1.0.0` is stamped in FOUR places: `meson.build`, `flake.nix`, `default.nix`, and the `<releases>` entry in `resources/io.github.bemagri.nomines.metainfo.xml`. Bump all four together.
|
||||||
- Release sanity: `nix build .` (validates the flake), `desktop-file-validate` + `appstreamcli validate --no-net` on the resources (wired up as meson tests).
|
- Release sanity: `nix build .` (validates the flake), `desktop-file-validate` + `appstreamcli validate --no-net` on the resources (wired up as meson tests).
|
||||||
- The metainfo screenshot URL points at `raw.githubusercontent.com/bemagri/nomines/main/...` — it 404s until the repo is published; replace if the repo moves.
|
- The metainfo screenshot URL points at `raw.githubusercontent.com/bemagri/nomines/main/...` — it 404s until the repo is published; replace if the repo moves.
|
||||||
|
- Flatpak: `io.github.bemagri.nomines.yml` builds libsigc++/glibmm/cairomm/pangomm/gtkmm from tarballs against the GNOME 46 runtime (matches the gtkmm 4.14/glib 2.80 stack we develop against), then the app from the `v1.0.0` git tag. The pinned `commit:` must match the pushed tag. The leaderboard needs the `--filesystem=xdg-config/nomines:create` finish-arg — don't drop it. Local builds land in `.flatpak-builder/` (gitignored); `flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml`.
|
||||||
|
- Flatpak module version traps (all verified by building): gtkmm 4.14 needs pangomm >= 2.50 (which still installs `pangomm-2.48.pc`; 2.48.x is too old), and cairomm tarballs live on `cairographics.org/releases`, not download.gnome.org. `appstream-compose: false` is set in the manifest because flatpak-builder's compose fetches the (still-404) metainfo screenshot URL — remove it once the repo is public. Flatpak's icon validation can't decode SVGs, so PNG icons (128/512) are installed under the app-id name and the svg is cleanup-removed; keep that convention.
|
||||||
|
|
||||||
## Gotchas
|
## Gotchas
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,20 @@ The Nix flake also provides a development shell with all dependencies:
|
|||||||
nix develop
|
nix develop
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Building a Flatpak
|
||||||
|
|
||||||
|
NoMines ships a Flatpak manifest (`io.github.bemagri.nomines.yml`) that builds
|
||||||
|
the gtkmm stack (libsigc++, glibmm, gtkmm) against the GNOME 46 runtime:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
flatpak install -y flathub org.gnome.Platform//46 org.gnome.Sdk//46
|
||||||
|
flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml
|
||||||
|
flatpak run io.github.bemagri.nomines
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: the manifest's `commit` must match the pushed `v1.0.0` tag (update it if
|
||||||
|
the history is rebased before pushing).
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# Flatpak manifest for NoMines.
|
||||||
|
#
|
||||||
|
# The GNOME runtime pins the exact gtk4/glib versions the gtkmm stack is
|
||||||
|
# built against: 46 = gtk 4.14 + glib 2.80, matching gtkmm 4.14/glibmm 2.80.
|
||||||
|
#
|
||||||
|
# Build locally:
|
||||||
|
# flatpak install -y flathub org.gnome.Platform//46 org.gnome.Sdk//46
|
||||||
|
# flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml
|
||||||
|
# flatpak run io.github.bemagri.nomines
|
||||||
|
|
||||||
|
app-id: io.github.bemagri.nomines
|
||||||
|
runtime: org.gnome.Platform
|
||||||
|
runtime-version: '46'
|
||||||
|
sdk: org.gnome.Sdk
|
||||||
|
command: nomines
|
||||||
|
|
||||||
|
# flatpak-builder's appstreamcli compose fetches the metainfo screenshot URL;
|
||||||
|
# it 404s until the repo is published. Remove this line once the repo is
|
||||||
|
# public (Flathub CI runs its own compose/validation anyway).
|
||||||
|
appstream-compose: false
|
||||||
|
|
||||||
|
finish-args:
|
||||||
|
- --share=ipc
|
||||||
|
- --socket=fallback-x11
|
||||||
|
- --socket=wayland
|
||||||
|
- --device=dri
|
||||||
|
# Leaderboard persistence (~/.config/nomines/leaderboard.ini)
|
||||||
|
- --filesystem=xdg-config/nomines:create
|
||||||
|
|
||||||
|
build-options:
|
||||||
|
no-debuginfo: true
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
- /include
|
||||||
|
- /lib/pkgconfig
|
||||||
|
- /lib/cmake
|
||||||
|
- /lib/girepository-1.0
|
||||||
|
- /lib/*.a
|
||||||
|
- /lib/*.la
|
||||||
|
- /share/aclocal
|
||||||
|
- /share/doc
|
||||||
|
- /share/gir-1.0
|
||||||
|
- /share/gtk-doc
|
||||||
|
- /share/pkgconfig
|
||||||
|
# flatpak's icon validation can't decode SVGs; the PNGs suffice
|
||||||
|
- /share/icons/hicolor/scalable/apps/*.svg
|
||||||
|
|
||||||
|
modules:
|
||||||
|
- name: libsigc++
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dbuild-tests=false
|
||||||
|
- -Dbuild-examples=false
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz
|
||||||
|
sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17
|
||||||
|
|
||||||
|
- name: glibmm
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dmaintainer-mode=false
|
||||||
|
- -Dbuild-documentation=false
|
||||||
|
- -Dbuild-examples=false
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://download.gnome.org/sources/glibmm/2.80/glibmm-2.80.0.tar.xz
|
||||||
|
sha256: 539b0a29e15a96676c4f0594541250566c5ca44da5d4d87a3732fa2d07909e4a
|
||||||
|
|
||||||
|
- name: cairomm
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dmaintainer-mode=false
|
||||||
|
- -Dbuild-documentation=false
|
||||||
|
- -Dbuild-examples=false
|
||||||
|
- -Dbuild-tests=false
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://www.cairographics.org/releases/cairomm-1.16.2.tar.xz
|
||||||
|
sha256: 6a63bf98a97dda2b0f55e34d1b5f3fb909ef8b70f9b8d382cb1ff3978e7dc13f
|
||||||
|
|
||||||
|
- name: pangomm
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dmaintainer-mode=false
|
||||||
|
- -Dbuild-documentation=false
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
# gtkmm 4.14 needs pangomm >= 2.50.0 (which still installs the
|
||||||
|
# pangomm-2.48.pc name). 2.48.x is too old.
|
||||||
|
url: https://download.gnome.org/sources/pangomm/2.50/pangomm-2.50.2.tar.xz
|
||||||
|
sha256: 1bc5ab4ea3280442580d68318226dab36ceedfc3288f9d83711cf7cfab50a9fb
|
||||||
|
|
||||||
|
- name: gtkmm
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dmaintainer-mode=false
|
||||||
|
- -Dbuild-documentation=false
|
||||||
|
- -Dbuild-demos=false
|
||||||
|
- -Dbuild-tests=false
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://download.gnome.org/sources/gtkmm/4.14/gtkmm-4.14.0.tar.xz
|
||||||
|
sha256: 9350a0444b744ca3dc69586ebd1b6707520922b6d9f4f232103ce603a271ecda
|
||||||
|
|
||||||
|
- name: nomines
|
||||||
|
buildsystem: meson
|
||||||
|
sources:
|
||||||
|
- type: git
|
||||||
|
url: https://github.com/bemagri/nomines
|
||||||
|
tag: v1.0.0
|
||||||
|
commit: 2dbf64a2e8c9bf828d69a4fc27f2af1bbfa780f2
|
||||||
+14
-2
@@ -37,10 +37,22 @@ executable('nomines',
|
|||||||
install : true
|
install : true
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install icon
|
# Install icon (named after the app id so flatpak export picks it up;
|
||||||
|
# PNG sizes are required by flatpak/flathub icon validation)
|
||||||
install_data(
|
install_data(
|
||||||
'resources/nomines.svg',
|
'resources/nomines.svg',
|
||||||
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/scalable/apps')
|
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/scalable/apps'),
|
||||||
|
rename: 'io.github.bemagri.nomines.svg'
|
||||||
|
)
|
||||||
|
install_data(
|
||||||
|
'resources/nomines-128.png',
|
||||||
|
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/128x128/apps'),
|
||||||
|
rename: 'io.github.bemagri.nomines.png'
|
||||||
|
)
|
||||||
|
install_data(
|
||||||
|
'resources/nomines-512.png',
|
||||||
|
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/512x512/apps'),
|
||||||
|
rename: 'io.github.bemagri.nomines.png'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install desktop file
|
# Install desktop file
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ GenericName=Minesweeper Game
|
|||||||
Comment=Classic minesweeper game with modern GTK UI
|
Comment=Classic minesweeper game with modern GTK UI
|
||||||
Keywords=game;puzzle;mine;
|
Keywords=game;puzzle;mine;
|
||||||
Exec=nomines
|
Exec=nomines
|
||||||
Icon=nomines
|
Icon=io.github.bemagri.nomines
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=Game;LogicGame;
|
Categories=Game;LogicGame;
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Reference in New Issue
Block a user