Voici presque deux semaines que je travaille avec Pascal pour splitter les
sources de oofelie et metafor puisqu'aucun arrangement n'a pu être obtenu
entre la filiale de Samtech OpenEngineering et le service LTAS-MCT.
Le plus gros du boulot était la ré-écriture des Makefiles
puisque nous avions déjà fait attention de ne pas mélanger
toutes les routines. J'ai créé deux répertoires et donc
deux repository CVS : oofelie et oo_meta.
Il existe donc deux comptes distincts sur notre bonne
vieille machine spirou :
le compte oofelie
: situé sur /d50/users/oofelie. Sa structure est identique
à "l'avant split" (soit un répertoire Repository contenant
le repository, un répertoire Snapshot contenant un snapshot compilé
et prêt à l'exécution et un répertoire Bak contenant
les archives successives des repository), le password n'a pas changé
et les comptes externes ont été déverrouillés.
Tous les utilisateurs faisant partie du groupe "oogrp"
ont un accès en lecture à ce compte (ils peuvent donc exécuter
un cvs -d ~oofelie/Repository ). Ce repository devrait être
la base d'oofelie dans OpenEngineering et, donc, migrer à terme dans
la société.
le compte oo_meta
: situé sur /d50/users/oo_meta. Sa structure est identique
au compte oofelie. Le password est identique à celui du répository
Metafor fortran/c. A l'heure actuelle, seuls ceux qui ont pris un risque de
carrière pour oofelie y ont accès (utilisons des termes que
tout le monde comprend) en lecture sans entrer sur le compte (groupe "oometa").
oofelie : regroupe les fichiers créés
par Igor, le service Géradin et l'Intec. Avec Pascal, on en a profité
pour remettre un peu d'ordre dans les sources :
les fichiers ont été regroupés dans une autre arborescence.
Par exemple, le répertoire basic_cl est passé à
la trappe. De plus, les fichiers i_ ont été dispatchés
dans les répertoires ad-hoc (chaque répertoire possède
un sous répertoire "i_" pour autant qu'il possède
des classes utilisables sous l'interpréteur). Par example, on a "oo_math"
et "oo_math/i_".
certains fichiers ont été renommés et on a dit définitivement
adieu à la norme 8.3 du DOS. Par exemple: "elemtyp.h"
-> "element_type.h" ou, encore mieux, "mngobfl.h"
-> "objects_on_file.h", etc.
certains fichiers ont été placés dans un répertoire
judicieusement appelé "garbage" (comme "main.h",
"windefi.h", "buffer.h", ...). D'autres
ont été déplacés d'un répertoire vers un
autre.
les classes Vect2, Matsym2, Matsym3 ont
été ajoutées à oo_math bien qu'elles
aient été développées au LTAS-MCT et ce, parce
que ces classes sont nécessaires au kernel oofelie.
le source a été complètement indenté via emacs
(avec 4 espaces comme Visual).
le source a été nettoyé en utilisant une norme peu
stricte mais essentielle (voir mes consignes).
En bref, on a essayé de virer la plupart des warnings "level3"
sous Visual, l'inclusion des fichiers d'entête a été réduite
au minimum, si bien que la compilation d'oofelie est beaucoup plus rapide
qu'avant, etc.
le fichier d'entête "ooglobal.h" a été
inclus dans tous les fichiers. cela permet notamment d'utiliser le fichier
"config.h" d'autoconf (pour le peu de gens qui
connaissent).
oo_meta : regroupe les fichiers créés
par Ludo, Laurent et moi-même pour Metafor sous Oofelie ainsi que les
quelques améliorations du kernel apportées pendant cette dernière
année. Le source a été remis en forme un peu comme pour
oofelie :
certains fichiers ont été envoyés dans un répertoire
garbage. C'est le cas de l'élément grandes défos
non optimisé, par exemple.
des répertoires ont été créés pour classer
les différents fichiers selon leur nature : oo_materials
pour les matériaux, oo_elements pour les éléments,
oo_kernel pour les ajouts au kernel, ...
la géométrie et la visualisation VTK on été
incluses dans les répertoires oo_geo et oo_viz
respectivement.
les warnings "level3" de Visual ont été, pour la
plupart, supprimés. Il vous est donc conseillé de compiler en
utilisant les warnings (j'ai trouvé plusieurs bugs rien qu'en y jetant
un oeil).
un fichier d'entête "meta_global.h" a été
inclus dans tous les fichiers "*.h". On peut ainsi configurer
très facilement tous les fichiers d'un seul coup (en modifiant uniquement
un seul fichier). Par exemple, certains warnings ridicules de Visual ont été
supprimés via ce fichier.
Les fichiers d'entête superflus ont été supprimés
(cfr. les consignes). C'était un
boulot de dingue mais, grâce à ça, la compilation totale
est bien plus rapide et efficace (on ne recompile plus tous les éléments
pour un oui ou pour un non).
pour les Makefiles, c'est assez débile mais bon, il y a moyen de se
gourer alors j'explique:
Je veux compiler oofelie seul :
cvs -d ~oofelie/Repository co oofelie
un petit check-out de oofelie
cd oofelie
je vais dans oofelie
./build
je lance le script de RoBo (remplace build_osf)
gmake [debug]
compile et linke oofelie
./oofelie
youpi, ça marche
Je veux compiler oofelie avec oo_meta
:
cvs -d ~oofelie/Repository co oofelie
un petit check-out de oofelie
cvs -d ~oo_meta/Repository co oo_meta
un petit check-out de oo_meta
cd oo_meta
je vais dans oo_meta
./build
je lance le script de RoBo (remplace build_osf)
gmake [debug]
compile et linke oofelie avec metafor
./oofelie
youpi, ça marche (l'exécutable s'appelle oofelie
aussi)
Quelques commandes supplémentaires ont été introduites
rien que pour rire (dans oo_meta) :
gmake ooclean
fait un gmake clean dans le répertoire oofelie
gmake oocleanmore
fait un gmake cleanmore dans le répertoire oofelie
gmake oodistclean
fait un gmake distclean dans le répertoire
oofelie
Comme vous le voyez, les deux répertoires doivent être extraits
l'un à côté de l'autre. Cette restriction n'apparaît
que dans le fichier "configure.in" et pourrait être facilement
paramétrée du genre "configure --oofelie-dir=/d50/users/boman/oofelie"
mais c'est pas fait (avis au amateur).
Le fichier "build" remplace "build_osf",
"build_linux", "build_cygwin", ...
C'est maintenant un script bash qui fait un guess de la machine et un
superbe switch (build contient tous les anciens fichiers).
Comment compiler Oofelie/Metafor sous Visual C++ 6 ?
Facile, soit vous utilisez mes projets (en me les demandant), soit vous vous
amusez bien en essayant de tout faire vous même, soit vous lisez mes directives
(vc6_proj.txt) pour créer le workspace.
Pour oofelie seul, c'est assez simple. C'est un peu comme il y a un an lorsque
le source était deux fois plus petit.
Pour Metafor, il vaut mieux faire 3 projets dans 1 workspace :
Une lib statique pour oofelie compilée avec les options
"_WITH_METAFOR_" et "_WITH_VTK_"
Une lib statique pour oo_meta/oo_viz en utilisant des fichiers
d'entête précompilés (ça va 10x plus vite).
Une application console pour le reste du module oo_meta en n'oubliant
pas de marquer les dépendances par rapport aux deux libs précédentes.