In working on the PyInstaller I found out that GExiv2 is not built for our current system: MSYSTEM: MINGW64.
The GExiv2 PKGBUILD says:
mingw_arch=(‘ucrt64’ ‘clang64’ ‘clangarm64’)
So gexiv2 is not available for mingw64 — only for ucrt64, clang64, and clangarm64. Our build uses MSYSTEM: MINGW64, so the package simply doesn’t exist for ours.
We could switch to ucrt64 — it is a big change, but gexiv2 would be available
What is ucrt64?
UCRT64 = Universal C Runtime, 64-bit
It’s the modern Windows C runtime that Microsoft introduced with Windows 10. There are two flavors in MSYS2:
┌────────────────┬───────────────────────────────────┬──────────────────────────────────────────────────┐
│ │ MINGW64 │ UCRT64 │
├────────────────┼───────────────────────────────────┼──────────────────────────────────────────────────┤
│ C runtime │ msvcrt.dll (legacy, from the 90s) │ ucrt.dll (modern, Windows 10+) │
├────────────────┼───────────────────────────────────┼──────────────────────────────────────────────────┤
│ Compiler │ GCC │ GCC │
├────────────────┼───────────────────────────────────┼──────────────────────────────────────────────────┤
│ Package prefix │ mingw-w64-x86_64-* │ mingw-w64-ucrt-x86_64-* │
├────────────────┼───────────────────────────────────┼──────────────────────────────────────────────────┤
│ Windows compat │ XP+ │ Windows 10+ (ships with 10, backportable to 8.1) │
├────────────────┼───────────────────────────────────┼──────────────────────────────────────────────────┤
│ Status │ Older, stable │ Recommended by MSYS2 since ~2022 │
└────────────────┴───────────────────────────────────┴──────────────────────────────────────────────────┘
MSYS2 now recommends UCRT64 for new projects because:
- It’s what Microsoft supports going forward
- Better standards compliance
- Some newer packages (like gexiv2) are only built for ucrt64
The trade-off: switching means replacing every mingw-w64-x86_64- with mingw-w64-ucrt-x86_64- in build.sh, changing MSYSTEM: MINGW64 to MSYSTEM: UCRT64 in the workflow, and updating the NSIS template. It’s mechanical but there are a lot of package names.
Since Gramps targets Windows 10+ anyway (GTK3 requirement), UCRT64 is actually the better fit.
I didn’t want to change something this big on a bug fix release (6.0.7) even though we may be switching to PyInstaller. But worth considering for Gramps 6.1.
