Tiré de GTK+ Reference Manual
acryline 2007 Boosteur de petits projets

Compiler les bibliothèques de GTK+

Compiler les bibliothèques de GTK+ —  Comment compiler GTK+ lui-même ?

Construire GTK+ sur des systèmes de type UNIX

Ce chapitre va concerner la construcion et l'installation de GTK+ sur des systèmes de types UNIX et de la famille de UNIX comme Linux. La compilation de GTK+ sur Microsoft Windows est différente  et légèrement plus compliquée à réaliser parce que les outils nécessaires  ne sont pas inclus avec ce système d'exploitation.

Avant d'entrer dans les détails de la compilation de GTK+, nous devons dire que, dans beaucoup de cas, des paquets préconstruits peuvent être disponibles pour votre système d'exploitation, soit auprès de votre fournisseur de système d'exploitation soit via des sources indépendantes. Si de tels ensembles de paquets  sont disponibles, leur installation vous permettra de programmer avec la bibliothèque GTK+ beaucoup plus rapidement qu'en la construisant vous même. En fait, il se peut même que GTK+ soit déjà installée sur votre système.

Sur les systèmes de la famille de UNIX, GTK+ utilise le système de construction standard GNU qui emploie l'autoconfiguration  pour la configuration de paquets et  la résolution des problèmes de portabilité, et qui crée lui-même des fichiers "makefiles" ( fichiers contenant la liste des fichiers à compiler)  pour la construction  de GTK+  en se conformant  aux encodages standards de GNU, et  aux  bibliothèques d'outils  de construction  des librairies partagées sur les multiples plateformes.

Si vous construisez GTK+ à partir de paquets , vous n'avez pas besoin des outils d'insatallation; les pièces nécessaires des outils sont déjà  dans les paquets source. Mais il est utile de connaître un minimum les principes d'utilisation de ces outils par les paquets. Un paquet source est distribué en tant que fichier tar.gz que vous allez décompresser dans un répertoire réservé aux fichiers sources, de cette façon :

tar xvfz gtk+-2.0.0.tar.gz

Au niveau supérieur du répertoire qui a été créé, il y aura un script shell appelé configure que vous allez exécuter pour prendre le modèle de makefiles appelé  Makefile.in  dans le paquet et qui va créer un fichier makefiles adapté à votre système d'exploitation. On peut passer des lignes de commandes variées au script  configure pour déterminer comment le paquet sera construit et installé. L'argument  le plus utilisé est --prefix qui détermine l'endroit où le paquet sera installé. Pour installer un paquet dans  /opt/gtk vous devez exécuter configure ainsi:

./configure --prefix=/opt/gtk

Une liste complète d'options peut être trouvée en exécutant  configure avec l'argument  --help. En général,  les arguments par défaut sont correctes et on peut leur faire confiance. Après avoir exécuté  configure,  vous allez utiliser la commande  make  pour construire le paquet et l'installer.
make
make install

Si vous n'avez pas la permission d'écrire dans le répertoire d'installation, vous devez activer le compte root temporairement avant d'exécuter make install. Ensuite, si vous faite l'installation dans un système de répertoires, comme sur certains  systèmes (comme Linux), vous devez exécuter  ldconfig après  make install pour que les bibliothèques nouvellement installées soient trouvées.

Il est utile de passer plusieurs  variables d'environnement avant d'exécuter configure.  CPPFLAGS contient les options à passer au compilateur C, et il set à dire au compilateur où chercher les fichiers includes. La variable LDFLAGS sert à la même chose pour l'éditeur de liens (linker). Enfin la variable d'environnement  PKG_CONFIG_PATH  contient  un chemin d'accès de recherche que pkg-config (voir plus bas) utilise quand il recherche un fichier qui décrit comment un programme doit être compilé en utilisant différentes bibliothèques. Si vous avez installé GTK+ et ces dépendances dans  /opt/gtk, vous pouvez configurer ces variables ainsi : 

CPPFLAGS="-I/opt/gtk/include"
LDFLAGS="-L/opt/gtk/lib"
PKG_CONFIG_PATH="/opt/gtk/lib/pkgconfig"
export CPPFLAGS LDFLAGS PKG_CONFIG_PATH

