Vala und die Autotools Teil 2

03. September 2010

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.

Vala und die Autotools Teil 1

01. September 2010

Da ich bei dem Programmier-Wettbewerb vom Linux-Magazin mitmache und eigens dafür einen Bot in Vala geschrieben habe, wollte ich mich in diesem Zusammenhang auch gleich mit den Autotools beschäftigen. Die Autotools sind hervorragend dazu geeignet, Quellcode in einer heterogenen Umgebung zu kompilieren und zu distributieren. Doch die Einarbeitung erforderte einiges an Lesearbeit, weswegen ich diesen Artikel hier schreibe um anderen vielleicht einen kleinen Schubser geben zu können.

Vala-Integration

Vala wird seit Version 0.7 und der aktuellsten Autotools Distribution nativ unterstützt. Dazu muss man in seine configure.ac folgendes Makro hinzufügen:

AM_PROG_VALAC([MINVERSION])

Somit sucht das Configure-Skript nach dem Vala Compiler und überprüft die geforderte Version. Bislang nutzen viele Vala-Projekte dieses Makro noch gar nicht, weswegen das studieren fremder configure.ac-Files komplizierter ist als gedacht. Eine gute Referenz ist Cheese momentan, deren Autotools-Integration ist so ziemlich state-of-the-art.

Das tolle an der Autotools-Integration ist folgendes: Autotools compiliert den Vala-Sourcecode mit dem Compilerflag -C. Dies bedeutet der Vala-Compiler erzeugt lediglich den C-Code. Die weitere Compilation übernimmt schließlich der gcc. Wenn das Projekt distributiert werden soll, liefert Autotools die C-Sourcen mit – auf dem Ziel-System braucht somit kein Vala mehr installiert sein – dafür wird das configure-Skript sogar automatisch angepasst.

Beim nächsten Artikel beschäftige ich mich mit bedingter Übersetzung und deren Integration. Stay tuned.

27. Februar 2010

pat011

ein paar Einstimmungsdoodleien. Muss erstmal warm werden mit Gimp – nutze ja kein Windows mehr ;)

Vorstellungstermin

26. Februar 2010

Ready…

25. Februar 2010

24. Februar 2010

Facial-Expressions

Facial-Expressions

Erste Facial-Expressions. Bald gehts wieder los! ;)

Testpicture

09. Februar 2010
testpicture

testpicture

Bedingte Übersetzung für Latex

30. Januar 2010

Ich benutze beim erstellen von Code oft den Präprozessor von C um bestimmte Teile meines Quellcodes auszuschließen. Da ich diese Funktion sehr zu schätzen gelernt habe, wollte ich eine ähnliche Funktion auch für Latex. Ich habe auch schon begonnen, ein Programm zu schreiben das mir genau diese Funktionalität bietet, bis ich dann herausgefunden habe, dass Latex solch ein Paket bereits anbietet. Das Paket nennt sich “versions” und kann mit \includepackage{versions} eingebunden werden. Nun stehen 2 verschiedene Befehle zur Verfügung.

Ich nutze z. B. solche Textblöcke, wie sie auch in der Wikipedia vorkommen. Falls ich z. B. einen TODO Punkt notiere mache ich das über ein selbstdefiniertes Kommando \todo{Die Aufgabe die noch zu erledigen ist}. Da ich meinen Kommilitonen dieses Dokument jedoch in Zwischenschritten zur Verfügung stellen will, sollen diese \todo Anweisungen mit einem einzigen Schwertstreich aus dem Dokument verschwinden. Dafür nutze ich nun das Paket versions. Man kann über den Befehl \processifversion{Namensraum}{Befehl} einen Befehl übersetzen lassen oder nicht. Dafür bindet man in der Präambel ein \includeversion{Namensraum} oder wenn nicht eingebunden \excludeversion{Namensraum}. Somit kann ich über die Präambel steuern, welche Teile des Dokuments übersetzt werden – die Datei für mich (mit den TODO Hinweisen) oder die Datei für meine Kommilitonen ohne Todo Anweisungen.