Geckozone est un Club Unesco

Compiler Mozilla sur les plateformes Windows 32-bits

Profil(s) : Développeur
Date : 30 juin 2004
Auteur : Bouiaw

Version originale par Daniel Nunes, leaf@mozilla.org
Traduit de l’anglais par Sébastien Deleuze

  1. Introduction
  2. Compiler Mozilla
    1. Configuration minimale
    2. Installation des logiciels
    3. Définir les variables d’environnement
    4. Télécharger le code source
    5. Compiler le code source
  3. Problèmes fréquents
  4. FAQ sur le déboguage sous win32

1. Introduction

Ce document est un guide sur la compilation de Mozilla sous Windows. Cette compilation utilise l’émulateur Unix Cygwin pour en contrôler le déroulement, et les outils en ligne de commande fournis avec Microsoft Visual C++ pour compiler les fichiers sources. Mozilla utilise de nombreux outils et langages de scripts lors de la compilation, comme par exemple les makefiles, les scripts shell, xpidl ou encore des scripts Perl.

Mozilla est gros et complexe. Il est possible que vous ayez à résoudre des problèmes de configuration et de versions pour pouvoir le compiler. Désolé pour les éventuels dérangements, si vous rencontrez des problèmes, merci de les signaler sur Bugzilla.

Si vous cherchez de la documentation sur le développement de certaines fonctionnalités ou sur la correction de bogues, le Mozilla Hacking Documents est probablement ce que vous cherchez.

Remarque : La compilation avec nmake n’est plus supportée sur la branche principale. La page nmake build instructions est néanmoins toujours disponible pour les développeurs travaillant sur les anciennes branches comme celle de Mozilla 1.0. Pour celle-ci, la compilation avec nmake est la méthode recommandée.

2. Compiler Mozilla

Voici la configuration minimale ainsi que les différentes étapes pour compiler Mozilla.

2.1 Configuration minimale

La compilation de Mozilla prend du temps, vous allez avoir besoin d’une machine performante !

  • Pentium ou processeur équivalent, 266 MHz ou supérieur, 600MHz+ recommandé
  • 128 Mo de mémoire, 512 Mo recommandés
  • Disque dur de 1,5 Go en NTFS ou de 3 Go en FAT, ou plus
  • NT 3.51, NT 4.0, Win95, Win98, Win2000 (de référence), ou WinXP.

2.2 Installation des logiciels

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

Il est possible que Mozilla ne se compile pas si certains outils sont installés dans un répertoire dont le chemin d’accès contient des espaces ou des caractères spéciaux comme les guillemets ou les meta caractères. Cela ne s’applique pas aux outils Visual C++.

CVS pour Windows

Vous n’avez pas besoin de CVS, qui est le système de gestion du code source utilisé par Mozilla, si vous allez seulement compiler à partir des archives obtenues par FTP. Si c’est votre cas, vous pouvez sauter cette étape.

Pour télécharger le code source de Mozilla, cvs version 1.10 ou supérieur est nécessaire. Vous pouvez utiliser soit une version Windows, soit une version « Unix-like » de cvs.

Si vous souhaitez utiliser WinCVS, vous pouvez le télécharger à partir de http://www.cvshome.org/dev/codewindow.html.

WinCVS est recommandé si vous souhaitez utiliser notepad.exe ou tout autre programme pour modifier les fichiers utilisés par cvs. Si vous voulez utiliser un éditeur qui fonctionne uniquement avec les chemins d’accès DOS, vous devez utiliser WinCVS.

Vous pouvez également utiliser le cvs fourni avec Cygwin. L’éditeur et cvs peuvent être installés avec Cygwin. La version Cygwin de cvs fonctionnera SEULEMENT si vous téléchargez les nouvelles sources en utilisant Cygwin CVS ; Allez voir les problèmes fréquents pour plus de précisions.

Les outils GNU pour Microsoft Windows (Cygwin)

Cygwin est un environnement « Unix-like » pour Windows, gratuit et développé par RedHat. Mozilla utilise un sous-ensemble de Cygwin dédié au développement, qui doit être installé. Cela inclue gawk, make et les utilitaires zip. GCC n’est pas utilisé et n’a donc pas besoin d’être installé.