Vous pouvez aussi avoir besoin de définir la variable d'environnement LD_LIBRARY_PATH, pour que l'éditeur de liens dynamiques puisse trouver les bibliothèques nouvellement installées, et le programme d'environnement PATH pour  que utility binaries installés par les diverses bibliothèques, soient trouvés.
LD_LIBRARY_PATH="/opt/gtk/lib"
PATH="/opt/gtk/bin:$PATH"
export LD_LIBRARY_PATH PATH

Dépendances

Avant qe vous puissiez compiler la boîte à outils de widgets GTK+, vous devez avoir d'autres outils variés et  bibliothèques installés sur votre système. Les deux outils nécessaires pendant la procédure de construction  sont  pkg-config et GNU make (à différencier des outils utilisés pendant la création de GTK+ qui ont été mentionnés ci-dessus comme autoconf).
  • pkg-config est un outil pour dépister les drapeaux de compilation requis pour les bibliothèques qui sont employées par les bibliothèques de GTK+ ( Pour chaque bibliothèque, un petit fichier texte  .pc est installé dans une localisation standard qui contient les flags de compilation requis pour cette bibliothèque avec le numéro de la version.)  La version de  pkg-config  requises pour construire GTK+ est reflété dans le répertoire  dependencies sur le site FTP de GTK.

  • Les fichiers makefile de GTK+ fonctionneront la plupart du temps avec différentes versions de make, cependant, onp eut rencontrer de rares incompatibilités, ainsi l'équipe de GTK+ recommande d'installer  GNU make  si vous ne l'avez pas encore sur votre système et de l'utiliser. (Il peut s'appeler  gmake plutôt que make.)

Trois des bibliothèque dont GTK+ dépend sont gérées par l'équipe de GTK+ : GLib, Pango, er ATK. Les autres bibliothèques sont gérées séparément.

  • La bibliothèqye  GLib procure des fonctionnalités non graphique au noyau telles que des types de données de haut niveau, la manipulation Unicode,  un objet  et un système de type pour la programmation en C. Elle est disponnible sur le site FTP de GTK.

  • Pango est une bibliothèque de manipulation de texte internationale. Elle est disponnible sur le site FTP de GTK.

  • ATK est une boîte à outils d'accessibilité. Elle apporte un ensemble d'interfaces génériques qui fournissent les technologies d'accessibilité comme les lecteurs d'écran pour interagir avec l'interface graphique utilisateur. Elle est disponnible sur le site FTP de GTK.

  •  GNU libiconv library est requise pour construire GLib si votre système n'a pas la fonction iconv() pour faire la conversion entre les codages de caractères. La plupart des systèmes modernes devraient avoir  iconv().

  • La bibliothèque libintl du  paquet de GNU gettext est nécessaire si votre système ne pocède pas la fonctionnalité  gettext() pour manipuler les bases de données de traduction de messages.

  • Les bibliothèques de chargement des images  JPEG, PNG, et TIFF sont requises pour compiler GTK+. Vous avez probablement déjà ces bibliothèques installées, mais si ce n'est pas le cas, les versions dontvous avez besoin sont disponibles dans le répertoire  dependencies  sur  le site FTP de GTK. ( Avant d'installer ces bibliothèques depuis la source, vous devriez  vérifier si votre fournisseur de système d'exploitation ne vous as  pas procuré de paquets pré-construits de ces bibliothèques et que vous ne les avez pas installés.)

  • Les bibliothèques du système X windows est nécessaire pour construire Pango et GTK+. Elles devraient déjà être installées sur votre système, mais il est possible que vous ayez à installer l'environnement de développement pour ces bibliothèques que votre fournisseur de système d'exploitation a fourni.

  • La bibliothèque  fontconfig fournit à Pango une solution standard pour localiser des polices et pour  configurer et de personnaliser d'accès à ces polices.

  • Cairoest une bibliothèque graphique qui supporte les graphiques et les images vectoriels. Pango et GTK+ utilisent cairo dans beaucoup de leurs dessins.

Construire et tester  GTK+

Tout d'abord assurez-vous que vous avez installé les dépendances externes nécessaires : pkg-config, GNU make, les bibliothèques JPEG, PNG, et TIFF , FreeType, et, si nécessaire, libiconv et libintl. Pour obtenir des informations détaillées au sujet de la construction de ces paquets, consultez la documentation fournit avec chacun de ces paquets. Sur le système Linux, c'est facile, ils sont déjà tous installés à l'exception de pkg-config.

Ensuite construisez et installez les librairies GTK+ dans cet ordre : GLib, Pango, ATK, puis GTK+. Pour chaque bibliothèque, suivez les étapes  configure, make, make install mentionées plus haut. Si vous êtes chanceux, ça se passera sans problème, et vous serez prêt pour commencer à compiler vos propres applications GTK+ . Vous pouvez tester votre installation GTK+ en exécutant le programme  gtk-demo que  GTK+ a installé.

Si un des scripts configure échoue ou si l'exécution de  make échoue, regardez attentivement les messages d'erreur affichés; ils vous donneront le plus souvent des informations très utiles sur ce qui a mal tourné. Quand configure échoue,  des informations complémentaires, tel que des erreurs pour un test de compilation, vont être trouvées dans le fichier  config.log. l'observation du dernier couple des cent lignes dans ce fichier vous permettra fréquemment de clarifier l'origine de ce qui ne va pas.  Si autre chose échoue, vous pouvez demander de l'aide sur la liste des rapports d'erreurs de gtk-liste. Voir  Listes des envoies et des rapports de bogues(3) pour plus dinformation.

Options Supplémentaires de Configuration 

En plus des options normales, le script configure pour la bibliothèque GTK+ supporte un certain nombre d'arguments  additionnels. (La ligne de commande avec les arguments pour les autres bibliothèques de GTK+ sont décrites dans la documentation distribuée avec ces bibliothèques.)

configure [[--disable-modules] | [--enable-modules]] [[--with-included-loaders==LOADER1,LOADER2,...]] [[--enable-debug=[no|minimum|yes]]] [[--disable-visibility] | [--enable-visibility]] [[--disable-shm] | [--enable-shm]] [[--disable-xim] | [--enable-xim]] [[--disable-xim-inst] | [--enable-xim-inst]] [[--disable-xkb] | [--enable-xkb]] [[--disable-gtk-doc] | [--enable-gtk-doc]] [[--with-xinput=[no|yes]]] [[--with-gdktarget=[x11|linux-fb|win32]]] [[--disable-shadowfb] | [--enable-shadowfb]]

Ne comprenant pas tout, la suite de la traduction peut être assez imprecise !!!

--disable-modules et --enable-modules. Normalement GTK+ essaiera de construire un fichier au format image  GdkPixbuf  en utilisant de petites librairies partagées  qui seront chargées à la demande. L'argument --disable-modules  indique qu'ils(elles?) devraient tous être construits statiquement dans la bibliothèque de GTK+(je comprends rien ! :) ). C'est utile pour les personnes qui ont besoin de créer des  statically-linked binaries. Si ni l'un ni l'autre des arguments n'est indiqué --disable-modules nor --enable-modules , alors le script configure essaiera d'auto- détecter si des modules partagés travaillent sur votre système.

