I. Introduction▲
La dernière version stable de GTK+ vient de sortir (voir les nouveautés) et si vous êtes impatient ou que votre distribution ne propose pas de système de paquets, vous êtes obligés de passer par les sources. Cette étape n'est pas très compliquée, mais pour éviter de s'y reprendre en plusieurs fois, je vais vous guider.
Si vous êtes arrivé sur ce tutoriel, il est fort probable que vous connaissiez déjà GTK+, si ce n'est pas le cas, vous pouvez commencer par lire GTK+ par l'exemple pour apprendre à utiliser GTK+.
II. Fichiers nécessaires▲
Pour commencer, il faut télécharger les archives des sources de GTK+ ainsi que leurs dépendances, pour GTK+ 2.10, il vous faut (nous supposerons que les fichiers sont stockés dans le dossier ~/gtk+-2.10/) :
- atk-1.10.3.tar.gz [ftp://ftp.gtk.org/pub/gtk/v2.8/atk-1.10.3.tar.gz] ;
- cairo-1.2.0.tar.gz ;
- glib-2.12.0.tar.gz [ftp://ftp.gtk.org/pub/gtk/v2.12/glib-2.12.0.tar.gz] ;
- gtk+-2.10.0.tar.gz [ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.0.tar.gz] ;
- pango-1.13.2.tar.gz [ftp://ftp.gtk.org/pub/gtk/v2.10/pango-1.12.3.tar.gz].
Il se peut que vous ayez besoin d'autres packages s'il s'agit de sa première installation.
III. Préparation de l'installation▲
Pour faire les choses proprement, nous allons tout installer dans le répertoire /opt/gtk, commençons par le créer :
$
su
Password:
# mkdir -p /opt/gtk
# ls -l / /opt
/:
drwxr-xr-x 12
root root 4096
2006
-07
-04
18
:24
opt
/opt/:
drwxr-xr-x 8
root root 4096
2006
-07
-04
18
:29
gtk
Vérifiez que vous avez les droits nécessaires sur les dossiers créés.
Ensuite il faut extraire les archives :
$
cd ~/gtk+-2
.10
$
tar -zxf atk-1
.10
.3
.tar.gz
$
tar -zxf cairo-1
.2
.0
.tar.gz
$
tar -zxf glib-2
.12
.0
.tar.gz
$
tar -zxf gtk+-2
.10
.0
.tar.gz
$
tar -zxf pango-1
.13
.2
.tar.gz
Avant de nous lancer dans la compilation, nous allons définir deux variables d'environnement :
$
export PKG_CONFIG_PATH
=
/opt/gtk/lib/pkgconfig/:$PKG_CONFIG_PATH
Cette variable permet à l'utilitaire pkg-config de trouver les fichiers .pc qui lui permet de récupérer les informations sur les bibliothèques telles que les options de compilation pour gcc. Si vous avez une ancienne version de GTK d'installée, pensez à renommer les anciens fichiers .pc (généralement situés dans le répertoire /usr/lib/pkgconfig) en .pc.old (ou les déplacer) afin que pkg-config ne les utilise pas.
$ export LD_LIBRARY_PATH=/
opt/
gtk/
lib:$LD_LIBRARY_PATH
Cette variable permet à l'éditeur de lien ld de trouver nos bibliothèques nouvellement installées.
Voilà, nous sommes prêts pour lancer la compilation !
Avant de compiler, vous pouvez appliquer un petit correctif, voir plus bas.
IV. Compilation▲
C'est ici que les choses peuvent se compliquer puisqu'il faut installer les paquets en respectant les dépendances.
Nous allons commencer par la glib puisqu'elle ne nécessite aucune dépendance :
$
cd glib-2
.12
.0
$
./configure --prefix
=
/opt/gtk
[...]
$
make
[...]
$
su
Password:
# make install
[...]
Voilà rien de bien compliqué ! le paramètre prefix de la commande configure permet de choisir le répertoire d'installation.
Et maintenant il faut vous armer de patience (surtout pour les petites configurations) et recommencer cette série de commandes pour les autres paquets en respectant l'ordre suivant :
- cairo ;
- atk ;
- pango ;
- gtk+.
Normalement si tout c'est bien passé, votre système est prêt, reste plus qu'à tester !
V. Test▲
Afin de vérifier que cette nouvelle version de GTK+ est bien installée, voici un petit programme de test :
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
int
main (
void
)
{
printf (
"
Version de GTK+ utilisee :
\n
"
);
printf (
"
\t
Bibliotheque : %d.%d.%d
\n
"
, gtk_major_version, gtk_minor_version, gtk_micro_version);
printf (
"
\t
Fichiers d'en tete : %d.%d.%d
\n
"
, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
return
EXIT_SUCCESS;
}
Pour compiler, tapez :
$
gcc `pkg-config --cflags --libs gtk+-2.0`
main.c
Et si tout c'est bien passé, vous devriez obtenir :
$
./a.out
Version de GTK+ utilisee :
Bibliotheque : 2
.10
.0
Fichiers d'en tete : 2.10.0
VI. Bug▲
Dans les versions précédentes les programmes écrits à l'aide de GTK+ pouvaient être compilés en mode ansi strict (option -ansi et -pedantic de gcc), mais avec cette dernière version, le fichier d'en tête gtktextbuffer.h n'est pas conforme :
$
gcc -Wall -O2 -ansi -pedantic -W `pkg-config --cflags --libs gtk+-2.0`
main2.c
In
file included from /opt/gtk/include/gtk-2
.0
/gtk/gtk.h:170
,
from main.c:1
:
/opt/gtk/include/gtk-2
.0
/gtk/gtktextbuffer.h:52
: warning: ISO C restricts enumerator values to range of 'int'
/opt/gtk/include/gtk-2
.0
/gtk/gtktextbuffer.h:53
: warning: ISO C restricts enumerator values to range of 'int'
/opt/gtk/include/gtk-2
.0
/gtk/gtktextbuffer.h:55
: warning: ISO C restricts enumerator values to range of 'int'
Les messages étant un warning, en l'absence de l'option -Werror votre programme devrait tout de même compiler.
Si toutefois vous souhaitez corriger ce problème, vous pouvez appliquer ce patch :
$
patch ~/gtk+-2
.10
/gtk+-2
.10
.0
/gtk/gtktextbuffer.h patch
patching file~/gtk+-2
.10
/gtk+-2
.10
.0
/gtk/gtktextbuffer.h
Voilà, il ne vous reste plus qu'à relancer la compilation de GTK+.
Les programmes liés dynamiquement avec GTK+ patché ne seront pas compatibles avec la version non patchée, mais cela n'a pas d'importance si vous distribuez les sources ou si GTK+ est lié statiquement à votre programme.
VII. Remerciements▲
Merci à Miles pour la relecture attentive de cet article.