Packaging
Makefile
Following the Makefile section, we create it with the following content:
makefile
.PHONY: all install uninstall test build mo desktop metainfo
PREFIX ?= /usr
PO_LOCATION ?= po
LOCALE_LOCATION ?= /share/locale
all: desktop metainfo bindings build
bindings:
$(CRYSTAL_LOCATION)shards install
./bin/gi-crystal
build:
MY_APP_LOCALE_LOCATION="$(PREFIX)$(LOCALE_LOCATION)" $(CRYSTAL_LOCATION)shards build -Dpreview_mt --release --no-debug
test:
$(CRYSTAL_LOCATION)crystal spec -Dpreview_mt --order random
gresource:
glib-compile-resources --sourcedir data --target data/dev.geopjr.tinystats.gresource data/dev.geopjr.tinystats.gresource.xml
mo:
mkdir -p $(PO_LOCATION)/mo
for lang in `cat "$(PO_LOCATION)/LINGUAS"`; do \
if [[ "$$lang" == 'en' || "$$lang" == '' ]]; then continue; fi; \
mkdir -p "$(PREFIX)$(LOCALE_LOCATION)/$$lang/LC_MESSAGES"; \
msgfmt "$(PO_LOCATION)/$$lang.po" -o "$(PO_LOCATION)/mo/$$lang.mo"; \
install -D -m 0644 "$(PO_LOCATION)/mo/$$lang.mo" "$(PREFIX)$(LOCALE_LOCATION)/$$lang/LC_MESSAGES/dev.geopjr.tinystats.mo"; \
done
metainfo:
msgfmt --xml --template data/dev.geopjr.tinystats.metainfo.xml.in -d "$(PO_LOCATION)" -o data/dev.geopjr.tinystats.metainfo.xml
desktop:
msgfmt --desktop --template data/dev.geopjr.tinystats.desktop.in -d "$(PO_LOCATION)" -o data/dev.geopjr.tinystats.desktop
install: mo
install -D -m 0755 bin/tiny-stats $(PREFIX)/bin/tiny-stats
install -D -m 0644 data/dev.geopjr.tinystats.desktop $(PREFIX)/share/applications/dev.geopjr.tinystats.desktop
install -D -m 0644 data/icons/dev.geopjr.tinystats.svg $(PREFIX)/share/icons/hicolor/scalable/apps/dev.geopjr.tinystats.svg
install -D -m 0644 data/icons/dev.geopjr.tinystats-symbolic.svg $(PREFIX)/share/icons/hicolor/symbolic/apps/dev.geopjr.tinystats-symbolic.svg
gtk-update-icon-cache /usr/share/icons/hicolor
uninstall:
rm -f $(PREFIX)/bin/tiny-stats
rm -f $(PREFIX)/share/applications/dev.geopjr.tinystats.desktop
rm -f $(PREFIX)/share/icons/hicolor/scalable/apps/dev.geopjr.tinystats.svg
rm -f $(PREFIX)/share/icons/hicolor/symbolic/apps/dev.geopjr.tinystats-symbolic.svg
rm -rf $(PREFIX)$(LOCALE_LOCATION)/*/*/dev.geopjr.tinystats.mo
gtk-update-icon-cache /usr/share/icons/hicolor
Flatpak (data/dev.geopjr.tinystats.json
)
While it does look a bit messy, it covers everything needed. Dependencies generated using the script mentioned on the Flatpak section.
json
{
"app-id": "dev.geopjr.tinystats",
"runtime": "org.gnome.Platform",
"runtime-version": "41",
"sdk": "org.gnome.Sdk",
"command": "tiny-stats",
"finish-args": ["--socket=wayland", "--socket=fallback-x11", "--share=ipc", "--device=dri"],
"cleanup": ["/include", "/lib/pkgconfig", "/share/doc", "/share/man", "*.a", "*.la"],
"modules": [
{
"name": "livevent",
"sources": [
{
"type": "git",
"url": "https://github.com/libevent/libevent.git",
"tag": "release-2.1.12-stable"
}
]
},
{
"name": "libyaml",
"sources": [
{
"type": "archive",
"url": "https://github.com/yaml/libyaml/releases/download/0.2.5/yaml-0.2.5.tar.gz",
"sha256": "c642ae9b75fee120b2d96c712538bd2cf283228d2337df2cf2988e3c02678ef4"
}
]
},
{
"name": "tinystats",
"buildsystem": "simple",
"build-options": {
"append-path": "/run/build/tinystats/crystal/bin/"
},
"build-commands": [
"for i in ./lib/*/; do ln -snf \"..\" \"$i/lib\"; done",
"cd lib/gi-crystal && crystal build src/generator/main.cr && cd ../.. && mkdir ./bin && cp lib/gi-crystal/main ./bin/gi-crystal",
"./bin/gi-crystal",
"TINY_LOCALE_LOCATION=\"/app/share/locale\" crystal/bin/crystal build ./src/tiny-stats.cr -Dpreview_mt --no-debug --release",
"msgfmt --xml --template data/dev.geopjr.tinystats.metainfo.xml.in -d \"./po\" -o data/dev.geopjr.tinystats.metainfo.xml",
"msgfmt --desktop --template data/dev.geopjr.tinystats.desktop.in -d \"./po\" -o data/dev.geopjr.tinystats.desktop",
"mkdir -p po/mo && for lang in `cat \"po/LINGUAS\"`; do if [[ \"$lang\" == 'en' || \"$lang\" == '' ]]; then continue; fi; mkdir -p \"/app/share/locale/$lang/LC_MESSAGES\"; msgfmt \"po/$lang.po\" -o \"po/mo/$lang.mo\"; install -D -m 0644 \"po/mo/$lang.mo\" \"/app/share/locale/$lang/LC_MESSAGES/dev.geopjr.tinystats.mo\"; done"
],
"post-install": [
"install -D -m 0755 tiny-stats /app/bin/tiny-stats",
"install -D -m 0644 data/dev.geopjr.tinystats.desktop /app/share/applications/dev.geopjr.tinystats.desktop",
"install -D -m 0644 data/icons/dev.geopjr.tinystats.svg /app/share/icons/hicolor/scalable/apps/dev.geopjr.tinystats.svg",
"install -D -m 0644 data/icons/dev.geopjr.tinystats-symbolic.svg /app/share/icons/hicolor/symbolic/apps/dev.geopjr.tinystats-symbolic.svg",
"install -D -m 0644 data/dev.geopjr.tinystats.metainfo.xml /app/share/metainfo/dev.geopjr.tinystats.metainfo.xml"
],
"sources": [
{
"type": "dir",
"path": "..",
"skip": [
".rucksack",
".rucksack.toc",
"lib/",
"tiny-stats",
"bin/",
"data/dev.geopjr.tinystats.desktop",
"data/dev.geopjr.tinystats.gresource",
"po/mo/"
]
},
{
"type": "archive",
"dest": "crystal/",
"url": "https://github.com/crystal-lang/crystal/releases/download/1.4.1/crystal-1.4.1-1-linux-x86_64.tar.gz",
"sha256": "a5bdf1b78897b3cdc7d715b5f7adff79e84401d39b7ab546ab3249dc17fc770c"
},
{
"type": "git",
"url": "https://github.com/geopjr/gettext.cr.git",
"tag": "v1.0.0",
"dest": "lib/gettext"
},
{
"type": "git",
"url": "https://github.com/hugopl/gi-crystal.git",
"tag": "v0.13.1",
"dest": "lib/gi-crystal"
},
{
"type": "git",
"url": "https://github.com/hugopl/gtk4.cr.git",
"tag": "v0.11.1",
"dest": "lib/gtk4"
},
{
"type": "git",
"url": "https://github.com/crystal-community/hardware.git",
"tag": "v0.5.2",
"dest": "lib/hardware"
},
{
"type": "git",
"url": "https://github.com/geopjr/non-blocking-spawn.git",
"tag": "v1.0.2",
"dest": "lib/non-blocking-spawn"
},
{
"type": "git",
"url": "https://github.com/hugopl/version_from_shard.git",
"tag": "v1.2.5",
"dest": "lib/version_from_shard"
}
]
},
{
"name": "hack_for_Builder",
"buildsystem": "simple",
"build-commands": []
}
]
}