--with-included-loadersCette option vous permet de définir quel chargeur d'mages vous voules inclure; par exemple, vous pouvez inclure seulement un chargeur PNG pour créer un plus petit  GdkPixbuf binaire.

--enable-debug. Ouvre une quantité variable de supports de correction. Définissez le à  'no' pour désactiver  g_assert(), g_return_if_fail(), g_return_val_if_fail() et tous les controles de cast entre les différents types d'objets.  Définissez le à 'minimum' pour désactiver uniquement les contrôles de casts. Définissez le à  'yes' pour activer  le runtime debugging. Par défaut il est définit à  'minimum'. Notez que  'no'  est rapide, mais dangereux car, la plupart du temps, il destabilise les logiciels exempt d'erreur en remplaçant les avertissements simples par un accident fatal . Ainsi --l'enable-debug=no ne devrait pas être employé pour  des réalisations stables avec GTK+.

--disable-visibility et --enable-visibility L'option --disable-visibility empêche l'utilisation des attributs de visibilité d'ELF  pour enchaîner des optimisations. Ceci se comprends puisque GTK+ lui même est transformé, ainsi la façon dont GTK+ utilise les attributs de visibilité oblige une reconstruction complète de tous les fichiers sources pour n'importe quelle modification de header.

--enable-explicit-deps and --disable-explicit-deps Si  --enable-explicit-deps est sépcifié alors GTK+ écrira l'ensemble complet des bibliothèques dont GTK+ dépend à ce moment  dans ses fichiers  .pc pour que cela soit utilisé quand des programmes dépendants de GTK+ sont liés. Autrement,  GTK+ va inclure uniquement les bibliothèques GTK+ elles-mêmes,  et dépendra des équipements de dépendance du système de bibliothèques pour apporter les autres bibliothèques. Par défaut  GTK+ désactivera  les dépendances explicites à moins qu'il ne détecte qu'elles sont nécessaires pour le système. ( Si vous spécifiez  --enable-static  pour forcer la construction de bibliothèques statiques, alors les dépendances explicites seront écrites puisque les dépendances de bibliothèque ne fonctionnent pas pour les bibliothèques statiques.) Spécifiez --enable-explicit-deps ou --enable-static  peut provoquer des problèmes de compatibilité quand les bibliothèques dont GTK+ dépend changent de versions, cela devrait être évité si possible.

