carrier/windows/setup.sh

62 lines
2.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Windows build in one command. Run inside the MSYS2 MINGW64 shell from
# the carrier checkout: it installs the dependencies into MSYS2, clones
# fumi next to carrier if missing, builds, and bundles carrier plus the
# GTK runtime into dist/ and carrier-windows.zip.
#
# If MSYS2 updates its own core mid-run the shell may die — just rerun.
set -euo pipefail
say() { printf '\n==> %s\n' "$*"; }
die() { printf '\n!! %s\n' "$*" >&2; exit 1; }
[ -d ../fumi/core ] || {
say "fumi not found next to carrier — cloning it"
git clone ssh://git@code.randogoth.com:2222/randogoth/fumi.git ../fumi \
|| die "cloning fumi failed — check your SSH key in ~/.ssh"
}
say "installing dependencies (first run downloads several hundred MB)"
pacman -Syu --noconfirm || die "pacman update failed — reopen the shell and rerun this script"
pacman -S --noconfirm --needed \
mingw-w64-x86_64-gtk4 \
mingw-w64-x86_64-libadwaita \
mingw-w64-x86_64-adwaita-icon-theme \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-rust \
mingw-w64-x86_64-git \
zip \
|| die "installing the build stack failed"
pkg-config --exists gtk4 libadwaita-1 \
|| die "gtk4/libadwaita invisible to pkg-config — are you in the MINGW64 shell?"
say "building carrier (release; the first build takes a while)"
cargo build --release --locked || die "cargo build failed"
say "bundling the runtime"
rm -rf dist
mkdir -p dist/share/glib-2.0/schemas \
dist/share/icons/hicolor/512x512/apps \
dist/share/icons/hicolor/256x256/apps \
dist/share/icons/hicolor/128x128/apps
cp target/release/carrier.exe dist/
for dll in $(ldd target/release/carrier.exe | awk '/mingw64/ {print $3}'); do
cp "$dll" dist/ || die "copying $dll failed"
done
[ "$(ls dist/*.dll | wc -l)" -gt 0 ] || die "no DLLs collected — ldd found none under /mingw64"
cp /mingw64/share/glib-2.0/schemas/* dist/share/glib-2.0/schemas/
glib-compile-schemas dist/share/glib-2.0/schemas/
cp -r /mingw64/share/icons/Adwaita dist/share/icons/
cp -r /mingw64/share/icons/hicolor dist/share/icons/
cp data/icons/com.randogoth.carrier.png dist/share/icons/hicolor/512x512/apps/
cp data/icons/com.randogoth.carrier-256.png dist/share/icons/hicolor/256x256/apps/
cp data/icons/com.randogoth.carrier-128.png dist/share/icons/hicolor/128x128/apps/
say "zipping"
version=$(sed -n 's/^version = "\(.*\)"$/\1/p' Cargo.toml | head -1)
rm -f "carrier-windows-$version.zip"
(cd dist && zip -qr "../carrier-windows-$version.zip" .)
say "done — test with ./dist/carrier.exe (SmartScreen may ask once)"