Build dependences order issue with Vala
I'm testing blueprint with the default Vala GNOME Application template.
I followed the manual setup process, converting existing UI file to blueprint and setting up things in src/meson.build
.
I'm not expert nor in Meson nor in Vala, but from error messages looks like the Vala compiler opens gresources source xml files when compiling Vala code into C when a template tag is used.
This cause two problems:
- the generated
.ui
files are inBUILDDIR
so they can't be found in source dir byvalac
- the
.ui
files must be generated beforevalac
compiles Vala files into C
the first point can be resolved adding --gresourcesdir
to vala_args
to executable
target:
executable('test', test_sources,
vala_args: [
'--target-glib=2.50',
'--gresourcesdir=src/',
],
dependencies:test_deps,
install: true,
)
(repeated for every folder where there is a gresource.xml
file which looks for .ui
files)
For the second point I can't find a solution.
From what I can understand, the chain of action from ninja is
complie Vala to C -> run blueprint -> compile resources -> compile C files -> link
but doing this valac
doesn't find the .ui
files and raise and error. On my system, the blueprint target is run anyway, I thin ninja is parallelizing running tasks. This means that, for me, running build a second time works, as .ui
file are already generated in BUILDDIR
Here the output of ninja with "explain" and "verbose" on a clean build dir:
$ ninja -d explain -v
ninja explain: output data/net.kirgroup.test.desktop doesn't exist
ninja explain: data/net.kirgroup.test.desktop is dirty
ninja explain: output data/net.kirgroup.test.appdata.xml doesn't exist
ninja explain: data/net.kirgroup.test.appdata.xml is dirty
ninja explain: output src/window.ui doesn't exist
ninja explain: src/window.ui is dirty
ninja explain: src/window.ui is dirty
ninja explain: src/test-resources.c is dirty
ninja explain: src/test-resources.c is dirty
ninja explain: src/window.ui is dirty
ninja explain: src/test.p/meson-generated_.._test-resources.c.o is dirty
ninja explain: deps for 'src/test.p/meson-generated_main.c.o' are missing
ninja explain: output src/test.p/main.c doesn't exist
ninja explain: src/test.p/main.c is dirty
ninja explain: src/test.p/meson-generated_main.c.o is dirty
ninja explain: deps for 'src/test.p/meson-generated_window.c.o' are missing
ninja explain: src/test.p/window.c is dirty
ninja explain: src/test.p/meson-generated_window.c.o is dirty
ninja explain: deps for 'src/test.p/meson-generated_application.c.o' are missing
ninja explain: src/test.p/application.c is dirty
ninja explain: src/test.p/meson-generated_application.c.o is dirty
ninja explain: src/test is dirty
[1/11] /usr/bin/meson --internal msgfmthelper ../../../../../../Progetti/test/data/net.kirgroup.test.appdata.xml.in data/net.kirgroup.test.appdata.xml xml ../../../../../../Progetti/test/data/../po
[2/11] /usr/bin/meson --internal msgfmthelper ../../../../../../Progetti/test/data/net.kirgroup.test.desktop.in data/net.kirgroup.test.desktop desktop ../../../../../../Progetti/test/data/../po
[3/11] valac -C --debug --debug --pkg libsoup-3.0 --pkg libadwaita-1 --pkg gtk4 --color=always --directory src/test.p --basedir ../../../../../../Progetti/test/src --gresources=../../../../../../Progetti/test/src/test.gresource.xml --target-glib=2.50 --gresourcesdir=src/ ../../../../../../Progetti/test/src/main.vala ../../../../../../Progetti/test/src/window.vala ../../../../../../Progetti/test/src/application.vala
FAILED: src/test.p/main.c src/test.p/window.c src/test.p/application.c
valac -C --debug --debug --pkg libsoup-3.0 --pkg libadwaita-1 --pkg gtk4 --color=always --directory src/test.p --basedir ../../../../../../Progetti/test/src --gresources=../../../../../../Progetti/test/src/test.gresource.xml --target-glib=2.50 --gresourcesdir=src/ ../../../../../../Progetti/test/src/main.vala ../../../../../../Progetti/test/src/window.vala ../../../../../../Progetti/test/src/application.vala
../../../../../../Progetti/test/src/window.vala:24.2-24.44: error: UI resource not found: `/net/kirgroup/test/window.ui'. Please make sure to specify the proper GResources xml files with --gresources and alternative search locations with --gresourcesdir.
public class Window : Adw.ApplicationWindow {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
[4/11] /home/fabio/Progetti/test/subprojects/blueprint-compiler/blueprint-compiler.py batch-compile src ../../../../../../Progetti/test/src ../../../../../../Progetti/test/src/window.blp
ninja: build stopped: subcommand failed.
and this the output of the second run
$ ninja -d explain -v
ninja explain: output src/test-resources.c doesn't exist
ninja explain: src/test-resources.c is dirty
ninja explain: src/test-resources.c is dirty
ninja explain: output src/test-resources.h doesn't exist
ninja explain: src/test.p/meson-generated_.._test-resources.c.o is dirty
ninja explain: output src/test.p/window.c doesn't exist
ninja explain: src/test.p/main.c is dirty
ninja explain: src/test.p/main.c is dirty
ninja explain: src/test.p/meson-generated_main.c.o is dirty
ninja explain: src/test.p/window.c is dirty
ninja explain: src/test.p/window.c is dirty
ninja explain: src/test.p/meson-generated_window.c.o is dirty
ninja explain: src/test.p/application.c is dirty
ninja explain: src/test.p/application.c is dirty
ninja explain: src/test.p/meson-generated_application.c.o is dirty
ninja explain: src/test is dirty
[1/8] /usr/bin/glib-compile-resources ../../../../../../Progetti/test/src/test.gresource.xml --sourcedir src --sourcedir ../../../../../../Progetti/test/src --c-name test --internal --generate --target src/test-resources.h
[2/8] /usr/bin/glib-compile-resources ../../../../../../Progetti/test/src/test.gresource.xml --sourcedir src --sourcedir ../../../../../../Progetti/test/src --c-name test --internal --generate --target src/test-resources.c --dependency-file src/test-resources.c.d
[3/8] ccache cc -Isrc/test.p -Isrc -I../../../../../../Progetti/test/src -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib/graphene-1.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/libadwaita-1 -I/usr/include/libsoup-3.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -g -pthread -mfpmath=sse -msse -msse2 -mfpmath=sse -msse -msse2 -MD -MQ src/test.p/meson-generated_.._test-resources.c.o -MF src/test.p/meson-generated_.._test-resources.c.o.d -o src/test.p/meson-generated_.._test-resources.c.o -c src/test-resources.c
[4/8] valac -C --debug --debug --pkg libsoup-3.0 --pkg libadwaita-1 --pkg gtk4 --color=always --directory src/test.p --basedir ../../../../../../Progetti/test/src --gresources=../../../../../../Progetti/test/src/test.gresource.xml --target-glib=2.50 --gresourcesdir=src/ ../../../../../../Progetti/test/src/main.vala ../../../../../../Progetti/test/src/window.vala ../../../../../../Progetti/test/src/application.vala
ninja explain: output src/test.p/meson-generated_main.c.o doesn't exist
ninja explain: output src/test.p/meson-generated_main.c.o doesn't exist
[5/8] ccache cc -Isrc/test.p -Isrc -I../../../../../../Progetti/test/src -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib/graphene-1.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/libadwaita-1 -I/usr/include/libsoup-3.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -w -g -pthread -mfpmath=sse -msse -msse2 -mfpmath=sse -msse -msse2 -MD -MQ src/test.p/meson-generated_main.c.o -MF src/test.p/meson-generated_main.c.o.d -o src/test.p/meson-generated_main.c.o -c src/test.p/main.c
[6/8] ccache cc -Isrc/test.p -Isrc -I../../../../../../Progetti/test/src -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib/graphene-1.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/libadwaita-1 -I/usr/include/libsoup-3.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -w -g -pthread -mfpmath=sse -msse -msse2 -mfpmath=sse -msse -msse2 -MD -MQ src/test.p/meson-generated_application.c.o -MF src/test.p/meson-generated_application.c.o.d -o src/test.p/meson-generated_application.c.o -c src/test.p/application.c
[7/8] ccache cc -Isrc/test.p -Isrc -I../../../../../../Progetti/test/src -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib/graphene-1.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/libadwaita-1 -I/usr/include/libsoup-3.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -w -g -pthread -mfpmath=sse -msse -msse2 -mfpmath=sse -msse -msse2 -MD -MQ src/test.p/meson-generated_window.c.o -MF src/test.p/meson-generated_window.c.o.d -o src/test.p/meson-generated_window.c.o -c src/test.p/window.c
[8/8] cc -o src/test src/test.p/meson-generated_.._test-resources.c.o src/test.p/meson-generated_main.c.o src/test.p/meson-generated_window.c.o src/test.p/meson-generated_application.c.o -Wl,--as-needed -Wl,--no-undefined -Wl,--start-group /usr/lib/libgtk-4.so /usr/lib/libpangocairo-1.0.so /usr/lib/libpango-1.0.so /usr/lib/libharfbuzz.so /usr/lib/libgdk_pixbuf-2.0.so /usr/lib/libcairo-gobject.so /usr/lib/libcairo.so /usr/lib/libgraphene-1.0.so /usr/lib/libgio-2.0.so /usr/lib/libgobject-2.0.so /usr/lib/libglib-2.0.so /usr/lib/libadwaita-1.so /usr/lib/libsoup-3.0.so -Wl,--export-dynamic /usr/lib/libgmodule-2.0.so -Wl,--end-group -pthread