Eliminer les warnings lors de la compilation d'un logiciel pour X11.

Introduction.
La raison de tous ces warnings.
Un moyen de corriger.
 

Introduction.

Après avoir installé la distribution MkLinux DR3, j'ai eu la désagréable surprise de constater qu'à la moindre compilation d'un soft destiné à X-Window, le compilateur produit une quantité de warning plutôt impressionnante : 
/usr/X11R6/include/X11/Xutil.h:363: warning: type defaults to `int' in declaration of `XClipBox'
/usr/X11R6/include/X11/Xutil.h:389: warning: type defaults to `int' in declaration of `XDestroyRegion'
/usr/X11R6/include/X11/Xutil.h:395: warning: type defaults to `int' in declaration of `XEmptyRegion'
/usr/X11R6/include/X11/Xutil.h:402: warning: type defaults to `int' in declaration of `XEqualRegion'
... (je vous fais grâce de la totalité des warnings ;-)

Il se trouve que la distribution de Linux PPC R4.2 de Computer Arts Hors-Série n° 3 d'avril 1999 présente la même particularité.

On trouvera, dans ce document, un moyen pour éliminer une fois pour toutes tous ces warnings.

La raison de tous ces warnings.

Si on regarde ce qui se passe aux environs de la ligne 363 de  /usr/X11R6/include/X11/Xutil.h, on constate que le warning est produit par le prototype de la fonction XClipBox : 

extern XClipBox(
#if NeedFunctionPrototypes
    Region  /* r */,
    XRectangle*  /* rect_return */
#endif
);

En effet, le type du retour de XClipBox n'est pas précisé.

Pour le compilateur, ce n'est pas une erreur. Dans ce cas, il va considérer que le type est int, et signale qu'il y a quelque chose qui n'est pas "carré" au moyen du warning type defaults to `int' in declaration of `XClipBox'

Pour l'auteur du fichier, en revanche, il est possible que ce soit une erreur (il a oublié de préciser le type). Il est également possible que l'auteur savait très bien ce qu'il faisait. C'est cette deuxième explication qui doit être la bonne.  Mais il a récidivé plusieurs dizaines de fois dans Xlib.h et Xutil.h ...

Certains softs ont des procédures de compilation qui positionnent le niveau de contrôle assez haut, ces warnings se transforment alors en erreurs, et il devient impossible de compiler le dit soft. Ce qui n'est pas précisément cool.

Un moyen pour corriger.

"Il suffit" de mettre le mot int partout où il a été oublié.
Pour cela, vous pouvez le faire à la main (plusieurs dizaines de lignes à modifier) ou appliquer ces patches qui ont été réalisés à partir de la distribution Linux PPC R4.2 de Computer Arts. Si vous n'avez pas installé cette distribution, il n'est pas certain qu'ils puissent s'appliquer.

Pour appliquer les patches, il faut d'abord décompacter l'archive. Copiez la dans /tmp, et passez la commande :

tar xvzf Xinclude-patch.tar.gz

Vous obtenez 2 fichiers, Xutil.h.patch et Xlib.h.patch.

Il est nécessaire d'être root pour effectuer les manipulations suivantes.

Déplacez vous dans le répertoire /usr/X11R6/include/X11/, et procédez à la sauvegarde des fichiers originaux :

cp Xutil.h Xutil.h.orig
cp Xlib.h Xlib.h.orig

Appliquez les patches :

patch </tmp/Xutil.h.patch
patch </tmp/Xlib.h.patch

Et voilà !
Vous n'avez plus qu'à vérifier que tout s'est bien passé en compilant un soft pour X11 quelconque, comme un gestionnaire de fenêtre par exemple.

Si vous obtenez maintenant des erreurs quand les fichiers Xutils.h et Xlib.h sont compilés, c'est que ces patches ne pouvaient pas s'appliquer chez vous. Restaurez les sauvegardes des fichiers Xutils.h et Xlib.h, et faites les modifications à la main.

Etienne Herlent.

 

Dernière mise à jour le 16/5/99.

les fichiers en téléchargement sont à ftp://ftp.linux-france.org/pub/macintosh/

 

Retour à GNU Linux sur Macintosh