Vous devez utiliser Cygwin 1.1.6 ou supérieur. Les versions b20.x ne permettent pas de compiler Mozilla.

Allez sur http://sources.redhat.com/cygwin/download.html et suivez les instructions d’installation. L’assistant d’installation de Cygwin s’exécute comme un programme Windows. Une fenêtre de l’assistant présente les différents éléments qu’il est possible d’installer. Vous devez installer des éléments en plus de ceux sélectionnés par défaut.

Si vous allez utiliser Cygwin seulement pour compiler Mozilla, installez uniquement les composants sélectionnés par défaut, et les ceux nécessaires à Mozilla. Dans la version du programme d’installation disponible au moment de l’écriture de cet article, les composants à ajouter sont dans les catégories Devel, Interpreters et Archive : make (dans Devel), perl et gawk (dans Interpreters) et unzip et zip (dans Archive). Ces catégories peuvent faire l’objet de changements.

Si vous souhaitez utiliser les outils Cygwin pour d’autres développements, vous pouvez installer les éditeurs, les outils de développement et tout ce qui vous semblera intéressant. Assurez vous d’avoir sélectionné tous les composants nécessaires à Mozilla, comme unzip et zip !

Voici la liste complète des composants nécessaires à la compilation de Mozilla. Vous pouvez l’utiliser pour re-vérifier que ces composants sont sélectionnés, ou pour comprendre et personnaliser la compilation.

  • ash (interpréteur UNIX-like en ligne de commande)
  • diffutils (utilitaire de comparaison de fichiers)
  • fileutils
  • findutils
  • gawk (langage de « pattern » (catégorie Devel))
  • grep (un outils de recherche de texte)
  • make (analyseur de dépendances pour la compilation (catégorie Devel))
  • perl (langage de script utilisé pour contrôler certaines parties de la compilation (categorie Interpreters))
  • sed (langage de « recherche et remplace »)
  • sh-utils
  • textutils
  • unzip (décompression de fichier zip (catégorie Archive))
  • zip (création de fichier zip (catégorie Archive))

Si vous avez l’intention de modifier les fichiers configure.in du système de compilation, vous allez également devoir installer le composant autoconf-2.13 (autoconf-stable).

Si vous préférez, vous pouvez utiliser ActiveState perl à la place du composant perl de Cygwin.

Si vous choisissez Cygwin CVS à la place de WinCVS, cvs et les éditeurs ne sont pas installés par défaut. Installez un éditeur ou plus, tel que vim ou emacs à partir de la catégorie « Editor », et également cvs à partir de la catégorie « Devel ».

Cygwin CVS ainsi que les autres applications Cygwin peuvent utiliser le format standard de textes Windows si vous activez l’utilisation des fins de lignes DOS quand vous exécutez le programme d’installation de Cygwin.

Les wintools Netscape

Le fichier wintools.zip contient les bibliothèques précompilées et les outils qui sont nécessaires à la compilation de Mozilla.

Décompressez le fichier zip dans un répertoire temporaire, ouvrez l’invite de commandes, et affectez à MOZ_TOOLS le répertoire où vous voulez que les outils de compilation soient installés, par exemple : set MOZ_TOOLS=c:\moztools.

Le répertoire MOZ_TOOLS ne doit pas être à l’intérieur du répertoire où est installé Cygwin, ni dans un de ses sous-répertoires. Cela pourrait faire échouer la compilation.

Exécutez le script d’installation des wintools. Ce script va installer les fichiers dans le répertoire %MOZ_TOOLS%/bin.

cd buildtoolswindows
install.bat

Kit de développement Win32

Vous allez devoir installer un des compilateurs suivants afin de compiler Mozilla sous Win32 :

Microsoft Visual C++

Microsoft Visual C++ doit être obtenu à partir de Microsoft. L’interface graphique n’est pas utilisée, seuls le sont les outils en ligne de commande CL, le compilateur C, LINK - l’éditeur de lien - et RC, le compilateur de ressources. Ces outils sont lancés à partir du programme make de Cygwin.

Vous devez avoir la version 6.0 ou ultérieure, avec le Service Pack et le Processor Pack indiqués ci-dessous. Le version 5.0 n’est pas prise en charge et ne pourra probablement pas compiler Mozilla.

