Préalables à la compilation sous Windows avec cygwin

Ce document est à usage historique uniquement

Ce document est un guide présentant les préalables à la compilation du code source de Mozilla 1.9 avant l'introduction du système MozillaBuild en mars 2007. Si vous compilez Firefox 1.5.0.10 ou supérieur, Firefox 2.0.0.2 ou supérieur, ou Firefox 3, veuillez consultez les Préalables à la compilation sous Windows standards.

Pour la compilation de Firefox 2, Firefox 1.5 et les autres produits Mozilla basés sur une branche antérieure à la 1.9, consultez Préalables à la compilation sous Windows des branches 1.7 et 1.8.

Si vous compilez de très anciennes versions du code source Mozilla, depuis la branche 1.0 ou plus anciennes, lisez et suivez les anciennes instructions de compilation avec nmake.

Matériel nécessaire

Mozilla prend du temps à compiler. Vous aurez besoin d'un système suffisant pour faire du développement :

  • Processeur Pentium III ou équivalent, 1 GHz ou plus, 1,5 GHz+ recommandés
  • 512 Mo de RAM, 1 Go recommandé
  • 1,5 Go d'espace disque en NTFS ou 3 Go d'espace disque en FAT, ou plus
  • Un système d'exploitation Windows de classe NT (NT4.0, Windows 2000 SP4, Windows XP et Windows Vista)

Logiciels nécessaires

Les logiciels suivants doivent être installés pour une compilation Windows standard.

