Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2017:09_07

Commit 2017-09-07

Maintien portabilité mac0S/MinGW

Le code ne compilait plus sous macOS et sous Windows-x86 (MinGW). Ces deux types de compilation ne sont pas testées dans la procédure de batterie et il faut donc régulièrement corriger les sources d'incompatibilité. Pourtant ces versions sont nécessaires à la génération des versions “étudiant” qui devront être fournies très bientôt.

Sous macOS, le problème venait des nouveaux templates de Gaetan permettant d'effectuer une intégration (AdaptiveClenshawCurtisIntegratorTemplate et classes associées). Il y avait plusieurs problèmes dans ces fichiers liés à l'instanciation explicite de certaines classes. J'ai dû définir certaines fonctions “inline” pour que clang les retrouve.

Ceci m'amène à conclure qu'il faut vraiment essayer de limiter l'utilisation des templates au minimum dans Metafor. C'est une vraie source de problèmes. Le problème des templates Metafor est qu'il s'agit souvent de templates un peu pourris dont une grande partie des fonctions doit être spécialisée pour un argument donné (par exemple la dimension dans les éléments). Autrement dit, le template n'est valable que pour un nombre très restreint de paramètres (2D, 3D uniquement p expl) et en ajouter un nouveau nécessiterait la réimplémentation de plusieurs fonctions. Si on ajoute à ça les difficulés liées à l'exportation des templates dans des DLLs quand on est sous Windows, les fonctions “friend” et la manière particulière utilisée par chaque compilateur pour instancier des templates, le maintien de la portabilité devient extrêmement difficile.

Ne faites donc pas de nouveaux templates pour le plaisir d'en faire; c'est un vrai casse-tête de rendre portable ce type de code.

Avec MinGW, le problème venait des nouvelles classes de InexactLinesearch de Gaetan. Il y a beaucoup de trucs un peu louches dans ces classes: const double & au lieu de double, fonctions virtuelles dans des classes sans dérivation (ou l'inverse), double dérivations étonnantes, etc. Ce qui posait problème était la spécification “dllimport/dllexport” de fonctions inline (ça n'a pas de sens). J'ai supprimé ces mots clefs et ça recompile correctement. J'en ai profité pour remettre en forme ces fichiers (même l'indentation était pourrie).

J'ai adapté les CMakeLists.txt pour éviter les “deprecation warnings” pour CMake 3.8.0.

J'ai vérifié la compilation sur fabulous, qui n'est pas testée elle non plus. C'est OK.

Enfin, le test mtExactDataTransfer_CGAL.tests.disk3D_LocMort qui est complètement instable plante sous thorgal et gaston. Je l'ai commité “failed”.

boman 2017/09/06 13:57

commit/2017/09_07.txt · Last modified: 2017/09/07 09:14 by boman