II. Le "minimum compilant"▲
Par "minimum compilant", j'entend parler du minimum qui permet d'assurer une compilation réussie du système à créer.
Il faut, bien sûr, disposer du minimum permettant de compiler un code aussi simple que
#include <stdio.h>
int
main
(
)
{
printf
(
"
hello world
"
\n);
return
0
;
}
mais il faut aussi l'ensemble des bibliothèques et des outils nécessaires à la compilation de l'ensemble du système.
Cependant, si vous disposez déjà d'une version fonctionnelle de GCC, vous pouvez bien sûr vous contenter de renommer le dossier dans lequel elle est installée et utiliser votre propre version, en ajoutant au besoin seulement quelques outils bien particuliers.
II-A. GCC-core▲
GCC-core est l'archive qui contient le compilateur C de GCC. Toute la collection, ou presque, et les outils utilisés sont compilables à partir du moment où l'on dispose d'un compilateur C.
II-B. GCC-ada▲
Ada est le seul compilateur de la collection GCC qui nécessite de disposer... du compilateur Ada pour en permettre la compilation.
Vous pouvez bien sûr décider de ne pas l'installer si vous ne prévoyez pas de compiler le support de ce langage.
II-C. Binutils▲
Binutils est une collections d'outils qui fournit tout ce qui est nécessaire à la gestion et à l'utilisation correctes de fichiers binaires (exécutables, bibliothèques dynamiques et statiques...).
Parmis ceux-ci, on trouve
- l'archiveur ar
- l'éditeur de liens ld
- l'assembleur as
- les outils de gestion de bibliothèques dynamiques dllwrap et dlltools
- les outils de génération et de gestion de fichiers objets objcopy et objdump
- ...
II-D. Bison▲
Bison est un générateur universel d'analyseurs lexicaux qui convertit une grammaire sans contexte annotée en analyseur de LALR (1) ou de GLR (2) pour cette grammaire.
Il est indispensable pour permettre la compilation de binutils.
II-E. Flex▲
(F)Lex est un analyseur synthaxique souvent utilisé en conjonction avec bison.
II-F. Libintl▲
Libintl est une bibliothèque qui fournit un support des langues étrangères (par rapport à l'anglais qui est la langue "parlée" par les outils), afin de permettre à l'utilisateur d'utiliser sa propre langue maternelle (Native Language Support).
Bison dépend explicitement de cette bibliothèque.
II-G. Libiconv▲
Libiconv est une bibliothèque qui permet de supporter les différentes tables de caractères, allant de la table ANSI/ASCII aux différentes tables iso8892 et utf.
Elle est aussi une dépendance explicite de bison.
II-H. W32api▲
Microsoft fournit un ensemble de fichiers d'en-tetes et de bibliothèques pour programmer des applications sous Windows (le Platform SDK) au moyen de son compilateur VC++.
W32Api est une adaptation des headers de Microsoft pour etre utilisables avec GCC et fournit également certaines bibliothèques fréquement utilisées telles que OpenGl ou DirectX.
II-I. Mingw-runtime▲
mingw-runtime, enfin, est l'implémentation, basée sur les appels windows au lieu des appels posix/linux, de la bibliothèque standard du C.
II-J. Texinfo▲
Texinfo est un utilitaire qui permet de générer automatiquement des fichiers d'aide en différents formats(latex, info, pdf...).
Comme la commande d'installation finale sort systématiquement sur erreur si elle n'arrive pas à créer les fichiers *.info pour certaines parties, et bien qu'il s'agisse d'un format de fichier d'aide principalement utilisé sous linux, nous nous trouvons face à l'obligation d'installer cette collection d'outils de manière temporaire.
Sur le mirroir sourceforge du projet gnuwin32, vous trouverez en cherchant cette collection une archive nommée texinfo-dep, qu'il ne vous est pas utile de prendre, étant donné qu'il ne s'agit ni plus ni moins que des dlls de libint et libiconv.
II-K. Où les trouver?▲
Vous pouvez trouver des archives contenant les binaires propres à MinGW (GCC-core, GCC-ada et binutils, w32api et mingw-runtime) directement sur le site du projet MinGW ainsi que sur l'un des mirroirs de Sourceforge relatifs à MinGW.
Pour ce qui est des binaires de Bison, Flex, libintl, libiconv et texinfo, vous les trouverez sur l'un des mirroirs Sourceforge du projet GnuWin32.
Soyez attentif, au moment de choisir l'archive que vous téléchargez, au nom des archives présentes: il y a généralement deux noms forts semblables, l'un contenant un élément "-src-" dans son nom et l'autre non.
Il faut choisir l'archive qui ne contient pas cet élément "-src-" sous peine... de vous retrouver avec les sources, qui ne vous serviront à rien ici.
préférez la version *.zip de bison, flex, libintl et libiconv à la version executable, car cette dernière contient un assistant d'installation qui les placera par défaut dans c:Program Files et qui, si j'ai bon souvenir, placera un raccourci dans le menu démarrer pour chacun d'eux...
II-L. Installer tout cela▲
Les archives que vous trouverez de GCC-core, de GCC-ada et de binutils pour MinGW sont au format linux, c'est à dire qu'elles ont été créées au format *.tar.gz ou *.tar.bz2.
Vous trouverez facielement des interfaces graphiques permettant de gérer ces formats sous windows telles que winrar, 7zip, alzip ou tugzip
Cependant, si l'idée d'installer l'un ou l'autre de ces archiveurs ne vous plait pas, vous pouvez aussi choisir d'attendre d'avoir installé MSYS dans la section suivante pour les décompresser directement dans un environnement linux.
Pour ce qui est des archives de bison, flex, libintl et libiconv, vous devriez les trouver au format *.zip, et ne devraient pas poser de problème.
Je vous conseillerais donc d'utiliser votre gestionnaire d'archives préféré pour les extraire, MSYS étant vraiment minimal et nécessitant l'ajout d'un utilitaire nommé unzip pour extraire les fichiers de ce genre d'archives.
Pour les installer, il suffit de décompresser l'ensemble de ces archives dans un dossier unique, de préférence, en racine de disque dur, de n'importe quel nom. Par facilité, quand je parlerai de cette installation particulière, j'y ferai référence comme étant l'intstallation temporaire, et je considérerai qu'elle a été effectuée dans le dossier c:\gcc.
Comme toutes les archives contiennent sensiblement les mêmes sous dossiers (bin, include, lib, ...), il vous sera vraissemblablement demandé à chaque fois si vous souhaîtez réellement déplacer ou copier ces dossiers. Vous pouvez cliquer sans crainte sur "tous", car aucun fichier ne se trouve dans deux archives en même temps.
Il reste deux précautions importantes pour la suite des événements à prendre avant de quitter définitivement le dossier gcc:
La première est que l'extraction de Bison a placé un exécutable nommé M4.exe dans le dossier bin. Il se fait que nous installerons un émulateur linux à la page suivante et que cet émulateur dispose lui aussi d'un exécutable M4. Afin d'éviter les conflits, il faut donc supprimer M4.exe du dossier bin.
La deuxième précaution nous vient aussi de l'installation de bison. Bison n'est en définitive qu'une évolution de yacc.
Nous avons donc un fichier sans extension nommé yacc dans le dossier bin, qui n'est rien d'autre qu'un script linux permettant d'appeler bison quand on rencontre une instruction yacc, histoire de maintenir la compatibilité avec les codes sources plus anciens.
Malheureusement, et vous vous en rendrez rapidement compte si vous ouvrez le fichier avec n'importe quel éditeur de texte, le chemin d'accès à bison fait référence à un dossier nommé Bison et se trouvant dans le Program Files, ce qui ne correspond nullement à notre réalité. Il faut donc modifier de
#! /bin/sh
exec c:/progra~1/Bison/bin/bison -y "$@"
en
#! /bin/sh
exec c:/gcc/bin/bison -y "$@"
pour que tout rentre dans l'ordre.