Voir les bug DXR sur Mozilla :
https://bugzilla.mozilla.org/show_bug.cgi?id=489834 Things needed for DXR
https://bugzilla.mozilla.org/show_bug.cgi?id=553490 Generify the DXR build process

Au sujet de callgraph (qui est intégré à la dernière version de DXR) :
https://developer.mozilla.org/en/Callgraph/Installing_Callgraph

Les instructions suivantes sont aussi utiles :
https://developer.mozilla.org/En/Dehydra/Installing_Dehydra
https://bugzilla.mozilla.org/show_bug.cgi?id=524725#c28
successfully got dehydra built and passing tests by using 1.9.2 branch
spidermonkey instead of trunk.

Les anciennes instructions DXR sur http://zenit.senecac.on.ca/wiki/index.php/Instructions_for_Setting_Up_DXR sont périmées et à remplacer par le processus décrit dans le README du repository sur hg. A la suite, nous détaillons cela :

Etape outils de dev :
    su - -c "yum groupinstall 'Development Tools' 'Development Libraries' 'GNOME Software Development'"
    su - -c "yum install mercurial autoconf213"
    # librairie de calcul multi-precision mpfr
    su - -c "yum install mpfr-devel"

Etape hg de DXR :
     hg clone http://hg.mozilla.org/webtools/dxr/ dxr
     cd dxr


Ensuite le README conseille de lancer build-tools.sh , mais il n’est pas vraiment optimisé et lourd par rapport à ce qui est vraiment indispensable. Optimisons donc les étapes :

Etape compilation de jshydra (juste pour référence. Dans le cas où le source ne contient pas de js, on en a pas besoin et nous nous plaçons dans ce cas):
    # Les instruction dans le README à la racine sont les plus à jour au sujet de jshydra
    hg clone http://hg.mozilla.org/users/Pidgeot18_gmail.com/jshydra/ ./jshydra
    cd ./jshydra
    # dans cet exemple, on pointe vers le source complet de Mozilla. Cependant seul le source de SpiderMonkey est censé être vraiment nécessaire.     # Au 24 mars 2010, les versions postérieure à 2cf0bbe3772a de SpiderMonkey sont censées être utilisables
    ./configure --moz-src=${TOOLSDIR}/mozilla-central --moz-obj=${TOOLSDIR}/mozilla-central/objdir
make

Etape compilation de SpiderMoney pour Dehydra :
    # Récuperer just js dans le source de Firefox puis le compiler
     wget -O- http://releases.mozilla.org/pub/mozilla.org/firefox/releases/devpreview/1.9.3a3/source/mozilladeveloperpreview-3.7a3.source.tar.bz2 | tar xjvf – mozilla-central/js
Pour la branche 1.9.2 (leaseweb.com est nettement plus rapide en Europe) :
     wget -O- http://mirror.leaseweb.com/software/mozilla/firefox/releases/latest-3.6/source/firefox-3.6.2.source.tar.bz2 | tar xjvf - mozilla-central/js
     ## Chemin de référence : http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.6/source/firefox-3.6.2.source.tar.bz2
     mv mozilla-central/js/ dxr/tools/
     cd ~/dxr/tools/js/src
     autoconf-2.13
     mkdir build-release ; cd build-release
     ../configure --prefix=~/dxr/tools/SpiderMonkey
     make ; make install

Etape compilation de GCC 4.5 pour Dehydra (abandon, échec de compilation de GCC 4.5):
    # Récuperer gcc 4.5, le compiler ( La compilation des sources GCC 4.5 ne marche pas avec ma plate-forme !! )
     export GCCVER=4.5-20100325
     mkdir ~/dxr/tools/gcc-dehydra
     cd ~/dxr/tools/gcc-dehydra
     wget -O- ftp://ftp.nluug.nl/mirror/languages/gcc/snapshots/$GCCVER/gcc-$GCCVER.tar.bz2 | tar xjf -
     cd gcc-$GCCVER
     mkdir gcc-build ; cd gcc-build
     ../gcc/configure --without-libstdcxx --enable-checking --disable-bootstrap CFLAGS="-g3 -O0" --enable-languages=c,c++ --enable-__cxa_atexit --prefix=$PWD/../installed
     make ; make install

Etape compilation de GCC 4.3 pour Dehydra (en remplacement de GCC 4.5):
     mkdir ~/dxr/tools/gcc-dehydra ; cd ~/dxr/tools/gcc-dehydra     wget ftp://ftp.nluug.nl/mirror/languages/gcc/releases/gcc-4.3.4/gcc-4.3.4.tar.bz2 -O- | tar xjf -
     cd gcc-4.3.4/
     hg init .
     hg clone http://hg.mozilla.org/users/tglek_mozilla.com/gcc-moz-plugin-mq .hg/patches
     (for file in `cat .hg/patches/series`; do cat .hg/patches/$file; done) |patch -p1
     cd ..
     mkdir gcc-build
     cd gcc-build
     ../gcc-4.3.4/configure --without-libstdcxx --enable-languages=c,c++ --disable-multilib --prefix=$PWD/../installed
     make -j4 ; make install