La version 7.0 nécessite des éléments supplémentaires qui sont spécifiés plus bas.

Assurez vous d’avoir configuré le compilateur en utilisant le script vcvars32.bat qui est fourni. Lancez ce fichier à partir de la ligne de commande.

Bibliothèques .NET/MSVC 7 nécessaires

Lors de la compilation avec MSVC++ 7, vous devez installer les versions de glib & libIDL compilées avec VC7. Vous trouverez des versions pré-compilées de ces bibliothèques à cette adresse : ftp://ftp.mozilla.org/pub/mozilla/libraries/win32/.

Il est recommandé de ne PAS installer ces bibliothèques dans le répertoire MOZ_TOOLS existant. Il est préferable de choisir un autre répertoire et de définir GLIB_PREFIX & LIBIDL_PREFIX en conséquence dans le fichier MOZCONFIG ou dans votre environnement.

# Exemple d'une entrée dans mozconfig
GLIB_PREFIX=c:/apps/vc7
LIBIDL_PREFIX=c:/apps/vc7

GCC pour Win32 (MinGW ou Cygwin)

Depuis Mozilla 1.4b, il est possible de compiler Mozilla pour Win32 avec GCC. Cependant, il y a certaines spécificités dont celui qui veut utiliser ce kit de développement doit être informé :

  • En raison de la conception des compilateurs C++, les bibliothèques compilées avec GCC seront très certainement incompatibles avec les bibliothèques compilées avec MSVC. Par exemple, les plugins XPCOM (comme le plugin Java) ne fonctionneront pas.
  • En raison de l’utilisation de code spécifique à MSVC et à la relative immaturité de l’api Win32, certaines fonctionnalités ne seront pas disponibles dans les versions compilées avec GCC. L’arbre des dépendances pour le bug 203303 recense la liste des problèmes spécifiques à MinGW GCC.
  • GCC sous Win32 est une plateforme tier-3 alors que MSVC sous Win32 est une plateforme tier-1

GCC pour Win32 fait partie du projet MinGW.

Les composants suivants sont nécessaires à la compilation :

  • gcc >= 3.2.2 (20030208)
  • binutils >= 2.13.90 (20030104)
  • w32api >= 2.3
  • mingw-runtime >= 2.4

GCC pour Win32 fait également partie du projet Cygwin si vous installez les composants Cygwin additionnels suivants :

  • binutils
  • gcc
  • gcc-mingw
  • mingw-runtime
  • w32api

Il est recommandé d’utiliser le programme d’installation MinGW disponible séparément afin d’éviter d’éventuels conflits avec l’environnement de développement Cygwin.

Vous allez également avoir besoin du composant cygutils de Cygwin, vous pouvez donc exécuter dos2unix sur les entêtes à l’intérieur des Netscape wintools.

2.3 Définition des variables d’environnement

Les outils Cygwin et MSVC++ dépendent de variables d’environnement qui définissent des options, des répertoires et des chemins de recherche. Cygwin reprend les variables d’environnement de Windows et les inclus dans son propre système de gestion des variables, il y a donc beaucoup de moyens différents pour les définir. Pour compiler à partir de Cygwin, vous pouvez définir les deux types de variables dans le fichier cygwin.bat à la racine du répertoire cygwin. Pour compiler à partir de l’invite de commandes Windows, vous devez les définir dans un fichier de configuration ou en utilisant la boite de dialogue Propriétés Système, selon votre version de Windows.

La compilation peut échouer si les chemins d’accès que vous avez défini comportent des caractères spéciaux. Assurez-vous de ne pas avoir installé ces logiciels dans un répertoire avec un chemin d’accès de cette sorte, à l’exception de Visual C++.

Les variables d’environnement suivantes doivent être définies :

set MOZ_TOOLS=c:\moztools

Cette commande spécifie le répertoire où les wintools Netscape vont installer leurs programmes. Mozilla ne se compilera pas si vous installez le répertoire wintools dans le répertoire où se trouve Cygwin.

Le compilateur essaye d’ouvrir MOZ_TOOLS/include/glib.h, assurez vous donc que le fichier glib.h provenant des outils de compilation Windows soit bien à cet emplacement.

