Dans chaque repertoire de votre composant (que vous devez placer dans le répertoire des sources de Mozilla), il doit y avoir un fichier Makefile.in.
Voici sa structure générale :
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
...(autres constantes et directives)...
include $(topsrcdir)/config/rules.mk
Entre les deux includes, vous y mettrez un certain nombre de constantes décrites ci-aprés. Du fait du manque de documentation officielle, il y a encore pas mal de zone d'ombres. Certaines informations ici peuvent ne pas être complètement exactes.
Toutes ces constantes ne sont pas obligatoires
- DEPTH
- indique le chemin relatif du repertoire des sources de mozilla par rapport au répertoire courant
- topsrcdir
- mettre @top_srcdir@ dans Makefile.in. il sera remplacé par le chemin absolu vers le repertoire des sources de mozilla.
- srcdir
- mettre @srcdir@ dans Makefile.in. Il sera remplacé par configure par le chemin absolu du répertoire courant.
- VPATH
- liste de répertoire nécéssaire à make. En général, mettre @srcdir@ dans Makefile.in
- MODULE
- nom du "module". Il s'agit en gros le nom de votre projet. Ce nom sera utilisé pour par exemple créer un répertoire spécifique à votre module dans dist/include/
- XPIDL_MODULE
- nom du module xpidl. Indique le nom du fichier .xpt qui contiendra tout les xpt indiqués dans XPIDLSRCS (pour cela, xpt_link sera appelé). Si cette constante n'est pas présente, ce sera le nom de MODULE qui sera utilisé pour le fichier xpt.
- LIBRARY_NAME
- nom de la bibliothèque. Ce sera le nom de la bibliothèque. Le fichier généré sera libXXXXX.dll ou libXXXXX.so, où XXXXX est le nom indiqué dans LIBRARY_NAME
- SHORT_LIBNAME
- nom sur 8 lettres de LIBRARY_NAME. indispensable si le nom de LIBRARY_NAME fait plus de 8 lettres.
- MODULE_NAME
- le nom du module que vous avez déclaré à l'aide de NS_IMPL_GETMODULE
- IS_COMPONENT
- indique si il s'agit d'un composant, c'est-à-dire où placer la librairie générée par la compilation (.so sous Linux, .dylib sous Mac OS X, .dll sous Windows)
- si IS_COMPONENT = 1, la librairie générée ira dans le répertoire dist/bin/components à la fin de l'installation (ou dans le répertoire dist/lib/components -- dans quelles conditions ?)
- si IS_COMPONENT = 0 (ou n'est pas défini ?) la librairie générée ira dans le répertoire dist/bin (ou dans le répertoire dist/lib -- dans quelles conditions ?)
- EXPORT_LIBRARY
- indique si il faut lier le code du module à l'éxecutable principal même en mode de compilation statique
- si EXPORT_LIBRARY = 1 liaison toujours dynamique -- c'est cette option qu'il faut définir pour créer une extension indépendante placée dans un xpi
- si EXPORT_LIBRARY = 0 (ou n'est pas défini ?), votre librairie sera liée dynamiquement si le mode de compilation est dynamique (--enable-dynamic --disable-static), statiquement dans le cas contraire (--enable-static --disable-dynamic)
- GRE_MODULE
- indique si le module fait parti du GRE (c'est à dire ? ) (valeur = 0 ou 1)
- FORCE_STATIC_LIB
- indique si on veut générer une bibliothèque statique (valeur = 0 ou 1)
- FORCE_SHARED_LIB
- indique si ? (valuer = 1 ou ne pas définir)
- PACKAGE_FILE
- ?
- DEFINES
- ?
- DIRS
- indique les sous répertoires qui doivent être parcouru pour la construction. Chacun d'eux doivent contenir un Makefile.in
- REQUIRES
- liste des noms des repertoires de modules dans dist/include/
- EXTRA_DSO_LDOPTS
- Une liste de bilbilothèque et d'options pour le lieur. doit se terminer par $(NULL)
- EXTRA_DSO_LIBS
- Une liste de ?
- SDK_HEADERS
- Une liste de ?, devant se terminer par $(NULL)
- LIBS
- Une liste de ?, devant se terminer par $(NULL)
- SHARED_LIBRARY_LIBS
- Une liste de ?, devant se terminer par $(NULL)
- XPIDLSRCS
- liste des fichiers idl à compiler. La liste doit se terminer par $(NULL)
- CPPSRCS
- liste des fichiers cpp à compiler. La liste doit se terminer par $(NULL)
- CSRCS
- liste des fichiers c à compiler. La liste doit se terminer par $(NULL)
- EXTRA_COMPONENTS
- liste de fichiers javascript xpcom
- EXPORTS
- liste de fichier .h qui seront installés dans dist/include/
- SIMPLE_PROGRAMS
- ?
Pour plus de détails, voir http://www.mozilla.org/build/build-syste(..) et http://www.mozilla.org/build/glossary.ht(..)
Chapitre XpCom