(retour page principale), (IDL et GDL), (Tutoriel GDL).

Autres documents d'aide à la compilation de GDL: sous OSX (OSX 10.5.6, OSX 10.6.3, OSX 10.9x ou 10.10x), sous CentOS 5.4/5.5, sous Ubuntu 12.04, sous MS-windows avec MinGW

Alain Coulais
Mars 2012
Ne pas hésiter à me remonter les typo, l'ortho, les erreurs, les omissions ...

Compiler GDL (0.9.2 CVS) sous Linux CentOS 5.7

L'objectif de ce document est de compiler GDL sur une machine multi-coeurs avec un système à jour mais en voie d'obsolescence : CentOS 5.7. Il n'est plus possible de compiler les version CVS depuis GDL 0.9.2 avec les paquets fournis par ce système (en particulier PLplot), et il faut donc compiler soi-même une version récente de PLplot, et accessoirement ImageMagick. Il s'agit juste de mettre en avant quelques subtilités qui permettent de continuer à profiter d'une machine puissante et sous-employée pour tester GDL.

D'autres documents d'aide à l'installation et à la compilation sont proches de celui-ci, chacun peut contenir des détails qui permettent de résoudre certain(s) problème(s) ponctuel(s), ou de prendre en compte certaines librairies facultatives (installation simple ou compilation).

Une des difficultés ici est que les avancées dans PLplot et ImageMagick n'ont pas été suivies dans cette branche vieillissante de CentOS (mais les utilisateurs de ce serveur ne veulent pas changer de version sauf par des mises à jour transparentes).

On va télécharger une version récente mais pas trop de PLplot, car si on prend une version trop récente on va avoir des problèmes trop lourds avec des changement dans la dépendance pango.

De même, si on veut les fonctionnalités liées aux formats d'images (JPEG, PNG, GIF) je recommande de compiler une version récente de ImageMagick car la version packagée pour CentOS 5.7 (ImageMagick-c++-devel-6.2.8.0-4.el5_5.3) pose quelques problèmes connus avec GDL et contient quelques bugs documentés.