set PATH=%PATH%;c:\mingw\bin;%MOZ_TOOLS%\bin;c:\cygwin\bin

Cette commande inclue les wintools Netscape et Cygwin dans votre chemin de recherche par défaut.

Note pour les utilisateurs de .NET/VC7 : GLIB_PREFIX/bin et LIBIDL_PREFIX/bin doivent être dans votre variable PATH avant MOZ_TOOLS/bin.

set HOME=c:\home

HOME est seulement nécessaire quand vous utilisez cvs. Si c’est votre cas, affectez lui le chemin d’accès au répertoire où vous souhaitez que cvs créé le fichier .cvspass. En définissant HOME, vous indiquez à cvs d’utiliser le même fichier .cvspass que ce soit dans l’invite de commandes Windows ou dans l’invite de commande Cygwin. Cette variable ne doit pas contenir de caractères spéciaux.

set MOZCONFIG

Cette commande spécifie l’emplacement de votre fichier mozconfig. Ce fichier contient vos options de compilation. Pour utiliser les valeurs par défaut, ne définissez pas cette variable.

Le configurateur de compilation Unix vous permet de créer des fichiers de paramètres. Pour personnaliser la compilation, utilisez le configurateur de compilation Unix pour créer un fichier mozconfig, copiez le dans un répertoire que vous affecterez à la variable MOZCONFIG avant de compiler.

Exemple d’un fichier de variables d’environnement

Ce fichier définit une configuration permettant de compiler Mozilla sur une installation classique sur le disque C avec MinGW (si utilisé), Cygwin, les moztools, et les paramètres de compilation standards.

set MOZ_TOOLS=c:\moztools
set PATH=%PATH%;c:\mingw\bin;%MOZ_TOOLS%\bin;c:\cygwin\bin
set HOME=c:\home

2.4 Télécharger les sources

Mozilla est un projet open-source hébergé sur un serveur cvs. Vous pouvez télécharger les sources de Mozilla à partir du cvs ou en téléchargeant l’archive compressée d’une version particulière.

Si vous avez seulement l’intention de compiler une version officielle, ou si vous ne souhaitez pas mettre à jour ces sources très fréquemment, utilisez le ftp pour télécharger l’archive contenant les sources. Une archive peut être décompressée et compilée ; Les archives téléchargeables par ftp sont produites en général une fois par jour, et pour chaque milestone. Ces archives sont accessibles sur mozilla.org.

Vous aurez besoin d’utilitaires tels que Cygwin tar ou Aladdin’s Stuffit Expander pour les décompresser. Winzip ne doit pas être utilisé car, par défaut, certaines versions n’extraient pas les fichier de taille nulle dans les archives .tar.gz.

Si vous pensez vous occuper du développement en cours de Mozilla, vous devriez choisir cvs, pour récupérer les sources. CVS fourni le code le plus à jour, mais il est plus lent que FTP, et les sources fournies ne se compilent pas toujours.

Pour télécharger ou mettre à jour les sources : make -f client.mk checkout

Attention : Si vous utilisez la version française de VC7, vous devez appliquer le patch suivant (merci à Daniel Glazman pour l’info) :

Index: configure
===================================================================
RCS file: /cvsroot/mozilla/configure,v
retrieving revision 1.1211
diff -u -r1.1211 configure
--- configure        28 Jul 2003 20:36:13 -0000        1.1211
+++ configure        30 Jul 2003 11:26:59 -0000
@@ -2620,10 +2620,10 @@


        # Determine compiler version
-        CC_VERSION=`"${CC}" -v 2>&1 | grep Version | sed -e 's|.* Version ||' | sed -e 's| *$||'`
+        CC_VERSION=`"${CC}" -v 2>&1 | grep version | sed -e 's|.* version ||' | sed -e 's| *$||'`
        _CC_MAJOR_VERSION=`echo ${CC_VERSION} | awk -F. '{ print $ 1 }'`

-        CXX_VERSION=`"${CXX}" -v 2>&1 | grep Version | sed -e 's|.* Version ||' | sed -e 's| *$||'`
+        CXX_VERSION=`"${CXX}" -v 2>&1 | grep version | sed -e 's|.* version ||' | sed -e 's| *$||'`
        _CXX_MAJOR_VERSION=`echo ${CXX_VERSION} | awk -F. '{ print $ 1 }'`

        if test "$_CC_MAJOR_VERSION" != "$_CXX_MAJOR_VERSION"; then