Etape compilation de Dehydra :
     cd ~/dxr/tools/
     hg clone http://hg.mozilla.org/rewriting-and-analysis/dehydra/
     export CXX=~dxr/tools/gcc-dehydra/installed/bin/g++ (ou export CXX=~/installed/bin/g++)
     cd dehydra/
     ./configure --js-libs=~/dxr/tools/SpiderMonkey/lib --js-headers=~/dxr/tools/SpiderMonkey/include/js
     make
     # Checking if /home/cltbld/installed/bin/g++ accepts -fplugin for building treehydra: Yes
     make check ; make check_dehydra
     # Verifier aussi treehydra
     make check_both ; make check_treehydra

Etape compilation de glimpse + glimpseindex :
     cd ~/dxr/tools/
     wget http://webglimpse.net/trial/glimpse-latest.tar.gz -O- | tar xzf -
     cd glimpse-* ; ./configure ; make

Avec ces instructions, les binaires de glimpse sont dans ~/dxr/tools/glimpse-*/bin, il faudra les recopier ailleurs si besoin, pour que le serveur puisse y accéder.

Fini pour la compilation des outils, il ne reste plus qu’à réaliser le calcul des références !

Creation du site DXR : Mise à jour des options et configuration :
DXR va s’installer dans Apache. Par défaut les chemins correspondent à une installation dans /var/www/html (que nous noterons maintenant ROOT_SITE) et sont à mettre à jour si un chemin différent est utilisé.
        o Mettre à jour les chemins de l'environnement dans ~/dxr/dxr.config (qui sera ensuite placé dans ROOT_SITE/dxr.config ) :
     - Section [DXR]
     Pas de raison de modifier le chemin de xrefscripts et templates
     Noter qu'il va falloir recopier glimpse là où il faut, et peut-être modifier la version
    
     - Section [Web]
     Mettre à jour wwwdir vers ROOT_SITE et virtroot si ce n'est pas dxr
     Dans tous les cas, il faut modifier hosturl vers la bonne url
    
     - section repository (au départ [mozilla-central])
     changer le nom par celui souhaité pour le repository
     mozconfig n'est pas vraiment pertinent pour un autre projet, mais le fichier ~/dxr/xref-scripts/dxr-mozconfig est un bonne endroit pour stocker la valeur souhaitée pour CXX et CXXFLAGS
     A modifier :
     SOURCEROOT=$HOME/dxr/mozilla-central/mozilla
     OBJDIR=${SOURCEROOT}/objdir-opt
     DEHYDRAROOT=~/dxr/tools/xref-scripts
     DBROOT=~/dxr/tools/xref-scripts
     DBBACKUP=${DBROOT}-old
         o Modifier les options pour compiler :
    export CXX=$HOME/dxr/tools/gcc-dehydra/installed/bin/g++
    # use dehydra plugin and dxr.js script
    export CXXFLAGS=-fplugin="$HOME/dxr/tools/gcc-dehydra/dehydra-gcc/gcc_dehydra.so -fplugin-arg=$HOME/dxr/xref-scripts/dxr.js"
    # Ou bien :
    export CXXFLAGS="-fplugin=$HOME/dxr/tools/gcc-dehydra/dehydra-gcc/gcc_dehydra.so -fplugin-arg=\"$HOME/dxr/tools/xref-scripts/moz_types.js $SOURCEROOT\""
         o Modifier le chemin dans le script $HOME/dxr/xref-scripts/dxr.js :
    var srcroot = "/home/dave/mozilla-central/src/";

à remplacer par
    var srcroot = this.arguments[0] # Il faut mettre à jour les arguments d'appel ensuite !!
ou bien
    var srcroot = "
         o Créer le fichier wwwdir référencé par dxr.config :
mkdir /var/www/html/dxr


Creation du site DXR : Calcul des références du source du projet
    o Le script suivant fait le boulot :
$HOME/dxr/xref-scripts/run-dxr.py -f /path/to/web/dir/dxr.config

    o Il réalise les étapes suivantes :
         o Compilation du source avec Dehyda + dxr.js :
         o Post-processing dans la base dxr.sqlite :
         o Création des pages statiques html
         o index de recherche glimpse
        
         Une fois les arguements pris en compte, parseconfig parcourt la config et appelle indextree pour chacune des sections de source présente dedans
        
         indextree appelle en fait :
         build-xref.sh : pour compiler le source
         Appel avec [buildxref, sourcedir, objdir, mozconfig, xrefscripts, dbdir, dbname, wwwdir, tree]
         build-html.sh : pour créer les pages html
         build-glimpseidx.sh : pour créer les index glimpse
         Les deux créant ceci dans les répertoires configurés
        
    o Il crée l’arbo suivante :

   /var/www/html/dxr (racine configurée dans /www/dxr.config)
      /index.html (auto-generated during run-dxr.py)
         /mozilla-central (symnlink to mozilla-central-current)
         /mozilla-central-current
             /.dxr_xref
                 /mozilla-central.sqlite
                 /.glimpse* (glimpse index files)
                 /accessible (copie de tous les fichiers sources depuis le répertoire source)