Alain Coulais
3 Mars 2015
Autres documents d'aide à la compilation de GDL: sous OSX (OSX 10.5.6, OSX 10.6.3) sous CentOS (5.4/5.5 ou 5.7)
En dépit de mes relectures et de mes tests, il peut rester des erreurs, des typos, des inversions de commandes : gardez un certain recul ! Les URL peuvent changer ... Ne pas hésiter à signaler les problèmes.
Un petit script de compilation globale existe, il a été testé avec succès sous OSX 10.10.2, OSX 10.9.5, Ubuntu 12.04.5 LTS et 10, CentOS 5.6 et 5.11, trois Debian 7 (wheezy) différents (32 et 64 b), SUSE Linux Enterprise Server 10 (x86_64) ... Les explications sont ici, en Anglais. Il suffit de changer la racine, 1ere ligne du fichier. Compter de 15 à 40 minutes selon la machine.
Ce document reproduit les étapes suffisantes pour compiler GDL-0.9.5 ou GDL-0.9.5 CVS sur un système Mac OSX 10.9.5 ou 10.10.2 en ajoutant Readline 6.3, GSL 1.16, PLplot 5.9.9 (et cmake 2.8.12 nécessaire pour compiler plplot et GDL). Il s'agit d'une installation a minima, et surtout sans avoir besoin d'etre super-utlisateur sur la machine. Si Xcode est la, tout peut etre fait sur son propre compte, sans ecrire sur /usr/local ou /opt/local.
La seule différence significative avec les explications pour la compilation sous OSX 10.10 ou OSX 10.9.5 vient de l'usage de HomeBrew (facultatif !) sous OSX 10.9.5. Il est tout a fait possible de ne pas utiliser HomeBrew !
Les différentes étapes ont été realisées en tant que simple utilisateur.
Avant de commencer, assurez vous d'avoir X11 et Xcode installés ainsi que le X11 forwarding activé. Si ce n'est pas le cas, les étapes sont expliquées sur la page de compilation sous Mac OSX 10.5.6 ici
En mode console, la commande magique sous OSX pour connaitre la version du système est sw_vers
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.5
BuildVersion: 13F34
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.2
BuildVersion: 14C109
L'utilisateur a pour login alain et son HOME se trouve la:
/Users/alain/. Un sous-repertoire GDL/ existe, sinon le creer.
$ designe le prompt pour l'utilisateur alain
# designe le prompt pour alain en mode sudo
Je ne parle pas des checksums md5, c'est mieux de faire ces verifications !
Ici malheureusement il faudra voir avec le chef de la machine, autant bien préparer l'intervention pour ne pas revenir tous les 5 minutes ... Si le "chef" fait déjà du développement sur cette machine, il est problable qu'il aura déjà fait du ménage ...
Si votre systeme résulte d'une mise à jour depuis 10.6 et que vous aviez le vieux XCode avant, il faudra élager les vieux SDK et Xcode ! Idem avec de vielles entrées MacPort. Ne pas faire cela est la certitude de perdre beaucoup de temps ! Je me suis contenté de supprimer tous les codes MacPort, et les vieux SDK Xcode.
Je ne peux pas estimer pour vous si cela pourrait interférer avec d'autres logiciels ou développements que vous faites par ailleur. Il y a moultes pages pour faire coexister des SDK et pointer vers les bons répertoires, mais il y a parfois des effets de bord inatendus, et de toute façon c'est bien de faire le ménage !
1/ suppression des vieux SDK Xcode
$ sudo bash
# \rm -R /Developer/SDKs/
Autre solution : renommer !
# mv /Developer/SDKs/ /Developer/SDKs150303/
2/ suppression des vieux codes obtenus via MacPort
$ sudo bash
# \rm -R /opt/local
Autre solution : renommer !
# mv /opt/local /opt/local150303
Cette étape est facultative mais c'est plus confortable avec !!
GDL "nécessite" au moins la version 5.2 pour tout avoir (complétion,
historique, ...).
Pour la version utlisée ici, il n'y a aucune modification
particulière à effectuer. Il suffit de décompresser
l'archive puis d'effectuer make et make install
$ cd /Users/alain/GDL/
$ curl ftp://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz -O
$ tar -zxf readline-6.3.tar.gz
$ cd readline-6.3
$ mkdir Compilation
$ ./configure --prefix=/Users/alain/GDL/readline-6.3/Compilation/
$ make
$ make install
$ cd ..
Realine est un des grands avantages de GDL, vous pourrez naviguer dans la ligne de commande (CLI) comme dans un shell bash (avec completion !) ou dans Emacs ...
La seule vraie ruse ici est de bien ajouter la librairie dynamique comme il faut (via la variable DYLD_LIBRARY_PATH). Cela etait indispensable avec les vieux OSX, cela semble ne plus l'etre avec 10.9 et 10.10.
Je recommande de faire les tests (make check).
$ cd /Users/alain/GDL/
$ curl ftp://ftp.gnu.org/gnu/gsl/gsl-1.16.tar.gz -O
$ tar -zxf gsl-1.16.tar.gz
$ cd gsl-1.16
$ mkdir Compilation
$ ./configure --prefix=/Users/alain/GDL/gsl-1.16/Compilation/
$ make
$ make install
$ make check
(may be not useful now)
$ export DYLD_LIBRARY_PATH=/Users/alain/GDL/gsl-1.16/Compilation/lib
Les dernières versions de plplot nécessitent Cmake ...
$ sudo bash
# ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# brew install cmake
en profiter pour installer CVS et Wget, ca peut toujours servir !
# brew install wget
# brew install cvs
# exit
$ cmake --version (devrait etre dans le PATH et donner 3.1)
Je ne suis pas tres familier avec MacPort, Fink ou HomeBrew, mais au moins, la, ca a marche du 1er coup !
Pour des raisons encore mysterieuses (mais sans doute liees a des fichiers restants des anciennes installations), cmake 3.1 compile a la main ne va pas pour plplot, mais la version 2.8.12 est OK (sous OSX !)
$ cd /Users/alain/GDL/
$ curl http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gz -O
$ tar -zxf cmake-2.8.12.tar.gz
$ cd cmake-2.8.12
$ ./bootstrap
$ make
En resumé, après avoir telechargé et decompressé l'archive Cmake, et etre allé dans le répertoire ou Cmake a été extrait il y a 2 étapes: bootstrap et make. Comme on va vivre en local, on n'a pas besoin de faire un make install.
les résultats (cmake et ccmake) sont posés dans ./bin
C'est sans doute l'etape la plus delicate. Et comme elle est indispensable ... On ne prend pas les toutes dernieres versions de plplot (serie 5.10), on n'est pas au clair sur la compilation ... 5.9.9 est un excellent compromis.
Récuperation et compilation de Pplot (nécessite Cmake ...)
$ cd /Users/alain/GDL/
(l'option -L pour Curl est importante pour suivre le lien)
$ curl -L http://sourceforge.net/projects/plplot/files/plplot/5.9.9%20Source/plplot-5.9.9.tar.gz -O
$ tar -zxf plplot-5.9.9.tar.gz
$ cd plplot-5.9.9/
$ mkdir Compilation
$ cd Compilation
$ /Users/alain/GDL/cmake-2.8.12/bin/cmake -DCMAKE_INSTALL_PREFIX=. -DCMAKE_VERBOSE_MAKEFILE=ON -DENABLE_python=OFF -DPLD_wxwidgets=OFF ..
$ make
$ make install
Des problèmes de compilations ont été rencontré avec Python et wxwidgets, d'où leurs désactivation...
L'option -DCMAKE_INSTALL_PREFIX=. est importante car elle permet d'installer en local tous les fichiers qui seront ensuite utiles, sous include/, lib/, ...
Pendant longtemps, deux solutions etaient possibles pour compiler GDL: la voie historique et classique, basée sur les autotools (autoreconf, m4, configure, ...), qui est désormais obsolète et qui n'est plus maintenue, et la voie alternative basée sur CMake. Comme CMake est aussi utilisé par PLplot, ca tombe bien !
Devant faire des tests de régression assez régulierement, je fais cohabiter plusieurs versions du CVS (copie a un instant donne du CVS) et je trouve cela plus simple de nommer les racines avec le jour: mkdir gdl-0.9.5cvs150304 veut dire 4 Mars 2015.
En fait, sur les versions récentes de OSX, c'est le compilateur Clang qui remplace par défaut GCC. Il se trouve qu'aujourd'hui Clang est notablemment plus lent sur certaines opérations de compilation de GDL (c'est normal que ca soit hyper lent a 22% sur GDLTreeParser.cpp en make seul (pas de -j 2)).
$ curl http://gnudatalanguage.cvs.sourceforge.net/viewvc/gnudatalanguage/?view=tar -o gdl-0.9.5cvs150304.tgz
$ tar -zxf gdl-0.9.5cvs150304.tgz
$ mv gnudatalanguage/gdl/* .
$ mkdir build
$ cd build
$ /Users/alain/GDL/cmake-2.8.11/bin/cmake .. -DREADLINE=no \
-DGSLDIR=/Users/alain/GDL/gsl-1.16/Compilation/ \
-DPLPLOTDIR=/Users/alain/GDL/plplot-5.9.9/Compilation/
-DWXWIDGETS=off -DMAGICK=OFF -DNETCDF=OFF -DHDF=OFF \
-DHDF5=off -DFFTW=OFF -DEIGEN3=OFF -DPSLIB=OFF
$ make (si machine vieille ou chargée, 1 ou 2 coeurs ...)
$ make -j 4 (si machine récente, 4 coeurs ...)
$ make check
Evidemment, si vous avez installé CMake via HomeBrew, il ne faut pas préfixer "cmake" par le chemin, celui "officiel" doit être dans le PATH.
Un executable gdl devrait être disponible dans le sous-répertoire src/.
Si on ne change pas de repertoire, il suffit de lancer via:
$ ./src/gdl
ou
$ cd .. (cd /Users/alain/GDL/gdl-0.9.5cvs150304)
$ sh ./quick_start_GDL.sh
Attention, en lançant à partir de ./src/gdl, on a accès seulement aux procédures et fonctions intrinsèques à GDL, on ne charge pas les programmes disponibles sous src/pro/.
Pour avoir accès aux programmes des répertoires src/pro/ et testsuite (suite de test), il faut lancer le script quick_start_GDL.sh depuis la racine de GDL.
Grace à OpenMP et la librairie Eigen3, GDL a des benchmarks équivalents sur time_test3.pro, et de bien meilleurs benchmarks sur des nombreuses operations vectoriel et matriciel pour des vecteurs et matrices de taille suffisante.
$ cd /Users/alain/GDL/
$ curl -L http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz -o eigen3.2.4.tar.gz
$ tar -zxf eigen3.2.4.tar.gz
(l'extraction se fait dans un repertoire au nom etrange, on change !)
$ mv eigen-eigen* eigen3.2.4
$ cmake [...] -DEIGEN3DIR=/Users/alain/GDL/eigen3.2.4/
Si vous avez réussi à compiler GDL via ce document, vous pouvez m'envoyer un petit mot, ca fait toujours plaisir ! N'hésitez pas à signaler les points qui resteraient obscurs, les erreurs, des problèmes, des solutions !
Si vous utilisez GDL, vous pouvez:
citer dans vos papiers un des papiers ADASS sur GDL !
faire des retours de bugs, des suggestions, via le site SourceForge.
considérer de prendre un stagiaire pour contribuer à GDL,
c'est extrèmement formateur !
Je remercie :
Léa N. qui rédigea la trame de la premiere version
de ce document lors de son stage
Michel C. qui me laisse un accès distant sur son Mac sous OSX 10.10
Eiko qui me laisse un accès distant sur son Mac sous OSX 10.9 et pouvoir faire sudo