Mozilla peut ne pas compiler si certains outils sont installés à un emplacement dont le chemin d'accès contient des espaces ou d'autres caractères spéciaux comme des plus ou des guillemets. Les outils Visual C++ peuvent toutefois être installés dans un répertoire contenant des espaces (le répertoire d'installation est recommandé).

Outils GNU pour Microsoft Windows (Cygwin)

Cygwin est un environnement semblable à Linux avec les outils GNU pour Windows. Mozilla utilise un certains nombre de packages de développement GNU, qui doivent être installés. Par mi ceux-ci, <tt>gawk</tt>, <tt>make</tt> et les utilitaires zip. GCC n'est pas utilisé et ne doit pas nécessairement être installé. Vous devez disposer de Cygwin 1.1.6 ou supérieur. Vous ne pouvez avoir qu'une seule version de cygwin installée sur votre système ; des installations concurrentes peuvent interférer l'une avec l'autre et causer des erreurs.

Rendez-vous sur http://www.cygwin.com/ et suivez les instructions d'installation. L'assistant d'installation de Cygwin fonctionne comme un programme Windows. Une page de cet assistant présente un résumé des catégories et packages. Vous devrez en installer certains ne faisant pas partie de la sélection par défaut.

Si vous pensez utiliser Cygwin seulement pour compiler Mozilla, installez uniquement les packages par défaut et ceux qui sont nécessaires pour Mozilla. Dans la version actuelle de l'installeur au moment de la rédaction de ce document (version 2.510.2.2), les packages supplémentaires nécessaires sont :

  • zip, unzip (dans Archive)
  • cvs (dans Devel, uniquement si vous récupérez le code via CVS, sans utiliser de tarballs)
  • libiconv (dans Devel, uniquement si vous compilez l'installeur)
  • patchutils (dans Devel)
  • perl (dans Interpreters)
  • make 3.80 n'est plus disponible, voir plus bas…

Si vous envisagez d'utiliser les outils GNU de Cygwin pour d'autres développements, installez également les éditeurs, outils de développement et interpréteurs, ainsi que tout ce qui vous semble intéressant. Vérifiez que vous sélectionnez aussi tous les packages dont Mozilla a besoin, comme unzip et zip !

Voici la liste complète des packages nécessaires pour compiler Mozilla. Vous pouvez l'utiliser pour vérifier une seconde fois votre installation, ou pour comprendre et personnaliser le processus de compilation :

  • ash — shell UNIX-like d'interprétation en ligne de commande (catégorie Base)
  • coreutils — utilitaires de base GNU (dont fileutils, install, sh-utils, et textutils) (catégorie Base)
  • cvs — concurrent versions system (catégorie Devel)
  • diffutils — utilitaire de comparaison de fichiers (catégorie Base)
  • findutils (catégorie Base)
  • gawk — langage de pattern matching (catégories Base et Interpretors)
  • grep — outil de recherche de texte (catégorie Base)
  • libiconv — conversion de jeux de caractères (catégorie Devel) ; libiconv2 ne contient pas le programme iconv nécessaire pour l'installeur
  • make 3.80 (pas 3.81, voir plus bas) — analyseur de dépendances pour la compilation de logiciels (catégorie Devel)
  • patchutils — une petite série de programmes opérant sur les fichiers patch (catégorie Devel)
  • perl — un langage de script utilisé pour contrôler certaines parties de la compilation (catégorie Interpreters)
  • sed — un langage de recherche et remplacement (catégorie Base)
  • unzip — outil d'extraction de fichiers zip (catégorie Archive)
  • zip — outil de création de fichiers zip (catégorie Archive)

Si vous envisagez de modifier les fichiers <tt>configure.in</tt> du système de configuration, vous aurez également besoin d'installer le package <tt>autoconf-2.13</tt> (autoconf-2.5x et 2.60 ne fonctionneront pas).

Pour les compilations ne servant pas au débogage, il est recommandé d'installer le package <tt>binutils</tt> pour disposer de <tt>strip.exe</tt>.

Vous pouvez utiliser ActivePerl d'ActiveState au lieu du package perl de Cygwin si vous préférez.

make

La version 3.80 de make n'est plus disponible dans l'installation de cygwin (et la version 3.81 ne fonctionnera pas), téléchargez-la donc depuis paracoda et placez le fichier <tt>make.exe</tt> inclus dans votre répertoier <tt>%cygwin%\bin\</tt>, par exemple en lançant un shell cygwin bash et en exécutant :

cd /
tar xjf /cygdrive/c/where-your-download-is/make-3.80-1.tar.bz2
bin/make.exe --version

Les outils moztools

Le package moztools contient des exécutables et des bibliothèques nécessaires pour compiler Mozilla. Un fichier zip unique contenant tous ces outils fonctionnant avec toutes les versions de MSVC est disponible : moztools-static.zip.

Ce fichier zip contient un seul dossier appelé moztools que vous devez conserver. Décompressez le fichier zip à l'emplacement où vous désirez que les outils soient installés ; cependant, Mozilla peut ne pas compiler si vous installez le répertoire <tt>moztools</tt> à l'intérieur du répertoire de Cygwin. La variable d'environnement MOZ_TOOLS doit pointer vers ce répertoire <tt>moztools</tt>. (Vous pouvez renommer le dossier, tant que la variable MOZ_TOOLS est modifiée également.)

Note : la branche 1.8.1 (Firefox 2) est compatible avec le package moztools-static. Les branches plus anciennes (dont la branche 1.8.0) ne le sont pas ; consultez les anciens préalables à la compilation pour plus de détails.

Le fichier zip moztools ne contient pas le code source des composants ; si leur compilation vous intéresse, vous pouvez en obtenir le code source. Le système de compilation d'OpenOffice.org ooo-build compile les outils utilisant ce code et contient certains patches appropriés pour ceux qui ne désirent pas utiliser les exécutables fournis.

cvs

CVS est le système de contrôle de sources utilisé par Mozilla. Vous n'avez pas besoin de cvs si vous désirez uniquement compiler depuis les tarballs de source téléchargés via FTP. Dans ce cas, vous pouvez passer cette étape.

Pour récupérer les sources de Mozilla, la version 1.11 de cvs ou supérieure est nécessaire. Cygwin CVS est recommandé ; WinCVS est également compatible. Lors de l'installation de cygwin CVS, vous devez également installer un éditeur comme emacs ou Xemacs.

Compilateur et éditeur de liens

Pour le développement sur le tronc CVS (Mozilla 1.9 ou supérieur), le compilateur standard est Microsoft Visual C++, version 8. L'édition Express gratuite de Microsoft Visual C++ 8 (appelée Visual C++ 2005 Express Edition) pourra fonctionner avec certains outils et options de configuration supplémentaires. Visual C++ 7.1 fonctionnera également. VC++ 7 n'est pas recommandé, et VC6 n'est pas supporté et produira des compilations inutilisables.

La compilation peut se faire soit à partir d'une ligne de commande du shell de Windows, ou depuis un shell Cygwin. Si vous utilisez le shell de Windows, vous devrez définir les variables d'environnement du compilateur à l'aide du script <tt>vcvars32.bat</tt> qui est installé avec Visual Studio (en choisissant « Visual C++ Command Prompt » depuis les entrées de Visual Studio du menu Démarrer, ce script s'exécutera pour vous dans un nouveau shell).

Il est également possible (bien que non recommandé) de compiler Mozilla à l'aide du compilateur MinGW gcc : consultez Compiling Mozilla with MinGW.

Tableau des compilateurs Visual Studio supportés
Branche HEAD
Gecko 1.9
Firefox 3
MOZILLA_1_8_BRANCH
Gecko 1.8.1
Firefox 2
MOZILLA_1_8_0_BRANCH
Gecko 1.8
Firefox 1.5.0.x
VC6 Non Oui (Officiellement) Oui (Officiellement)
VC7 (Visual Studio 2002) Pas vraiment Oui Oui
VC7.1 (Visual Studio 2003) Oui Oui Oui
VC8 (Visual Studio 2005) Oui (Officiellement) Non Non

Note 1 : les instructions de compilation pour Firefox 1.5/2.0 / Gecko 1.8.x ne sont pas couvertes dans ce document.

Note 2 : Toutes les informations concernant VC9/"Orcas" se réfèrent au CTP de janvier 2007. Elles peuvent ne pas être correctes pour les versions précédentes ou suivantes.

SDK de la plateforme

Passez cette étape si vous utilisez au moins Visual Studio .NET 2003, car vous disposez déjà de tous les SDK nécessaires. Pour les compilateurs plus anciens, ainsi que pour les éditions gratuites Visual Studio Express, vous devrez télécharger ces SDK chez Microsoft pour obtenir les en-têtes et bibliothèques GDI+.

Vous pouvez télécharger le Windows Server 2003 SP1 Platform SDK, ou le Windows Server 2003 R2 Platform SDK. Vous devez installer le « Windows Core SDK » (outils, environnement de développement et composants redistribuables) et le « Web Workshop SDK » (environnement de développement).

Afin que l'environnement de compilation reconnaisse les SDK, ceux-ci doivent être ajoutés à l'environnement (voir plus bas).

NSIS

Certaines applications compilées depuis le code source de Mozilla utilisent à présent NSIS pour leur programme d'installation, en particulier les applications du toolkit Firefox, Thunderbird et Sunbird. NSIS est déjà nécessaire au cours du processus de compilation normal étant donné que le programme de désinstallation est compilé à l'aide de NSIS. Si vous ne désactivez pas la compilation de l'installeur avec <tt>ac_add_options --disable-installer</tt> dans votre .mozconfig, installez NSIS et assurez-vous que son répertoire d'installation (pas le répertoire « Bin » du répertoire d'installation) figure dans votre PATH. La version 2.17 ou supérieure est recommandée.

Configuration de l'environnement

L'environnement de compilation doit être configuré de manière à ce que le système de compilation puisse trouver le compilateur et les bibliothèques nécessaires. Le plus facile est d'utiliser un script batch DOS. Votre compilation peut échouer si vos chemins contiennent des espaces ou d'autres caractères spéciaux. Assurez-vous de ne pas avoir installé de logiciels nécessaires à de tels emplacements, à l'exception de Visual C++.

Ce qui suit est un script batch (à exécuter avec <tt>cmd.exe</tt> ou en éditant le fichier <tt>cygwin.bat</tt>) qui doit être utilisé pour configurer les variables d'environnement :

rem --- Positionne HOME afin que cvs et ssh fonctionnent correctement
rem --- cvs utilise HOME pour localiser le fichier .cvspass, et ssh pour le fichier .ssh
rem --- si vous utilisez ssh, votre HOME doit être identique au répertoire spécifié dans /etc/passwd. Consultez http://www.cygwin.com/faq/faq0.html.
set HOME=C:\home

rem --- Positionne VCVARS vers l'endroit où se trouve le fichier vcvars.bat de Visual C++
set VCVARS=C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat

rem --- Positionne MSSDK vers l'emplacement d'installation du SDK MS
rem --- Uniquement nécessaire pour MSVC7 ou les éditions gratuites de MSVC qui ne sont pas fournies avec un SDK
set MSSDK=C:\Program Files\Microsoft Platform SDK

rem --- Positionne MOZ_TOOLS vers l'endroit où ont été installés les outils moztools
set MOZ_TOOLS=C:\moztools

rem --- Positionne CYGWINBASE vers le répertoire d'installation de cygwin
rem --- N'utilisez pas "CYGWIN", sinon cygserver, cygrunsrv et d'autres services cygwin ne fonctionneront pas bien.
rem --- La variable CYGWIN est également utilisée pour modifier le comportement de Cygwin.
set CYGWINBASE=C:\cygwin
rem --- S'assure que Cygwin n'affiche pas l'avertissement de chemin d'accès DOS
set CYGWIN=nodosfilewarning

rem --- Ajoute le chemin de Cygwin en début de path
rem --- Ceci est nécessaire afin que l'outil <tt>find</tt> de cygwin soit avant le <tt>find.exe</tt> de Windows dans le PATH, mais que l'outil <tt>link</tt> de cygwin soit après le <tt>link.exe</tt> de Visual C++.
set PATH=%CYGWINBASE%\bin;%PATH%

rem --- Positionne les variables d'environnement de MSVC
call "%VCVARS%"
 
rem --- Ajoute les chemins du SDK en début de path
rem --- Uniquement nécessaire pour MSVC7 ou les éditions gratuites de MSVC qui ne fournissent pas un SDK
set PATH=%MSSDK%\bin;%PATH%
set INCLUDE=%MSSDK%\include;%MSSDK%\include\atl;%INCLUDE%
set LIB=%MSSDK%\lib;%LIB%

rem -- moztools vient en dernier
set PATH=%PATH%;%MOZ_TOOLS%\bin

rem --- À présent, la variable PATH contient :
rem MS-SDK; MSVC; Cygwin; Windows; glib/libIDL; Moztools

rem --- Typiquement, la dernière chose que le script fait est de lancer un shell cygwin
rem --- attention à vos ~/.profile et /etc/profile qui peuvent écraser votre PATH !
bash --login -i

Pour un meilleur terminal, installez PuTTYcyg, une version du client SSH PuTTY qui peut servir de terminal pour Cygwin. Vous pouvez utiliser le même fichier batch, installez simplement PuTTYcyg quelque part dans votre PATH, puis remplacez la dernière commande du fichier batch par celle-ci, qui lancera Cygwin dans un shell PuTTY :

start putty -cygterm -

Correction du chemin de cygwin

Par défaut, cygwin se place au début de la variable PATH, ce qui détruit l'ordre patiemment construit de notre variable PATH. Vous pouvez soit :

  • éditer /etc/profile/ = %CYGWINBASE%\etc\profile (utilisez un éditeur préservant les fins de ligne Unix - <tt>nano</tt> du package cygwin en cas de doute), changez la ligne
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$PATH

en

PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin
  • ou ajouter un .profile ou .bash_profile à votre répertoire home.

Ceci est nécessaire pour permettre à Make de sélectionner la bonne instance du fichier <tt>link.exe</tt>. Si vous préférez ne pas toucher au <tt>PATH</tt> de Cygwin, renommez simplement <tt>link.exe</tt> en quelque chose d'autre. Vous pouvez également modifier le fichier batch pour le faire automatiquement au lancement et rétablir la situation initiale en quittant. Pour ce faire, remplacez la ligne suivante de votre fichier batch :

bash --login -i

par ceci :

rename link.exe cyglink.exe
bash --login -i
rename cyglink.exe link.exe

Si vous utilisez cette méthode, n'oubliez pas de quitter le shell de Cygwin en entrant <tt>exit</tt> au lieu de simplement fermer la fenêtre.

Problèmes courants, astuces et limitations

  • Consultez la FAQ sur la compilation de Mozilla#Questions spécifiques à Win32, elle contient une liste de problèmes très fréquents
  • Si vous avez choisi les fins de ligne DOS à l'installation de Cygwin, votre arbre de sources doit se trouver sous le point de montage <tt>/cygdrive/<c></tt>. Il ne doit pas se trouver à l'intérieur de votre <tt>/home</tt>.
  • Mozilla peut ne pas compiler si vous installez le répertoire wintools à l'intérieur du répertoire cygwin.
  • La compilation peut échouer si votre variable d'environnement PATH contient des guillemets ("). Ceux-ci ne sont pas transférés proprement lorsqu'ils sont passés aux sous-shells de cygwin. La plupart du temps, les guillemets ne sont pas nécessaires, ils peuvent donc être enlevés.
  • Vérifiez bien que vous disposez de la liste complète des packages cygwin nécessaires. Sinon, relancez l'installeur de cygwin et ajoutez les packages manquants.
    • Selon les listes de discussion de Cygwin, le changement de comportement dans make 3.81 était causé par le retrait d'un patche traitant les chemins d'accès DOS.
  • FAQ sur le débogage de Mozilla sous Windows : astuces sur le débogage de Mozilla sous Windows.
  • Mettre à jour un système de compilation Windows de VC6 à VC7
 

Étiquettes et contributeurs liés au document

Contributeurs ayant participé à cette page : BenoitL, Fredchat, Chbok, teoli, Mgjbot
Dernière mise à jour par : teoli,