Certains paquets peuvent vous manquer, merci de voir avec votre administrateur système. Il faut bien évidemment avoir GCC (ici 4.1.2) et CMake. Il faut avoir les versions -devel- de FFTw, ReadLine, GSL ... (avant de solliciter votre vénéré SysAdmin, faites bien le point de ce dont vous avez vraiment besoin: l'exécutable cmake, les versions -devel- des bibliothèques logicielles FFTw, GSL, ReadLine.)

Initialisation

Je suppose que vous êtes sous l'interpréteur de commande bash, dans la racine de votre home. On travaillera dans un sous-répertoire GDL.

$ cd $HOME
$ mkdir GDL
$ cd GDL

CMake

CMake est désormais disponible sous CentOS (ajouter le paquet si nécessaire), la version indiquée par rpm -qa | grep cmake est la: cmake-2.6.4-5.el5.4 confirmé par : /usr/bin/cmake --version qui donne : cmake version 2.6-patch 4

Si vous voulez vraiment compiler une version récente, cf le document de Maxime.

Compilation de PLplot

PLplot est obligatoire pour le bon fonctionnement de GDL; en effet, c'est la bibliothèque permettant l'affichage des graphiques,...

Les versions récentes (disons >= 5.9.0) de PLplot utilisent CMake pour la compilation ...

Les derniers progrès (sans rentrer dans un mode de flag --enable-oldplplot) dans GDL suggèrent une version de PLplot >= 5.9.0, on a testé avec succès avec 5.9.3. Il ne faut pas prendre une version trop récente car sinon on va avoir des problèmes avec des changements dans Pango.

La version packagée dans CentOS est clairement obsolète pour GDL. (rpm -qa | grep plplot-devel donne : plplot-devel-5.7.3-3.el5.1)

$ cd $HOME/GDL
$ wget [...] (le lien qui va bien vers plplot-5.9.3.tgz)
$ tar -zxf plplot-5.9.3.tgz
$ cd plplot-5.9.3
$ mkdir Compilation
$ cd Compilation
$ cmake -DCMAKE_INSTALL_PREFIX=$PWD ..
$ make -j 10 (vous pouvez adapter -j 10 en fonction du nombre de coeurs)
$ make install
$ cd ../..

Compilation d'ImageMagick

ImageMagick n'est pas obligatoire pour le bon fonctionnement de GDL. Mais elle est indispensable si vous comptez lire et écrire des fichiers graphiques dans les formats JPEG, PNG et GIF.

La version packagée pour CentOS 5.7 a des problèmes pour GDL., c'est pourquoi nous recommandons une compilation manuelle, qui n'est pas trop compliquée.

Les versions actuelles d'ImageMagick utilisent configure pour la compilation ...

$ cd $HOME/GDL
$ wget [...] (à choisir via download)
$ tar -zxf ImageMagick-6.5.9-0.tgz
$ cd ImageMagick-6.5.9-0
$ mkdir Compilation
$ ./configure --prefix=$PWD/Compilation/ --without-perl
$ make -j 10 (vous pouvez adapter -j 10 en fonction du nombre de coeurs)
$ make install
(il y aura peut-etre qlq complaintes pour Perl, semble sans incidence) $ cd ..

Installation des RPM de GSL

GSL est la bibliothèque de calcul numérique, obligatoire pour compiler GDL. Il faut une version de la GSL >= 1.12. La version packagée dans CentOS est OK (rpm -qa | grep gsl-devel donne : gsl-devel-1.13-3.el5). Bien évidemment, là aussi il faut la version -devel-.

Installation des RPM de Readline

Cette bibliothèque Readline permet de gérer l'interaction de l'utilisateur en ligne de commande (comme la CLI de Bash, ou dans Emacs ... la CLI de GDL est beaucoup plus puissante que celle d'IDL)

La version packagée dans CentOS est OK (rpm -qa | grep readline-devel donne : readline-devel-5.1-3.el5). Bien évidemment, là aussi il faut la version -devel-.

Installation des RPM de FFTw

La bibliothèque logicielle FFTw permet de calculer des transformations de Fourier. Des tests faits dans le passé, elle est environ 2 fois plus rapide que la version FFT dans la GSL, et elle est plus rapide que la FFT disponible dans IDL pour des grands jeux de données.

La version packagée dans CentOS est OK (rpm -qa | grep fftw3 donne : fftw3-devel-3.2.2-3.el5) Bien évidemment, là aussi il faut la version -devel-.

Bibliothèques optionnelles: Udunits, LibProj4, HDF, HDF5, NetCDF ...

On rentre là dans un univers pointu. Si vous ne savez pas ce que c'est, si vous ne pensez pas vous en servir, vous pouvez oublier ces bibliothèques optionnelles, en tout cas pour le moment.

La situation est moins simple pour WxWidgets, utilisée pour les Widgets sous GDL (qui tournent correctement d'après certains de mes essais sous Ubuntu). Je n'ai pas de pratique sous CentOS.

Téléchargement de la version CVS de GDL

GDL peut être téléchargé à partir du dépôt cvs; c'est d'ailleurs la meilleure solution afin d'avoir toujours une version à jour. Il peut certes y avoir des régressions ponctuelles, mais (1)des tests de régression sont faits très régulièrement et (2) elles sont généralement très rapidement corrigées et il suffit de naviguer via l'interface graphique du CVS pour voir les lieux d'activité (et donc de danger)

$ cd $HOME/GDL
$ cvs -d:pserver:anonymous@gnudatalanguage.cvs.sourceforge.net:/cvsroot/gnudatalanguage co -P gdl
$ mv gdl gdl-0.9.2cvs120301conf (voie Configure; on renomme selon la date en cours)
ou
$ mv gdl gdl-0.9.2cvs120301CMake (voie CMake; on renomme selon la date en cours)

Une autre solution est de récupérer le GNU TAR sur la racine du CVS.

Compilation selon la voie configure de la version CVS de GDL

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/GDL/ImageMagick-6.5.9-0/Compilation/lib/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/GDL/plplot-5.9.3/Compilation/lib/

$ cd $HOME/GDL
$ cd gdl-0.9.2cvs120301conf (à adapter à votre cas)
$ mkdir m4 (des fichiers macor M4 vont être copiés ici ...)
$ autoreconf -vfi (remet au propre les fichiers Makefile & autres)
$ ./configure --with-wxWidgets=no --with-hdf=no --with-hdf5=no --with-pslib=no \
--with-plplotdir=$HOME/GDL/plplot-5.9.3/Compilation/ \
--with-Magick=$HOME/GDL/ImageMagick-6.5.9-0/Compilation/
$ make [-j N] (si vous avez un ordinateur multi-coeurs, ca vaut vraiment le coup de compiler avec N~~2*nb-cores)
$ make check

Lors de make check il est normal qu'une petite fraction des tests échouent (FAIL): on a un problème de test de la mémoire sous Linux 64b (bug connu), on a un bug très spécifique connu dans CONGRID ... De même, en fonction du nombre effectif de dépendances activées ou pas (HDF, Python, Udunits, ...) un nombre variable de SKIP se produira. Par contre, si le nombre de FAIL est grand (majoritaire ou dominant), il faut relancer les tests à la main pour chercher une cause externe (exemple: si on compile avec la paquet officiel de ImageMagick, tous les tests sont faux pour des histoires d'erreur interne à Image Magick).

Compilation selon la voie CMake de la version CVS de GDL

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/GDL/ImageMagick-6.5.9-0/Compilation/lib/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/GDL/plplot-5.9.3/Compilation/lib/

$ cd $HOME/GDL
$ cd gdl-0.9.2cvs120301CMake (à adapter à votre cas)
$ mkdir build
$ cd build
$ cmake .. -DWXWIDGETS=OFF -DHFH=OFF -DHDF5=OFF -DPSLIB=OFF -DPYTHON=off \
-DPLPLOTDIR=$HOME/GDL/plplot-5.9.3/Compilation/ \
-DMAGICKDIR=$HOME/GDL/ImageMagick-6.5.9-0/Compilation/
$ make [-j N] (si vous avez un ordinateur multi-coeurs, ca vaut vraiment le coup de compiler avec N~~2*nb-cores)
$ make check

Voir la note dans le paragraphe précédent (voie configure) pour le diagnostic des tests.

Vérification de la précédence des librairies locales (ldd)

Je vous recommande, peut-être même avant de lancer les tests (make check) de vérifier que l'exécutable de GDL pointe bien vers les bonnes versions (locales, et non système) des librairies PLplot et ImageMagick. Pour vérifier, on fera (par exemple):

Bien évidemment, ici vous aurez des chemins locaux !

$ ldd src/gdl | grep plplot
qui doit donner:
libplplotd.so.9 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libplplotd.so.9 (0x00002b104a6ad000)
libplplotcxxd.so.9 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libplplotcxxd.so.9 (0x00002b104a93a000)
libcsirocsa.so.0 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libcsirocsa.so.0 (0x00002b104bd42000)
libcsironn.so.0 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libcsironn.so.0 (0x00002b104bf4b000)
libnistcd.so.0 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libnistcd.so.0 (0x00002b104c155000)
libqsastime.so.0 => /home/coulais/GDL/plplot-5.9.3/Compilation/lib/libqsastime.so.0 (0x00002b104c35d000)
et non pas:
libplplotd.so.9 => /usr/lib64/libplplotd.so.9 (0x00000031b7000000)
libplplotcxxd.so.9 => /usr/lib64/libplplotcxxd.so.9 (0x00000031b9c00000)

Attention, si vous comptez réutiliser GDL plus tard (nouvelle session), il faudra charger les LD_LIBRARY_PATH préalablement. Un moyen classique est d'ajouter cela dans son fichier ".bashrc". Sinon, si les paquets PLplot ou ImageMagick ne sont pas installés vous auriez des plantages, si les paquets officiels CentOS sont là, vous pourriez souffrir de divers effets de bord en fonction des commandes que vous demanderiez à GDL ...

Installation de bibliothèques secondaires utiles

Installation de Cmsvlib

Cmsvlib fournit une collection de fichiers .pro à ajouter au PATH de gdl. Cette bibliothèque permet de gérer la persistance des variables crées dans gdl.

$ cd $HOME/GDL $ mkdir cmsvlib
$ cd cmsvlib
$ wget http://cow.physics.wisc.edu/~craigm/idl/down/cmsvlib.tar.gz
$ tar -xvzf cmsvlib.tar.gz
$ cd ..

Installation de Astron (AKA AstroLib)

Astron est une bibliothèque développée par la NASA et fournit diverses procédures de bas niveaux. Je recommande de travailler avec des versions un peu plus anciennes, on a moins de soucis avec certaines

$ cd $HOME/GDL
$ mkdir astron
$ cd astron
$ (avide de nouveautés, moins stable) wget http://idlastro.gsfc.nasa.gov/ftp/astron.tar.gz)
$ (prudent, très stable) wget http://idlastro.gsfc.nasa.gov/ftp/old/astron_v56.tar.gz
$ tar -xvzf astron.tar.gz (ou : tar -zxf astron_v56.tar.gz)
$ cd ..

Installation de TexToIdl

TexToIdl permet d'utiliser la syntaxe Tex pour rendre les labels dans plots

$ wget http://physics.mnstate.edu/mcraig/textoidl/textoidl-2-1-2.tar
$ tar -xvf textoidl-2-1-2.tar

(2011-08-11 : since the old known link is broken, and in agreement with its licence, I temporary put here a copy of an very old version: (TexToIDL 2.1.2).)

Installation d'autres bibliothèques en syntaxe IDL/GDL

Bien évidemment, ceci est généralisable à toute bibliothèque en syntaxe IDL/GDL. Parfois, il faut faire attention à l'ordre pour éviter des confits internes (certaines bibliothèque contiennent des copies locales, adaptées ou non, de bout de codes issus de Astron, par exemple).

On citera des bibliothèques largement utilisées et testées sous GDL: HEALPix, MPfit, PDS/Virtis, iCosmo ...

Prise en compte des bibliothèques secondaires

dans la racine du code GDL doit se trouver un script quick_start_GDL.sh qui permet de démarrer GDL en pointant vers la suite de tests ainsi que le répertoire src/pro/. il est possible de garder le contenu de GDL_PATH au démarrage via l'option "-g" (cf sh ./quick_start_GDL.sh -h). Il suffit donc de pointer préalablement vers la racine des bibliothèques installées.

$ export GDL_PATH=$GDL_PATH:+$HOME/GDL/textoidl-2-1-2/
$ export GDL_PATH=$GDL_PATH:+$HOME/GDL/astron/
$ export GDL_PATH=$GDL_PATH:+$HOME/GDL/cmsvlib/

$ cd $HOME/GDL
$ cd gdl-0.9.2cvs120301CMake (à adapter à votre cas)
$ sh ./quick_start_GDL.sh -g

Bien évidemment, en cas d'usage régulier de GDL, il peut être judicieux d'ajouter ces export dans le fichier ".bashrc" (ou bien de modifier le fichier "quick_start_GDL.sh").