Index: configure.in
===================================================================
RCS file: /cvsroot/mozilla/configure.in,v
retrieving revision 1.1259
diff -u -r1.1259 configure.in
--- configure.in        30 Jul 2003 02:38:56 -0000        1.1259
+++ configure.in        30 Jul 2003 11:27:03 -0000
@@ -327,10 +327,10 @@
        AC_LANG_RESTORE

        # Determine compiler version
-        CC_VERSION=`"${CC}" -v 2>&1 | grep Version | sed -e 's|.* Version ||' | sed -e 's|[ ]*$||'`
+        CC_VERSION=`"${CC}" -v 2>&1 | grep version | sed -e 's|.* version ||' | sed -e 's|[ ]*$||'`
        _CC_MAJOR_VERSION=`echo ${CC_VERSION} | awk -F. '{ print $ 1 }'`

-        CXX_VERSION=`"${CXX}" -v 2>&1 | grep Version | sed -e 's|.* Version ||' | sed -e 's|[ ]*$||'`
+        CXX_VERSION=`"${CXX}" -v 2>&1 | grep version | sed -e 's|.* version ||' | sed -e 's|[ ]*$||'`
        _CXX_MAJOR_VERSION=`echo ${CXX_VERSION} | awk -F. '{ print $ 1 }'`

        if test "$_CC_MAJOR_VERSION" != "$_CXX_MAJOR_VERSION"; then

2.5 Compiler les sources

Vous pouvez compiler à partir de l’invite de commandes Windows ou de celle de Cygwin, du moment que les variables d’environnement sont correctement paramétrées.

Pour compiler les sources : make -f client.mk build

Pour recompiler sans télécharger les sources : make -f client.mk build_all_depend

Le configurateur de compilation Unix vous permet de créer des fichiers de paramètres. Vous pouvez permuter entre les différents profils de compilation ainsi créés en affectant à la variable d’environnement MOZCONFIG les différents fichiers créés avec le configurateur de compilation Unix.

Quand vous compilez avec GCC, vous devez indiquer au compilateur le nom de certains outils. Voici l’exemple d’un fichier MOZCONFIG utilisé pour compiler avec GCC :

# fichier mozconfig basic
CC=gcc
CXX=g++
CPP=cpp
AS=as
LD=ld

# Les options suivantes ne marchent pas encore sur Gcc-Win32
ac_add_options --disable-accessibility
ac_add_options --disable-activex

3. Problèmes fréquents

