Installation de GTK+ à partir des sources

| Nicolas Joseph | yiannis |

Ce tutoriel va vous présenter la marche à suivre pour installer GTK+ à partir des sources sous Linux.

Commentez ♪

- Titre : Installation de GTK+ à partir des sources

- Auteurs : Nicolas Joseph, yiannis

- Parution : 14 août 2006

- Licence : Copyright ® 2006-2007 Nicolas Joseph. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Fichiers nécessaires

- III. Préparation de l'installation

- IV. Compilation

- V. Test

- VI. Bug

- VII. Remerciements

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 :

1. cairo ;

2. atk ;

3. pango ;

4. 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 :

main.c

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

int main (void)
{
printf ("Version de GTK+ utilisee :\n");
printf ("\tBibliotheque : %d.%d.%d\n", gtk_major_version, gtk_minor_version, gtk_micro_version);
printf ("\tFichiers 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.