Da man in Vala meist Pakete angeben muss, welche der Valacompiler benützt um die richtigen C Funktionen zu erstellen, müssen diese den Autotools bekannt gegeben werden. Dies macht man über
1 | VALAFLAGS = --pkg gio-2.0 |
Mit den VALAFLAGS werden alle zusätzlichen Compilerangaben für den Valacompiler übermittelt. Dadurch kann er nicht überprüfen ob die .vapi-Files (das sind mehr oder weniger die Binding-Files für die C-Bibliotheken) vorhanden sind. Jedoch installiert der Vala-Compiler alle gängigen Gtk-Binding-Files von Haus aus. Es muss so lediglich überprüft werden, ob die C-Bibliotheken installiert sind.
Normalerweise muss die Variable VALAFLAGS in dem spezifischen Makefile.am angegeben werden. Kann aber auch im configure.ac angegeben werden. Dies würde dann folgendermaßen aussehen:
1 2 3 | configure.ac VALAFLAGS = --pkg gio-2.0 AC_SUBST(VALAFLAGS) |
AC_SUBST übernimmt hier die Variable und macht sie in allen angegebenen Makefiles bekannt.
Das ermöglicht einem auch mit bedingter Übersetzung zu spielen. Angenommen ich habe einige Debug-Anweisungen in meinem Vala-Programm und möchte für die Distribution diese aus dem Kompilat nehmen. Dafür existieren in Vala die sogenannten Conditional Expressions. Ähnlich wie die Präprozessor-Anweisungen von C kann man somit Teile des Quellcodes für den Compiler ausblenden. Wenn nun beispielsweise Anweisungen mit #ifdef Foo … #endif eingeschachtelt wurden, muss man dem Compiler die Definition mitgeben
1 | $ valac -D Foo foo.vala |
Die Frage, die sich natürlich schnell stellt: Wie kann man dies in die Autotools integrieren?
Conditionals
Um dem configure-Skript zusätzliche Parameter mitgeben zu können benutzt man folgendes Makro:
1 2 3 | AC_ARG_ENABLE(foo, AS_HELP_STRING([--enable-foo], \ [turn on Foo-Condition]), enable_foo=$enableval, enable_foo=no) AM_CONDITIONAL(ENABLE_FOO, text x$enable_foo = xno) |
Nun kann man einer einfachen Bash-if-Abfrage verschieden Variablen setzen
1 2 3 4 5 6 | if test "$enable_foo" = "yes"; then VALAFLAGS="-D Foo" else VALAFLAGS="" fi AC_SUBST(VALAFLAGS) |
Somit kann ich beim configurieren der Makefiles als Option
1 | $ ./configure --enable-foo |
aktivieren und meine Anweisungen an den Vala-Compiler weiter reichen.




