Sorry for the radio silence.
Progress report: I ported the Dino build to Meson (while maintaining the CMake
build) and made a pull request, #1453
for it. In the process of porting, I found out that some plugins were
unnecessarily split into two parts, a Vala-wrapper for a library and the actual
plugin. I merged
omemo, simplifying the build process. Now each subdirectory of
its own plugin. ;)
There seems to be no easily downloadable native Vala binaries for Windows. There’s a project page ValaOnWindows in the GNOME wiki that suggests using MSYS2 (which has native Vala binaries but creates a UNIX-like environment) or using WSL (which is just a nicely integrated Linux virtual machine, so it’s out completely. There’s also a small section about compiling Vala natively, it mostly claims that it’s undocumented and links to a dead page that’s still live on the Wayback Machine: MSVCCompilationOfGTKStack.
I went with taking the MSYS2 binaries outside of their environment, which worked fine.
Compiling a simple Vala library
Using this, I went on to port
qlite to Windows. In the introductory post, I
pointed out how this should be easy because it only depends on the
SQLite library. However, when trying it
out, I found out that even the more foundational
gee library doesn’t actually
support building with Meson, although there’s an open issue
(libgee#25) and a
four-year-old pull request
(libgee!1) for it.
I used the pull request to create a Meson
WrapDB project, but haven’t
asked for its inclusion yet.
In the process of that, a number of issues building the library on Windows
arose. First of all, the Microsoft
stdlib.h header seems to define the macros
max (lowercase!) unless you compile with the standards-compliant
mode (note that this is separate from the problem that
windows.h does the
same unless the
NOMINMAX preprocessor macro is defined).
/Za mode however, comes with another problem though. In
standards-compliant mode, MSVC (like gcc with
-pedantic) rejects empty
translation units which
valac can generate. I opened
vala#1457 about that.
Then there’s a smaller problem that I haven’t yet reported upstream. Meson only
treats a dependency as a Vala dependency if it’s compiled as a Vala dependency
or if it’s a
gee depends on
gio-2.0 which is available as a WrapDB package but doesn’t
ship its own Vala API spec (
gio-2.0.vapi) because it is just a C library.
gio-2.0.vapi ships with the Vala compiler, but Meson isn’t looking for it.