Point O : GAOL en sous-projet meson, Release par défaut, textes de C++17 et du Python du Store - #95
Merged
Merged
Conversation
…he flags of gaol.pc in gaol_dep
… flags of their code, in the CI
… of meson before 1.8.4
…Apps not checked, USERPROFILE
…of elementary_values.h alone
…4 gives the project's debug
…in Release, NDEBUG included
… project, checked in the CI
…ject takes as its subproject
…iterals of their own
…ias, nothing checked on Windows
…ipe in the sh of the containers
… of several, GAOL built alone
…atever the build type
…lti-Config checked in the CI
…n, and gives no target perf
…sts, and gives no target perf
…he flags of the configuration
… perf; the macro GAOL_DEBUG
…OSE, apart from the CMake option
….pc too (-mno-daz-ftz)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Point O de
TODO.md: meson et les fichiers de build (anciens 41, 42, 52 et 65). S'y ajoutent des décisions du 6 octobre, prises pendant le travail :-lmsont corrigées ici ;pipefaildans les workflows, une option de debug (enable-debug,GAOL_DEBUG) et Release en tête des configurations (dernière section).41. GAOL en sous-projet meson
Problème. Un projet meson qui prend GAOL en sous-projet (
subprojects/gaol, puisdependency('gaol', fallback: ['gaol', 'gaol_dep'])ousubproject('gaol')) s'arrête dèsmeson setup, avec meson 0.53.2 comme avec 1.11.2 :Le commentaire de
gaol_dep(gaol/meson.build) promet pourtant cet usage.Cause.
meson.builddonne tous ses drapeaux paradd_global_arguments(), que meson refuse dans un sous-projet : ceux de l'arithmétique d'intervalles,/fp:strict,-msse2 -mfpmath=sse,-mfma, la visibilité,-Wconversionet les optimisations derelease.Correction, comme décidé le 3 octobre :
meson.build:add_project_arguments()à la place des 17add_global_arguments(), avec un commentaire qui dit pourquoi ;gaol/meson.build:gaol_depportecompile_args: pc_cflags, c'est-à-dire les drapeaux quegaol.pcdonne au code qui utilise GAOL :-frounding-math -ffp-contract=off -fno-fast-math, et selon la machine-msse2 -msse3,-mfma,-msse2 -mfpmath=sse,-ffloat-storeou/fp:strict. Les arguments du projet GAOL n'atteignent pas les cibles du projet parent.gaol_depavait déjàlink_args: gaol_link_args(-mno-daz-ftz) ;meson.build, trouvé par la relecture : un GAOL sous-projet ne déclare plus ses configurations de test (add_test_setup('unit', ..., is_default: true),check) ni sa ciblecheck. Sinon, avec meson 0.57 et suivants, un parent qui a sa propre configuration par défaut s'arrête (« 'parent:mine' is already set as default. is_default can be set to true only once »). Un parent sans configuration propre perd, lui, ses propres tests de la suiteexamples(meson test --listne les montre plus).Le build meson de GAOL lui-même ne change pas. J'ai comparé
compile_commands.jsonavant et après, aux mêmes chemins, avec meson 0.53.2 et 1.11.2 (96 commandes,with-testsetwith-examples). La bibliothèque, CORE-MATH et les tests ont les mêmes commandes. Seuls les 16 exemples, qui passent pargaol_dep, reçoivent en double les drapeaux de l'arithmétique d'intervalles (-frounding-math -ffp-contract=off -fno-fast-math -msse2 -msse3 -mfma), sans effet. L'audit des trois builds (.github/audit) ne regarde quegaol_interval.cpp.Test.
tests/meson_subprojectest un projet meson qui prend GAOL en sous-projet, commetests/fetch_contentle fait avec FetchContent :gaol_deples mêmes six tests (arithmetic,elementary,rounding_direction,numbers,other_functions,reverse) ;flags(check_flags.py) vérifie que chaque commande qui compile une source du projet, hors desubprojects/, contient lesCflagsdugaol.pcque le sous-projet écrit dansmeson-private/(sans le-I) ;releaseest décrit plus bas.Les six tests ne suffisent pas : sans
compile_argsdansgaol_dep, ils passent tous (GCC 9.4, x86_64). D'où le contrôle direct des commandes.Le sous-projet est un lien
subprojects/gaolvers les sources :meson-subprojectdebuild-systems.yml(Ubuntu 24.04 x86_64) le crée, puis lanceninja testet le contrôle de la locale à virgule. Il tourne avec deux meson : celui de pipx, et le 1.3.2 d'Ubuntu par apt. La variante apt vérifie que son meson est antérieur à 1.8.4, sans quoi son testreleasene prouverait rien.set -o pipefail. La relecture a montré que, sans cela, unmeson setupqui échoue ne faisait échouer que l'étape suivante..gitignore) et par l'archive de CPack (CPACK_SOURCE_IGNORE_FILES, qui recopie à la main les motifs de.gitignore). Sans cette dernière ligne, unpackage_sourcefait avec le lien dans l'arbre range le lien lui-même dansgaol-5.0.0.tar.gz, vers le chemin absolu de l'arbre de celui qui fait l'archive (vérifié)..github/scripts/version-file.sh(tar -h) l'exclut aussi : elle suivait le lien sans fin (vérifié : au bout de 10 s, elle tournait encore). L'en-tête detests/meson_subproject/meson.builddit de retirer le lien après usage.Vérifié : avec les sources de
configure-clean, ce test échoue.meson.builddeconfigure-cleanettests/meson_subprojectajouté,meson setups'arrête sur l'erreuradd_global_argumentsci-dessus (meson 0.53.2).compile_args: pc_cflagsdegaol_dep: les six tests passent, etflagséchoue :meson.is_subproject()des configurations de test :meson setups'arrête avec meson 1.7.2 et 1.11.2 (« 'gaol_tests_meson_subproject:meson_subproject' is already set as default »).Commande :
mkdir tests/meson_subproject/subprojects && ln -s "$PWD" tests/meson_subproject/subprojects/gaol && meson setup b tests/meson_subproject && ninja -C b test.Documentation.
doc/using.md(fin de « From pkg-config ») et le manuel (même endroit,\newinvfive) : la recettedependency('gaol', fallback: ['gaol', 'gaol_dep']), vérifiée avec meson 0.53.2 et 1.11.2, et ce que portegaol_dep. La relecture a vérifié que, si ungaol.pcest surPKG_CONFIG_PATH,dependency()prend celui-là.doc/tests.md,doc/continuous-integration.mdetREADME.md:tests/meson_subprojectet son job.GAOL en Release par défaut, en projet de tête ou en sous-projet
Décidé le 6 octobre : « Par défaut GAOL doit compiler en mode Release, avec les 3 builds (meson, CMake et Autotools) en projet ou sous-projets. » J'ai mesuré chaque build quand le projet parent ne choisit pas de type de build.
meson. Le
buildtype=releasedesdefault_optionsde GAOL ne vaut pas pour un sous-projet avant meson 1.8.4. Flags degaol_interval.cpp, parent laissé audebugpar défaut :-g, sans-O3niNDEBUG, etGAOL_DEBUGGINGdéfini-std=c++11, mais toujours-O0 -getGAOL_DEBUGGINGNDEBUGet pas deGAOL_DEBUGGING(get_option('buildtype')y vautrelease), mais-O0 -greleasede GAOL :-O3,NDEBUG, les optimisations deconfigure, pas deGAOL_DEBUGGINGAvant 1.8.4, un sous-projet ne distingue pas le
debugpar défaut d'un--buildtype=debugdemandé (vérifié :optimization,debugetbuildtypey valent la même chose). À partir de 1.8.4, meson donne au sous-projet son propre type de build par défaut, et un--buildtype=debugdemandé lui parvient (vérifié avec 1.8.4 et 1.11.2).Correction (
meson.build,gaol/meson.build) : dans un sous-projet, avec meson avant 1.8.4, on lit le type de build du projet dans les optionsoptimizationetdebug, car de 1.8.0 à 1.8.3,get_option('buildtype')y lit lereleasede GAOL. Quand ces options sont celles dudebug(optimization0 etdebugvrai) :override_options: ['optimization=3', 'debug=false', 'b_ndebug=true'];GAOL_DEBUGGINGn'est pas défini, et les optimisations deconfigure(-funroll-loops…) s'ajoutent.Si le parent demande
release(optimization3,debugfaux), ces bibliothèques reçoiventb_ndebug=true, leif-releasedesdefault_optionsde GAOL. La relecture avait noté qu'avec 0.53.2 et--buildtype=release, GAOL n'avait pasNDEBUG. Les autres types de build demandés (debugoptimized,minsize,plain) sont gardés.J'ai vérifié que
override_optionsdonne bien-DNDEBUG -O3sur une cible, de 0.53.2 à 1.11.2. Les flags degaol_interval.cppaprès correction, mesurés avec 0.53.2, 0.57.2, 0.63.3, 1.3.2, 1.7.2, 1.8.0, 1.8.3, 1.8.4 et 1.11.2 :-DNDEBUG -O3 -funroll-loopspartout ;--buildtype=release: la même chose ;--buildtype=debugoptimized:-O2 -g, le choix du projet (de 1.8.0 à 1.8.3, meson y ajoute lui-même-DNDEBUG).Deux cas gardent le type de build du projet, trouvés par la seconde relecture dans les sources de meson. Je les ai vérifiés à la lecture de ces sources, pas sous Windows :
debugdonne/ZI /Ob0 /Od /RTC1(msvc_buildtype_args), queclrefuserait avec le/O2deoptimization=3(D8016). Forcer aussibuildtype=releasechangerait le runtime C de la cible (/MDcontre le/MDddu projet). GAOL n'y force donc rien ;--backend=vs) prendoptimizationetdebugglobalement pour toutes les cibles (vs2010backend.py).Le prix : avant meson 1.8.4, un
--buildtype=debugdu projet ne compile plus GAOL pour le débogage. L'optionenable-debugdu troisième lot le fait, avec toutes les versions.doc/using.mdle dit, ainsi que les deux cas ci-dessus.CMake. J'y ai trouvé un défaut, avec un générateur à une seule configuration (Makefile, Ninja). Par
add_subdirectoryou FetchContent sansCMAKE_BUILD_TYPE:libgaolne recevait que-O3, sansNDEBUGni les optimisations de Release (-funroll-loops -fomit-frame-pointer -fexpensive-optimizations, qui sont sous$<CONFIG:Release>) ;gaol_core_math, une bibliothèqueOBJECT), n'avait aucune optimisation. Le commentaire deCMakeLists.txtetdoc/building.mddisaient le contraire.Correction : sans type de build,
gaoletgaol_core_mathreçoivent-O3(/O2avec Visual C++),NDEBUGet les optimisations de Release que le compilateur accepte. Leurs commandes sont alors celles du Release (vérifié surgaol_interval.cpp,exp.cetgaol_exact.c). Le build de tête ne change pas : il fixeReleaselui-même. Avec un générateur à plusieurs configurations (Visual Studio, Ninja Multi-Config, Xcode), c'estcmake --build --configqui choisit, Debug sans--config. C'était déjà le cas avant, etdoc/three-builds.mdle dit maintenant.autotools. Rien à changer. Un
configureparent qui appelle celui de GAOL (AC_CONFIG_SUBDIRS([gaol])) donne-O3 -funroll-loops -fomit-frame-pointer -fexpensive-optimizations,-DNDEBUGet pas deGAOL_DEBUGGING, comme GAOL seul (vérifié).Test.
tests/release_flags.py <build> <sources de GAOL>vérifie, danscompile_commands.json, que chaque commande qui compile une source de GAOL ou de CORE-MATH (gaol/,3rd/) a pour dernier-Oun-O3(ou/O2) et définitNDEBUG. Il vérifie aussi que legaol_configuration.hdu build laisseGAOL_DEBUGGINGindéfini. Il sert deux fois :releasedetests/meson_subproject, que le job de CI configure maintenant dans le type de build par défaut. Avec le meson 1.3.2 d'Ubuntu, le test a des dents dans la CI ;linux.yml: configurertests/fetch_contentsans type de build, puis lancer le script.Vérifié : sans la correction, ces contrôles échouent.
gaol_release_optionslaissé vide :release_flags.pyéchoue avec meson 0.53.2, 1.7.2 et 1.8.0. Les 48 commandes de GAOL et de CORE-MATH y sont en-O0ou sans optimisation (et, avant 1.8, sansNDEBUG).CMakeLists.txtd'avant :release_flags.pyéchoue sur les 48 commandes (exp.c: optimization none, no NDEBUG,gaol_interval.cpp: no NDEBUG). Avec la branche : 0 sur 48.Documentation.
doc/using.mdet le manuel : le type de build d'un sous-projet meson ;doc/building.mdet le manuel : la phrase sur CMake sans type de build, et une phrase dans la table des options de meson ;doc/three-builds.md: le Release par défaut, en projet de tête ou amené par un autre ;doc/tests.mdetdoc/continuous-integration.md.42. Le Python du Microsoft Store
Décidé le 3 octobre : adoucir le texte. Que
WindowsAppscontienne un aliaspython.exeen plus depython3.exen'a jamais été vérifié sous Windows (#44 le tenait de la connaissance des alias, pas d'un test).doc/building.md: le paragraphe commence par « On Windows, none of what follows was checked, but read in the sources of meson », dit «python3.exeand perhapspython.exetoo », et « meson 0.53.0 and earlier may take such an alias ». Les deux derniers points viennent de la relecture.meson.build: le commentaire au-dessus deversion:dit la même chose (« 0.53.0 and earlier »).doc/building.md: meson 0.53.1 et suivants n'écartentWindowsAppsque si lePATHle nomme sous le répertoire deUSERPROFILE, pas pour un profil dont le répertoire diffère.J'ai relu le filtre
_windows_sanitize_path()de meson 1.11.2 (programs.py) et de 0.53.2 (dependencies/base.py) : il compare chaque entrée duPATHà%USERPROFILE%\AppData\Local\Microsoft\WindowsApps. La relecture a vérifié qu'il manque à 0.52.1 et 0.53.0, et qu'il est là à partir de 0.53.1.Comme confirmé le 3 octobre, l'ordre
python3,pythonne change pas.52. La raison de C++17 dans les tests
tests/CMakeLists.txt,tests/Makefile.am(et sonMakefile.in) ettests/meson.buildjustifiaient C++17 par les seuls littéraux deelementary_values.h. J'ai compilé chaque programme detests/(-fsyntax-only, GCC 9.4) :-std=c++14 -pedantic-errors, tous échouent sur des littéraux flottants hexadécimaux, saufu128.cpp(où-pedanticne refuse que__int128),performance.cpp,refused_options.cppetnodiscard.cpp;-std=gnu++14, qui accepte ces littéraux comme extension, tous compilent sans erreur ni avertissement : C++17 ne leur sert à rien d'autre.gaol_tests.h, que tous les tests saufu128.cppincluent, en a un (0x1p-1060, l. 333). Hors commentaires et chaînes, 9 des 30 programmes en ont dans leur propre code :arithmetic,constants,core_math,elementary,fast_math_link,ieee1788,numbers,rounding_direction,static_initialization. Les*_values.hen ont des milliers. J'avais d'abord écrit « most of the programs » ; la relecture l'a relevé.Les trois commentaires disent : « for the hexadecimal floating literals of the tests (those of gaol_tests.h, which all but u128.cpp include, of the *_values.h, and of several of the programs) ». Le
Makefile.inest régénéré par automake 1.18.1, et son diff ne contient que ce commentaire.65. Les
open()demeson.buildLes trois programmes Python de
meson.build(lecture deVERSION.txt, ses premiers octets, la détection de l'UTF-16) ouvrent maintenant le fichier avecwith. Leurs lignes sont séparées par l'échappement\ndes chaînes de meson, que 0.53.2 et 1.11.2 traduisent tous deux. Lerunpython -cdumeson.exede 0.53 exécute le programme parexec(), qui accepte plusieurs lignes.Sous CPython, le résultat ne change pas. Sous
python3 -X dev, l'ancien code signaleResourceWarning: unclosed file <_io.TextIOWrapper name='VERSION.txt' ...>pour chacun des trois programmes, et le nouveau ne signale rien..github/scripts/version-file.sh meson(BOM, CRLF, blancs, UTF-16 avec et sans marque, octet NUL…) donne 31 « ok » sur 31 avec meson 0.53.2 et avec 1.11.2. La relecture a comparé les trois programmes, ancien et nouveau, souspython3 -cet sousmeson runpython -c(0.53.2 et 1.11.2), sur 9 fichiers : même sortie et même code de retour.Le manuel et
-lmDécidé le 6 octobre : corrigé dans cette branche. Depuis #78,
gaol.pcne donne plus-lm. Le manuel disait encore :Libsdegaol.pcdonnent « GAOL itself with the C mathematical library ». C'est devenu « GAOL itself and the link option above ».Troisième lot (décidé le 6 octobre, après la CI verte)
Après le premier compte rendu, vous avez tranché trois questions ouvertes : ajouter une option de debug, mettre
pipefaildans #95, et Release par défaut avec un générateur CMake à plusieurs configurations (« Release par défaut seulement »).pipefail. Toute étape des workflows qui envoie une commande dansteecommence maintenant parset -o pipefail: configurations et « Performance » debuild-systems.yml,linux.ymletmacos.yml. Les jobs Windows déclarentshell: bashdans leursdefaults, que GitHub lance enbash -eo pipefail: rien à changer. Dans les conteneurs (sh -cde Debian et d'Alpine, sanspipefailsûr),./performance | tee fichierdevient./performance > fichierpuiscat fichier, sous leset -equi y est déjà.L'option de debug (
enable-debugpour meson,GAOL_DEBUGpour CMake). Elle compile les bibliothèques de GAOL et de CORE-MATH pour le débogage (sans optimisation, sansNDEBUG, avecGAOL_DEBUGGING), quels que soient le type de build ou la configuration, y compris dans un projet qui amène GAOL. Le code de ce projet, et les tests et les exemples de GAOL, gardent leurs propres drapeaux.configure --enable-debugne change pas : unconfigureparent le transmet à celui de GAOL.meson_options.txt,meson.build) :enable-debugrevient, avec ce sens. Il passe avant le Release forcé des sous-projets ; les bibliothèques reçoiventoverride_options: ['optimization=0', 'debug=true', 'b_ndebug=false']. En sous-projet :-Dgaol:enable-debug=true, oudefault_options: ['enable-debug=true']danssubproject()oudependency()(vérifié avec 0.53.2 et 1.11.2). Les tests et les exemples gardent les optimisations deconfigure(-funroll-loops…), qui restent sans effet sur les bibliothèques en-O0.CMakeLists.txt) :option(GAOL_DEBUG ... OFF).GAOL_DEBUGGINGest défini dansgaol_configuration.h;-funroll-loops…) ne sont pas ajoutées ;CMakeLists.txtde tête, chaqueCMAKE_<LANG>_FLAGS_<CONFIG>de ce répertoire perd ses drapeaux d'optimisation etNDEBUG(-O*,/O*,/Ob*,-DNDEBUG) et gagne-O0 -g(/Od /Ob0avec Visual C++). Sans type de build,-O0 -gs'ajoute àCMAKE_<LANG>_FLAGS. Les autres drapeaux de la configuration restent : runtime C de Visual C++, sanitizers, macros du projet. GAOL s'édite donc toujours avec le code de cette configuration ;MSVC_DEBUG_INFORMATION_FORMAT(ProgramDatabase) si CMP0141 est NEW (CMake 3.25 et suivants), et de/Zisinon ;gaoletgaol_core_mathles reçoivent, tandis quetests/etexamples/, ajoutés avant, et le projet parent gardent les leurs.gaol_bench, dans le même répertoire, les recevrait aussi : la cibleperfn'existe pas avecGAOL_DEBUG, ni avecenable-debug, qui mesureraient un GAOL de débogage.tests/release_flags.py --debug:-gsans-OniNDEBUG;GAOL_DEBUG,tests/arithmetic.cppgarde-O3 -DNDEBUG.GAOL_DEBUG=ON(tests seuls),ctest41 sur 41 ; meson 0.53.2 avec-Denable-debug=trueet les tests, 29 réussis et 2 sautés ; CMake SSE2 par défaut, 57 sur 57 ; l'audit des trois builds, la même configuration ; le manuel, sans erreur.GAOL_DEBUG(lvl, cmd)est aussi une macro de GAOL (gaol/gaol_common.h, manuel l. 5006). L'option CMake ne passe jamais au compilateur, donc rien ne se heurte, mais les deux noms peuvent prêter à confusion (voir les questions ouvertes).Plusieurs configurations (« Release par défaut seulement »). GAOL projet de tête, avec un générateur à plusieurs configurations (Visual Studio, Xcode, Ninja Multi-Config), met Release en tête de
CMAKE_CONFIGURATION_TYPES, sauf si la liste est donnée en ligne de commande ou dans l'environnement. Ce dernier cas se repère avantproject().Release;Debug;RelWithDebInfo, etninja -nne construit queCMakeFiles/gaol.dir/Release/; surconfigure-clean, c'étaitDebug/. Une liste donnée (Debug;Release) est gardée.cmake --buildavec Visual Studio construit Debug sans--config, comme le choisit CMake ; non vérifiable ici, pas plus que ce que montrent les IDE.Tests de la CI.
build-typesdelinux.yml, en configuration seule :GAOL_DEBUGavec GAOL seul et par FetchContent, sans type de build et en Release (release_flags.py --debug) ;-DPROJECT_RELEASEdans ses drapeaux Release et-DPROJECT_DEBUGdans ses drapeaux Debug ;meson-subproject:-Dgaol:enable-debug=trueen sous-projet, et-Denable-debug=trueseul.release_flags.pytient compte de l'ordre des drapeaux : un-UNDEBUGaprès-DNDEBUG. Il accepteGAOL_DEBUGGINGdansgaol_configuration.hou sur la ligne de commande. Chaque contrôle échoue dans le sens contraire (vérifié).Documentation.
doc/building.md: les tables des options de CMake, de configure et de meson, et celle des macros ; une phrase sur le multi-configuration ;doc/three-builds.md,doc/using.md, le manuel (listes et tables des options, partie Debugging, partie CMake),doc/tests.mdetdoc/continuous-integration.md.Quatrième lot (décidé le 6 octobre)
La macro
GAOL_DEBUG(lvl, cmd)devientGAOL_DEBUG_VERBOSE(lvl, cmd). L'option CMake garde le nomGAOL_DEBUG, qui suit le schémaGAOL_SIMD/enable-simd.gaol/gaol_common.h(sa définition), ses 96 usages dansgaol/gaol_expression.hetgaol/gaol_expression.cpp, ettests/debugging.cpp.defmacroA, avec l'ancien nom et\newinvfive),doc/building.mdetdoc/tests.mdsuivent.GAOL_DEBUGlaissé dans un programme ne compile plus.manual/v4et les registres ne changent pas.L'option d'édition de liens de
gaol_dep.check_flags.py(testflagsdetests/meson_subproject) lit aussi, dansbuild.ninja, la commande d'édition de liens de chaque exécutable du projet, hors desubprojects/. Elle doit contenir les options desLibsdugaol.pcdu sous-projet,-Let-là part :-mno-daz-ftzlà où le compilateur le prend, donc avec le GCC 13 de la CI. Avec un compilateur qui le refuse (GCC 9.4, Clang 18), il n'y a rien à vérifier, et le test le dit.Vérifié : ce contrôle échoue sans le
link_args: gaol_link_argsdegaol_dep. Aucun compilateur d'ici ne prend-mno-daz-ftz; je l'ai montré avec un enveloppeur deg++qui accepte l'option et la retire :link_args: « gaol_test_reverse is linked without -mno-daz-ftz », et les autres exécutables de même.Les branches distantes déjà fusionnées du « Ménage » (
todo-27-per-instruction-rounding,todo-d-headers,todo-d21-integers,todo-g-refused-options,todo-m-tan,todo-r-atanh-hausdorff) n'existaient déjà plus sur GitHub quand j'ai voulu les supprimer. Il ne reste quetodo-12-long-sums(E),todo-o-mesonettodo-u-small-errors.Vérifié en local : CMake SSE2, 57 sur 57 ;
headers.shsur le GAOL installé (79 macros, toutes préfixéesGAOL_ougaol_) ;GAOL_DEBUGavec-Wall -Wextra -Werror, qui compile les usages renommés sousGAOL_DEBUGGING, 41 sur 41 ;tests/meson_subprojectavec meson 0.53.2, 8 sur 8 ; le manuel, sans erreur.Pour
doc/differences.mdetChangeLog(pull request de synthèse)doc/differences.md, partie meson : « GAOL can be a subproject of a meson project (dependency('gaol', fallback: ['gaol', 'gaol_dep'])):meson.buildgives its flags withadd_project_arguments(),gaol_depgives the code using GAOL the flags of interval arithmetic ofgaol.pc, and a subproject declares no test setup. meson refused theadd_global_arguments()it called in a subproject. As a subproject, GAOL is built in release by default, even with meson before 1.8.4, which gives it the build type of the project. »doc/differences.md, partie CMake : « Brought in by a project without a build type (add_subdirectory, FetchContent), GAOL and CORE-MATH are compiled as in Release:-O3,NDEBUGand the optimizations of configure. GAOL had-O3alone, and CORE-MATH no optimization. »ChangeLog: « meson.build, gaol/meson.build: add_project_arguments() rather than add_global_arguments(), which meson refuses in a subproject, gaol_dep carries the flags of interval arithmetic (pc_cflags), no test setup nor target check in a subproject, and the libraries in release in a subproject where meson before 1.8.4 gives the debug of the project; tests/meson_subproject and a job of build-systems.yml check it. »ChangeLog: « CMakeLists.txt: without a build type, gaol and gaol_core_math are compiled as in Release (-O3, NDEBUG, -funroll-loops...); tests/release_flags.py checks it on tests/fetch_content in linux.yml. »doc/differences.md, parties CMake et meson : «GAOL_DEBUG(CMake) andenable-debug(meson, which had definedGAOL_DEBUGGINGalone and was gone) buildlibgaoland CORE-MATH for debugging whatever the build type or the configuration, a project bringing GAOL in included. With a generator of several configurations, GAOL built alone puts Release first among them. »ChangeLog: « CMakeLists.txt: GAOL_DEBUG, and Release first among the configurations of a generator of several. meson_options.txt, meson.build: enable-debug. tests/release_flags.py --debug, the job build-types of linux.yml. .github/workflows: set -o pipefail in the steps piping into tee. »doc/differences.md: « The macroGAOL_DEBUG(level, command)is namedGAOL_DEBUG_VERBOSE:GAOL_DEBUGis the option of CMake that builds GAOL for debugging. »ChangeLog: « gaol/gaol_common.h: GAOL_DEBUG(lvl, cmd) renamed GAOL_DEBUG_VERBOSE. tests/meson_subproject/check_flags.py: the link option of gaol.pc too. »ChangeLog: « meson.build: the files Python reads VERSION.txt from are closed (with). doc/building.md, manual: the python.exe alias of WindowsApps is not checked on Windows. tests/: C++17 for the hexadecimal floating literals of the tests, not of elementary_values.h alone. manual: gaol.pc names no mathematical library. »Relecture
Un sous-agent indépendant a relu les six premiers commits. Il a reconstruit et relancé lui-même, dans des copies (meson 0.53.2 à 1.11.2, automake 1.18.1, pdflatex).
Il a trouvé deux points bloquants, que j'ai vérifiés puis corrigés :
add_test_setup(..., is_default: true)de GAOL dans un sous-projet (voir le 41) ;Ses remarques mineures, aussi vérifiées puis corrigées :
meson.build_root(), déprécié depuis meson 0.56, remplacé parmeson.current_build_dir();pipefaildans le job ;tar -hqui suit le lien sans fin ;doc/building.md, qui affirmait encore « take » ;tests/meson_subprojectabsent de la phrase dedoc/tests.mdsur le délai denumbers;README.md;Ce qu'il a vérifié et trouvé juste :
flags;dependency(..., fallback:);version-file.sh(31 sur 31) ;WindowsApps;tests/Makefile.inrégénéré à l'identique ;.gitignore;Non repris : contrôler aussi l'option d'édition de liens de
gaol_dep(-mno-daz-ftz). Elle n'est pas danscompile_commands.json, et cette partie degaol_depexistait avant la branche.Le même sous-agent a ensuite relu les neuf commits suivants : B1, B2, le Release par défaut et le manuel. Il a trouvé un point bloquant :
Ses remarques mineures, vérifiées puis corrigées :
elif releasequi, de 1.8.0 à 1.8.3, valait aussi pourdebugoptimized;doc/using.md;tests/meson_subprojectdevenue fausse après l'exclusion deversion-file.sh;-Oderelease_flags.py, qui prenait aussi/Ob2(devenu^[-/]O([0-3sgdxz]|fast)?$) ;Ce qu'il a vérifié et trouvé juste :
-Dgaol:with-tests=true) : 53 réussis ;meson compile, puis 8 sur 8) ;version-file.shavec le lien présent (31 sur 31) ;Il n'a pas pu vérifier le
--exclude=./...avec letarBSD de macOS.Une troisième relecture, sur les six commits du troisième lot, a trouvé un point bloquant :
GAOL_DEBUGrecopiait tels quels les drapeaux Debug du projet dans les autres configurations de GAOL. Ce que le projet y met n'arrivait alors que dans GAOL. Avec-DCMAKE_BUILD_TYPE=Release -DGAOL_DEBUG=ON "-DCMAKE_CXX_FLAGS_DEBUG=-g -fsanitize=address",gaol_test_reversene s'éditait pas (références indéfinies à__asan_*). Avec Visual C++ et CMP0091 OLD, le/MDddu Debug irait dans les objets Release de GAOL (LNK2038, lu dans les sources de CMake).gaol_test_reversepasse (4 089 vérifications, 0 échec). Avec l'ancien bloc, le nouveau contrôle de la CI échoue surgaol_interval.cpp(vérifié).Ses remarques mineures, corrigées :
gaol_benchet la cibleperf;configuredes tests sousenable-debug;GAOL_DEBUG(level, command)» ;--enable-debugen sous-paquet ;Ce qu'il a vérifié et trouvé juste :
GAOL_DEBUGdésactivé, qui ne change rien (98 sur 98 commandes de tête, 55 sur 55 par FetchContent) ;CMAKE_DEFAULT_BUILD_TYPEdonnés sont respectés) ;enable-debugavec meson 1.3.2, 0.53.2 et 1.11.2 ;release_flags.pydans les deux sens ;pipefail, y compris l'absence d'autre tube cassé ;Remarques laissées : avec meson 0.53 à 0.56 et Visual C++,
enable-debugne donne pas/Zi(msvc_debug_args[True]y est vide) ; non vérifiable sans Windows, comme le comportement des IDE.Vérifié en local
Sur ce portable (i7-1185G7, GCC 9.4, Clang 18), sur une copie des fichiers de la tête de la branche :
ctest -j4, 100 % de 57 (intervalfetinterval2fsautés) ;-Wall -WextraavecCMAKE_COMPILE_WARNING_AS_ERROR=ON, GCC et Clang : construits sans avertissement ;configure --with-tests --with-examples,make,make install,make check) : 29 tests réussis et 2 sautés, 16 exemples réussis ;make distcleanrend l'arbre ;with-tests,with-examples) : 45 réussis, 2 sautés ; meson 1.11.2 : 29 réussis, 2 sautés (les exemples ne sont pas dans la configuration de test par défaut) ;.github/scripts/tests.shsur le GAOL installé par meson : 292 728 vérifications, 0 échec ;tests/meson_subproject, type de build par défaut : 8 sur 8 avec meson 0.53.2, 1.3.2, 1.7.2, 1.8.0, 1.8.4 et 1.11.2, et avec 0.53.2 en--buildtype=release;tests/fetch_contentconfiguré sans type de build :tests/release_flags.py, 48 commandes de GAOL et de CORE-MATH en Release ;compile_commands.jsoncomparé à celui deconfigure-cleanaux mêmes chemins : CMake, 0 sur 98 ; meson, les 16 exemples seulement ;.github/scripts/version-file.sh meson: 31 sur 31 avec 0.53.2 et avec 1.11.2 ;.github/audit(audit.shpuiscompare.py --check) : « the same configuration in: cmake, autotools, meson » ;package_sourcede CPack (voir le 41) ;pdflatex: aucune erreur, 129 pages, le même uniqueOverfull \hbox(l. 537-541) que surconfigure-clean;meson.build, les scripts de test et la documentation : les commandes du build meson de tête, revérifiées (0.53.2 et 1.11.2 : les 16 exemples seulement) ; les flags du sous-projet par version et par type de build (ci-dessus) ;tests/meson_subprojectavec meson 1.3.2, 8 sur 8 ; le manuel, de nouveau ;check_branch: OK.Non vérifiable ici :
meson-subprojecteux-mêmes (meson de pipx et meson 1.3.2 d'Ubuntu 24.04), et l'étape FetchContent sans type de build delinux.yml;/O2,NDEBUG) ;WindowsAppset le filtre de meson sous Windows : je n'ai fait que relire le filtre.Dépendances
Aucune.
Questions ouvertes
tests/performance.cppest compilé en C++17 dans les trois builds sans en avoir besoin (pas de littéral hexadécimal, il compile en C++14). Je n'y ai pas touché.-std=c++11.GAOL_DEBUGavec Visual C++ n'est pas vérifié non plus.