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.
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