From 97565e415d5a1c0f8370aa41f8fdf989000a2930 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 1 Aug 2026 15:34:28 +0100 Subject: [PATCH] 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 --- .gitignore | 3 + AGENTS.md | 2 + README.md | 14 +++ io.github.bemagri.nomines.yml | 112 ++++++++++++++++++++ meson.build | 16 ++- resources/io.github.bemagri.nomines.desktop | 2 +- resources/nomines-128.png | Bin 0 -> 5221 bytes resources/nomines-512.png | Bin 0 -> 22820 bytes 8 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 io.github.bemagri.nomines.yml create mode 100644 resources/nomines-128.png create mode 100644 resources/nomines-512.png diff --git a/.gitignore b/.gitignore index a666135..008bea8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ bin/ lib/ obj/ +# Flatpak +.flatpak-builder/ + # Prerequisites *.d diff --git a/AGENTS.md b/AGENTS.md index 26f56bb..0b0b4a9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 `` 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). - 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 diff --git a/README.md b/README.md index 2c09fe5..617e6ff 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,20 @@ The Nix flake also provides a development shell with all dependencies: 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 Contributions are welcome! Please feel free to submit a Pull Request. diff --git a/io.github.bemagri.nomines.yml b/io.github.bemagri.nomines.yml new file mode 100644 index 0000000..7362284 --- /dev/null +++ b/io.github.bemagri.nomines.yml @@ -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 diff --git a/meson.build b/meson.build index e86beea..030954d 100644 --- a/meson.build +++ b/meson.build @@ -37,10 +37,22 @@ executable('nomines', 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( '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 diff --git a/resources/io.github.bemagri.nomines.desktop b/resources/io.github.bemagri.nomines.desktop index 4cb4394..f33e95d 100644 --- a/resources/io.github.bemagri.nomines.desktop +++ b/resources/io.github.bemagri.nomines.desktop @@ -4,7 +4,7 @@ GenericName=Minesweeper Game Comment=Classic minesweeper game with modern GTK UI Keywords=game;puzzle;mine; Exec=nomines -Icon=nomines +Icon=io.github.bemagri.nomines Terminal=false Type=Application Categories=Game;LogicGame; diff --git a/resources/nomines-128.png b/resources/nomines-128.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f2488a34ec017473aad7b77c9cd3f52644fbdc GIT binary patch literal 5221 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 literal 0 HcmV?d00001 diff --git a/resources/nomines-512.png b/resources/nomines-512.png new file mode 100644 index 0000000000000000000000000000000000000000..5f892942ebaea698395efd59e04ae241fa672e99 GIT binary patch literal 22820 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
s6SR|&zw$o%Ow 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