--disable-shm et --enable-shmCes options peuvent être utilisées pour contrôler quand GTK+ utilise de la mémoire partagée pour communiquer avec le serveur de X quand c'est possible. L'option par défaut est 'yes'.

--disable-xim et --enable-ximCes options peuvent être utilisées pour contrôler quand GTK+ sera compilé à l'aide de XIM. (Extension de ma methode X Input, utilisée pour les entrée japonaises.)  L'option par défaut est 'yes'.

--disable-xim-inst and --enable-xim-inst. Ces options  détermines si  GTK+ emploiera la fonction de rappel (instantiate) de XIM. L'option par défaut est 'yes',  sauf si le système hôte est Solaris, où XRegisterIMInstantiateCallback() semble provoquer un  segfault.

--disable-xkb and --enable-xkb Par défaut le script  configure  essaiera d'auto-détecter si l'extension XKB est supportée par les X bibliothèques avec lesquelles GTK+ est lié. Ces options peuvent être utilisées pour contrôler explicitement si GTK+ supportera l'extension XKB.

--disable-gtk-doc and --enable-gtk-doc Le paquet  gtk-doc est utilisé pour générer la documentation de référence inclue avec GTK+.  Par défaut ce support pour  gtk-doc est désactivé parce que il requière des dépendances variées supplémentaires qui doivent être installées. Si vous avez gtk-doc installé et que vous modifiez  GTK+, vous pouvez  activer  le support gtk-doc en passant l'argument --enable-gtk-doc. S'il n'est pas activé, des fichiers HTML pré-générés sont distribués avec GTK+ et seront installés.???

--with-xinput. Contrôle si GTK+ is  construit avec le support pour l'extension XInput . L'extension XInput fournit un interface pour étendre les dispositifs d'entrée  tel que les tablettes graphiques. Quand ce support est compiler en sus, les programmes GTK+ peuvent avoir accès  aux positions de subpixel, à de multiples dispositifs d'entrées simultanés, et des "axes" supplémentaires fournis par les dispositifs comme la pression et l'inclinaison. Ceci est connu pour bien fonctionner sur des systèmes XFree86, bien que d'autres systèmes aient cette extension.

--with-gdktarget Bascule entre les  backends supportés pour GDK. L'option par défaut est x11, à moins que la plateforme soit Windows, dans ce cas le défaut est win32.

--disable-shadowfb and --enable-shadowfb Toggles shadow framebuffer support for the linux-fb target, if selected.