Je viens de publier sur le [wiki|http://avignu.wiki.tuxfamily.org/], un  »[snippet|http://avignu.wiki.tuxfamily.org/doku.php?id=snippet:vala#determiner_l_origine_d_une_ip] », afin de déterminer l’origine d’une adresse ??IP|Internet Protocol?? écrit en [Vala|https://wiki.gnome.org/Projects/Vala].

En testant ce programme avec différentes versions de ce langage, j’ai dû mettre en place des tests, qui sont évalués par le compilateur @@valac@@. On parle souvent de préprocesseur dans certains langages.

Si on dispose d’une version de Vala >= 0.22, il faut activer la directive __VALA_0_22__.

Si on dispose d’une version de libsoup >= 2.42, il faut activer la directive __LIBSOUP_2_42__.

!!!Comment déterminer la version d’une bibliothèque ?

C’est très simple, on utilise l’exécutable @@pkg-config@@ $$Sous FreeBSD, on utilisera plutôt @@pkgconfig@@.$$.

///
pkg-config –modversion libsoup-2.4
2.42.3.1
///

En fait @@pkg-config@@ interroge les fichiers @@.pc@@, qui se trouve dans le dossier @@pkgconfig/@@. Pour savoir où il se trouve dans l’arborescence :

///
find /usr -type d -name ‘pkgconfig’ -print
///

Par exemple, sous [Fedora|https://fedoraproject.org/], on le trouve dans les dossier @@/usr/share@@ et @@/usr/lib@@. Sous [FreeBSD|http://www.freebsd.org/], il est situé dans @@/usr/local/libdata@@.

Pour Vala :

///
valac –version
Vala 0.20.1
///

Maintenant nous avons toutes les informations, on peut compiler notre programme.

!!!Compiler

Si Vala < 0.22.x /// valac --target-glib=2.32 --pkg=glib-2.0 --pkg=libsoup-2.4 --pkg=json-glib-1.0 geoip.vala /// Si Vala >= 0.22.x et libsoup >= 2.42.x

///
valac –define=VALA_0_22 –define=LIBSOUP_2_42 –pkg=glib-2.0 –pkg=libsoup-2.4 –pkg=json-glib-1.0 geoip.vala
///

Sous FreeBSD, on peut changer de compilateur, en utilisant par exemple [clang|http://fr.wikipedia.org/wiki/Clang].

///valac –cc=clang –define=VALA_0_22 –pkg=glib-2.0 –pkg=libsoup-2.4 –pkg=json-glib-1.0 geoip.vala
///

Dans tout les cas, on obtient le même résultat :

///
./geoip
fr
///