- Assurez vous que tous les programmes que vous utilisez sont dans des versions stables et qu’elles sont plus récentes que les versions minimales requises.
- Il se peut que Mozilla ne se compile pas si vous installez le répertoire wintools dans le répertoire Cygwin.
- La récupération des sources à partir du cvs n’est pas garantie à 100%, cela est dû principalement à de mauvaises modifications ou à des conflits de dates. Vérifiez la TinderBox avant de télécharger les sources, et réessayez si vous avez des erreurs alors que la branche est verte. La compilation à partir des archives compressées devrait fonctionner sans aucun problème.
- La compilation peut échouer si les chemins que vous avez défini comportent des caractères spéciaux. Mis à part Visual C++, n’installez pas les outils de compilation Mozilla dans de tels chemins d’accès.
- La compilation peut échouer si votre variable PATH contient des guillemets ("). Les guillemets ne sont pas correctement interprétés par Cygwin. Les guillemets ne sont généralement pas utiles, ils peuvent donc être supprimés.
- Vérifiez bien que vous avez installé tous les composants Cygwin listés plus haut. Si ce n’est pas le cas, relancez le programme d’installation et installez les composants manquants.
- En cas de doute, assurez vous d’avoir correctement installé chaque outil, et vérifiez qu’il se lance sans erreur.
- Comparez vos variables d’environnement avec celles données en exemple.
- Les outils Microsoft (CL, LINK, RC) renvoient des erreurs « fichier non trouvé »

Les variables d’environnement INCLUDE et LIB sont utilisées par les outils Microsoft Visual C++. Elles sont définies le plus souvent dans le fichier vcvars32.bat. Selon les modules que vous compilez, vous aurez ou non besoin des MFC et d’ATL. Vous pouvez voir ci-dessous les chemins d’accès qui fonctionnent si Visual C++ est installé dans « c:\msvs ».

set INCLUDE=c:\msvs\VC98\Include;c:\msvs\VC98\MFC\Include;c:\msvs\VC98\ATL\Include
set LIB=c:\msvs\VC98\Lib;c:\msvs\VC98\MFC\Lib

- cvs renvoie le message d’erreur suivant :

cvs update: authorization failed: server XXXX rejected access
cvs update: used empty password; try « cvs login » with a real password

Les versions actuelles de Cygwin cvs (1.10.8) ne sont pas capables de lire les fichiers créés par WinCVS. Vous devez donc vous assurer que WinCVS apparaît dans votre chemin d’accès par défaut avant Cygwin cvs. Vous pouvez également télécharger de nouveau les fichiers sources en utilisant Cygwin cvs.

- J’ai une erreur à propos d’un fichier .dtd introuvable

Vous avez probablement utilisé Winzip pour décompresser l’archive. C’est déconseillé. Par défaut, Winzip n’extrait pas les fichiers de taille nulle avec des archives d’extension .tar.gz. Utilisez un autre utilitaire, ou le pull script pour vérifier les fichiers que Winzip n’extrait pas.

- nsinstall ou un autre programme natif Win32 rapporte qu’un fichier ne peut être trouvé

Pour commencer, vérifier ce que vous renvoie la commande mount de Cygwin, elle devrait vous renvoyer quelque chose de similaire à ça :

c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
c:\cygwin on / type system (textmode)
c:\cygwin\bin on /usr/bin type system (textmode)
c:\cygwin\lib on /usr/lib type system (textmode)

Le compilateur s’attend à ce que les lecteurs soient montés avec le préfixe /cygdrive. Si c: ou e: n’utilisent pas /cygdrive comme préfixe, vous ne pouvez pas compiler Mozilla en utilisant ces lecteurs. Pour se faire, vous allez devoir monter manuellement le lecteur concerné en utilisant la commande :

mount -s "e:" /cygdrive/e

Note : binmode (fin de ligne unix) ou textmode (fin de ligne dos) importe peu pourvu que vous utilisiez un éditeur de texte (emacs, msdev) qui peut manipuler les fins de lignes appropriées.

- xpidl.exe plante avec une faute de protection générale à l’adresse 0x00000010

Si vous compilez avec .NET/VC7, vous devez utiliser les versions compilées avec VC7 des bibliothèques glib & libIDL. Le répertoire qui contient les versions VC7 de ces bibliothèques doit être dans votre PATH avant les répertoires des autres versions de ces dlls.

Si vous compilez avec VC6, assurez-vous de ne pas utiliser les versions VC7 durant la compilation ou l’exécution.

- cvs s’arrête avec le message : cvs [checkout aborted]: cannot rename file CVS/Entries.Backup to CVS/Entries: Permission denied

Avec Cygwin 1.3.13, ntsec est activé par défaut. ntsec est un programme qui essaye de reproduire le système de permissions UNIX en se basant sur la gestion de la sécurité de Windows NT. Le message d’erreur indique qu’il y a des conflits entre les permissions UNIX indiquées dans le fichier Cygwin /etc/passwd et celles utilisées par Windows NT.

Pour que cela fonctionne, vous pouvez ajouter « nontsec » à votre variable d’environnement CYGWIN. Une solution plus « propre » serait de résoudre le conflit entre les droits UNIX et les droits Windows NT.

- Le première vérification de cvs échoue avec le message :

cvs [checkout aborted]: *PANIC* administration files missing

Vous ne pouvez pas créer une branche cvs sous un répertoire dont le nom est « CVS ». C’est un bug de cvs. cvs s’attend à trouver certains fichiers d’administration dans le répertoire CVS, et il ne pourra pas s’exécuter correctement si ils sont manquants.

4. FAQ sur le déboguage sous win32

Les astuces sur le déboguage de Mozilla sous Windows sont regroupées dans la FAQ sur le déboguage sous Win32.

Articles dans la même rubrique