Déterminer l'origine d'une IP

Je viens de publier sur le wiki, un snippet, afin de déterminer l'origine d'une adresse IP écrit en 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 [1].

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, on le trouve dans les dossier /usr/share et /usr/lib. Sous FreeBSD, 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.

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

Note

[1] Sous FreeBSD, on utilisera plutôt pkgconfig.