Repository navigation
Merge plan for the dev-clean-v2 series of pull requests (#472 to #535) #471
Description
Cette issue récapitule la série de pull-requests #472 à #535, qui remplace #403, les PR #408 à #469 et l'issue #470 (la première PR de cette série-là, #407, est déjà mergée). Elles viennent de la branche dev-clean-v2 de Jordan08/codac, partent de l'état actuel de codac2, et y apportent le travail des branches fix-warnings-v2 puis GAOL-v2, en 64 commits d'une taille relisible.
Démarche
- Remplacer IBEX par GAOL. Codac ne se servait d'IBEX que pour GAOL, sur lequel repose
codac2::Interval. Codac trouve maintenant GAOL sur le système ou compile le master du fork Jordan08/GAOL, qui porte les correctifs dont Codac a besoin : les garde-fous que Codac maintenait autour de GAOL disparaissent, et les options de compilation (arrondi, FMA) viennent de GAOL lui-même. Les conversionsto_ibex()/to_codac()restent, pour qui utilise IBEX à côté de Codac : elles ne sont compilées que si IBEX est inclus. - Outiller le debug et la CI. ASan/UBSan en Debug, couverture de code (
WITH_COVERAGE), exemples lancés comme tests, workflows Debug sous Linux, macOS et Windows, vérification du paquet installé (find_packageet pkg-config). - Reprendre le reste de Fix warnings v2 #403. Corrections de bugs relevés par les sanitizers, corrections d'avertissements, packaging CMake, opérateur
@en Python, documentation.
Un graphe plutôt qu'une chaîne
Dans la série précédente, chaque PR contenait toutes les précédentes : en refuser une bloquait toutes les suivantes. Ici, chaque PR ne dépend que de ce dont elle a réellement besoin, pour s'appliquer (mêmes lignes modifiées) ou pour fonctionner (par exemple, tout ce qui suppose GAOL dépend de la PR qui passe à GAOL).
- 36 PR sont indépendantes : basées directement sur
codac2, elles peuvent être mergées, ou refusées, dans n'importe quel ordre. - 28 PR dépendent d'une ou plusieurs autres, selon le graphe ci-dessous ; en refuser une ne bloque que celles qui en dépendent.
- 4 d'entre elles (Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497, Add Debug workflows with sanitizers and coverage #503, Drop the -fPIC given by hand in the workflows, scripts and manual #514, Add an Examples section and the 2.0.3 to 2.1.1 changelog #534) dépendent de plusieurs PR : leur branche part d'un merge des branches dont elles dépendent.
flowchart TD
n472["#472 Make Approx#lt;double#gt; relative for large…"]
n475["#475 Build Codac on GAOL from Jordan Ninin's…"]
n472 --> n475
n476["#476 Stop installing IBEX in the workflows,…"]
n475 --> n476
n477["#477 Drop the MinGW jobs whose mingw-w64 the…"]
n476 --> n477
n478["#478 Document in the manual that Codac depends…"]
n475 --> n478
n479["#479 Call GAOL directly, without the guards its…"]
n475 --> n479
n480["#480 Take atan2 from GAOL, whose fork now…"]
n475 --> n480
n481["#481 Build GAOL with the FMA instructions and…"]
n475 --> n481
n482["#482 Hand Threads to the users of…"]
n475 --> n482
n493["#493 Enable ASan/UBSan in Debug builds when the…"]
n482 --> n493
n494["#494 Compile against the headers in src/ instead…"]
n493 --> n494
n495["#495 Add the WITH_COVERAGE option and the…"]
n494 --> n495
n497["#497 Build and run the examples as ctest tests…"]
n494 --> n497
n496["#496 Update the examples to axis() in set_axes…"]
n496 --> n497
n500["#500 Retry the Doxygen install on Windows, pin…"]
n476 --> n500
n501["#501 Build the wheels with python -m build and…"]
n500 --> n501
n502["#502 Run only the Python tests in the…"]
n501 --> n502
n503["#503 Add Debug workflows with sanitizers and…"]
n495 --> n503
n497 --> n503
n504["#504 Run the examples as tests in the Windows…"]
n503 --> n504
n505["#505 Run the examples as tests in the package…"]
n502 --> n505
n506["#506 Build Catch2 for the macOS deployment…"]
n505 --> n506
n509["#509 Set C++20 without compiler extensions on…"]
n503 --> n509
n510["#510 Treat the Eigen and Catch2 headers from…"]
n509 --> n510
n511["#511 Set CMP0156 so that each static library is…"]
n510 --> n511
n514["#514 Drop the -fPIC given by hand in the…"]
n478 --> n514
n504 --> n514
n506 --> n514
n513["#513 Set CMAKE_POSITION_INDEPENDENT_CODE before…"]
n513 --> n514
n517["#517 Export the Codac targets and fix codac.pc…"]
n511 --> n517
n518["#518 Check in CI that find_package and…"]
n517 --> n518
n531["#531 Compile the parallelepiped, peibos and…"]
n510 --> n531
n533["#533 Document how to use Codac from an external…"]
n478 --> n533
n529["#529 Fail the configuration when Doxygen or…"]
n534["#534 Add an Examples section and the 2.0.3 to…"]
n529 --> n534
n530["#530 Fix the Sphinx warnings and build the…"]
n530 --> n534
Règles de merge
- Merger une PR après celles dont elle dépend. Tant qu'elles ne sont pas mergées, une PR affiche aussi leurs commits ; une fois qu'elles le sont, elle ne montre plus que le sien.
- Merger avec « Create a merge commit », pour que les PR suivantes reconnaissent les commits déjà intégrés (« Squash and merge » les obligerait à être rebasées, et « Rebase and merge » n'accepte pas les PR qui partent d'un merge).
- Mergées dans l'ordre de la liste en bas de cette issue, les PR s'appliquent toutes sans conflit (vérifié en rejouant ces merges), et l'état final est exactement celui de la branche
GAOL-v2, dont la CI complète est verte. Si un merge dans un autre ordre produisait un conflit, je rebase la PR concernée. - Merger Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475, Stop installing IBEX in the workflows, Docker scripts and packages #476 et Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses #477 à la suite : entre le passage à GAOL et le retrait des jobs MinGW 11 à 14, dont le mingw-w64 est refusé par GAOL, ces jobs échouent.
- Les workflows de chaque PR tournent dès son ouverture, sur
codac2augmenté de la PR et de celles dont elle dépend.
Ordre conseillé en plus des dépendances
- Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475 Build Codac on GAOL from Jordan Ninin's fork instead of IBEX : À merger de préférence après Call std::abs in Interval::smag() #474, que la CI macOS avec GCC a demandé lors du passage à GAOL.
- Add Debug workflows with sanitizers and coverage #503 Add Debug workflows with sanitizers and coverage : Les jobs sous sanitizers ne sont verts qu'une fois mergés les correctifs qu'ASan et UBSan ont fait trouver : Break the shared_ptr cycle between PavingNode parents and children #484, Fix object ownership in the tube and contractor Python bindings #485, Avoid log10(0) when formatting integer values in IPE figures #488 et Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan #490.
- Run the examples as tests in the package and wheel matrices #505 Run the examples as tests in the package and wheel matrices : Les exemples ne tournent vraiment qu'une fois Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497 mergée : avant,
TEST_EXAMPLESn'a pas d'effet. - Document the tests, sanitized Debug builds, examples and coverage #508 Document the tests, sanitized Debug builds, examples and coverage : À merger après les PR qu'elle documente : Enable ASan/UBSan in Debug builds when the toolchain ships the runtime #493, Add the WITH_COVERAGE option and the coverage targets #495, Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497 et Add Debug workflows with sanitizers and coverage #503.
- Document how to use Codac from an external C++ or Python project #533 Document how to use Codac from an external C++ or Python project : À merger de préférence après Export the Codac targets and fix codac.pc for installed consumers #517, qui corrige la consommation d'un Codac installé qu'elle décrit.
- Add the summary page of the code coverage #535 Add the summary page of the code coverage : À merger en dernier : elle mesure la couverture de l'état final de la série.
- Download Eigen over HTTPS rather than plain HTTP #473 Download Eigen over HTTPS rather than plain HTTP : À merger en premier : sans elle, la CI des autres PR échoue par moments en téléchargeant Eigen.
Validation
Chaque PR a été compilée et testée localement sur sa propre base, c'est-à-dire codac2 avec les PR dont elle dépend (Linux, Clang 18, Release, avec les bindings Python et les exemples ; avant le passage à GAOL, avec IBEX) : 47 PR passent toute la suite de tests ; 15 ne touchent que la CI, le manuel ou la page de couverture, et n'ont pas eu à être compilées ; #530 ne touche que la génération du manuel, que cette validation ne construit pas ; #473 ne change qu'une URL de téléchargement.
codac2 a aussi été compilé et testé tel qu'il sera après chaque bloc de la liste ci-dessous, les PR mergées dans cet ordre : après #482, #492, #499, #508, #518, #526 et #535 (sans l'URL de #473). Ces 7 états passent tous la suite de tests (158 à 198 tests). Ils comprennent les dernières retouches de la série : version minimale de GAOL, operator& sans garde-fou, rad() et bisect() pris dans GAOL.
L'état final, identique à la branche GAOL-v2, a en plus passé la CI complète du fork (Linux, macOS, Windows, Docker, Debug sous sanitizers). L'extension CAPD, non installée, n'a pas été compilée : la PR qui la touche n'est vérifiée que par relecture.
Liste des PR, dans l'ordre conseillé
- Download Eigen over HTTPS rather than plain HTTP #473 Download Eigen over HTTPS rather than plain HTTP — en premier
- Make Approx<double> relative for large values, handle NaN and inf #472 Make Approx relative for large values, handle NaN and inf
- Call std::abs in Interval::smag() #474 Call std::abs in Interval::smag()
- Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475 Build Codac on GAOL from Jordan Ninin's fork instead of IBEX — dépend de Make Approx<double> relative for large values, handle NaN and inf #472 — de préférence après Call std::abs in Interval::smag() #474
- Stop installing IBEX in the workflows, Docker scripts and packages #476 Stop installing IBEX in the workflows, Docker scripts and packages — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses #477 Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses — dépend de Stop installing IBEX in the workflows, Docker scripts and packages #476
- Document in the manual that Codac depends on GAOL instead of IBEX #478 Document in the manual that Codac depends on GAOL instead of IBEX — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Call GAOL directly, without the guards its fork makes unnecessary #479 Call GAOL directly, without the guards its fork makes unnecessary — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Take atan2 from GAOL, whose fork now implements it #480 Take atan2 from GAOL, whose fork now implements it — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Build GAOL with the FMA instructions and pass its flags on #481 Build GAOL with the FMA instructions and pass its flags on — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Hand Threads to the users of codac-config.cmake #482 Hand Threads to the users of codac-config.cmake — dépend de Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #475
- Add assert_release_unreachable and fix Interval::init_from_list #483 Add assert_release_unreachable and fix Interval::init_from_list
- Break the shared_ptr cycle between PavingNode parents and children #484 Break the shared_ptr cycle between PavingNode parents and children
- Fix object ownership in the tube and contractor Python bindings #485 Fix object ownership in the tube and contractor Python bindings
- Fix the acos/sinh bindings and the | in the cart_prod assertions #486 Fix the acos/sinh bindings and the | in the cart_prod assertions
- Rename the CAPD PEIBOS result alias T to PEIBOS_CAPD_Result #487 Rename the CAPD PEIBOS result alias T to PEIBOS_CAPD_Result
- Avoid log10(0) when formatting integer values in IPE figures #488 Avoid log10(0) when formatting integer values in IPE figures
- Replace resize_save_values with Eigen's conservativeResize #489 Replace resize_save_values with Eigen's conservativeResize
- Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan #490 Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan
- Generalize IsIntervalDomain to any type flagged is_interval_based #491 Generalize IsIntervalDomain to any type flagged is_interval_based
- Use the portable PI constant instead of the non-standard M_PI #492 Use the portable PI constant instead of the non-standard M_PI
- Enable ASan/UBSan in Debug builds when the toolchain ships the runtime #493 Enable ASan/UBSan in Debug builds when the toolchain ships the runtime — dépend de Hand Threads to the users of codac-config.cmake #482
- Compile against the headers in src/ instead of build/include copies #494 Compile against the headers in src/ instead of build/include copies — dépend de Enable ASan/UBSan in Debug builds when the toolchain ships the runtime #493
- Add the WITH_COVERAGE option and the coverage targets #495 Add the WITH_COVERAGE option and the coverage targets — dépend de Compile against the headers in src/ instead of build/include copies #494
- Update the examples to axis() in set_axes and draw every subset #496 Update the examples to axis() in set_axes and draw every subset
- Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497 Build and run the examples as ctest tests when TEST_EXAMPLES is ON — dépend de Compile against the headers in src/ instead of build/include copies #494 et Update the examples to axis() in set_axes and draw every subset #496
- Fix make check stopping on a non-existent codac target #498 Fix make check stopping on a non-existent codac target
- Run the workflows on every branch and cancel superseded runs #499 Run the workflows on every branch and cancel superseded runs
- Retry the Doxygen install on Windows, pin 1.17.0 on Intel macOS #500 Retry the Doxygen install on Windows, pin 1.17.0 on Intel macOS — dépend de Stop installing IBEX in the workflows, Docker scripts and packages #476
- Build the wheels with python -m build and an SPDX license #501 Build the wheels with python -m build and an SPDX license — dépend de Retry the Doxygen install on Windows, pin 1.17.0 on Intel macOS #500
- Run only the Python tests in the wheel-building matrices #502 Run only the Python tests in the wheel-building matrices — dépend de Build the wheels with python -m build and an SPDX license #501
- Add Debug workflows with sanitizers and coverage #503 Add Debug workflows with sanitizers and coverage — dépend de Add the WITH_COVERAGE option and the coverage targets #495 et Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497 — de préférence après Break the shared_ptr cycle between PavingNode parents and children #484, Fix object ownership in the tube and contractor Python bindings #485, Avoid log10(0) when formatting integer values in IPE figures #488 et Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan #490
- Run the examples as tests in the Windows Debug jobs too #504 Run the examples as tests in the Windows Debug jobs too — dépend de Add Debug workflows with sanitizers and coverage #503
- Run the examples as tests in the package and wheel matrices #505 Run the examples as tests in the package and wheel matrices — dépend de Run only the Python tests in the wheel-building matrices #502 — de préférence après Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497
- Build Catch2 for the macOS deployment target, not Homebrew's #506 Build Catch2 for the macOS deployment target, not Homebrew's — dépend de Run the examples as tests in the package and wheel matrices #505
- Request the arm64 Python interpreter on Apple Silicon runners #507 Request the arm64 Python interpreter on Apple Silicon runners
- Document the tests, sanitized Debug builds, examples and coverage #508 Document the tests, sanitized Debug builds, examples and coverage — de préférence après Enable ASan/UBSan in Debug builds when the toolchain ships the runtime #493, Add the WITH_COVERAGE option and the coverage targets #495, Build and run the examples as ctest tests when TEST_EXAMPLES is ON #497 et Add Debug workflows with sanitizers and coverage #503
- Set C++20 without compiler extensions on every target #509 Set C++20 without compiler extensions on every target — dépend de Add Debug workflows with sanitizers and coverage #503
- Treat the Eigen and Catch2 headers from FetchContent as system headers #510 Treat the Eigen and Catch2 headers from FetchContent as system headers — dépend de Set C++20 without compiler extensions on every target #509
- Set CMP0156 so that each static library is linked once #511 Set CMP0156 so that each static library is linked once — dépend de Treat the Eigen and Catch2 headers from FetchContent as system headers #510
- Add the DEB CPack generator only when dpkg-deb is available #512 Add the DEB CPack generator only when dpkg-deb is available
- Set CMAKE_POSITION_INDEPENDENT_CODE before add_subdirectory(src) #513 Set CMAKE_POSITION_INDEPENDENT_CODE before add_subdirectory(src)
- Drop the -fPIC given by hand in the workflows, scripts and manual #514 Drop the -fPIC given by hand in the workflows, scripts and manual — dépend de Document in the manual that Codac depends on GAOL instead of IBEX #478, Run the examples as tests in the Windows Debug jobs too #504, Build Catch2 for the macOS deployment target, not Homebrew's #506 et Set CMAKE_POSITION_INDEPENDENT_CODE before add_subdirectory(src) #513
- Initialize PYTHON_EXECUTABLE from the interpreter pybind11 found #515 Initialize PYTHON_EXECUTABLE from the interpreter pybind11 found
- Require CMake 3.10 in the standalone example and test projects #516 Require CMake 3.10 in the standalone example and test projects
- Export the Codac targets and fix codac.pc for installed consumers #517 Export the Codac targets and fix codac.pc for installed consumers — dépend de Set CMP0156 so that each static library is linked once #511
- Check in CI that find_package and pkg-config consumers agree #518 Check in CI that find_package and pkg-config consumers agree — dépend de Export the Codac targets and fix codac.pc for installed consumers #517
- Fix missing override, class/struct mismatch and hidden overloads #519 Fix missing override, class/struct mismatch and hidden overloads
- Fix C++20 operator== ambiguity, static functions in headers, printf #520 Fix C++20 operator== ambiguity, static functions in headers, printf
- Fix unused-parameter warnings in CtcDeriv binding and style parsing #521 Fix unused-parameter warnings in CtcDeriv binding and style parsing
- Fix braced-scalar-init, shadowing and unused variables in tests #522 Fix braced-scalar-init, shadowing and unused variables in tests
- Fix the misleading-indentation warning in convex_hull #523 Fix the misleading-indentation warning in convex_hull
- Fix Visual C++ warnings and the extra semicolons of vibes.h #524 Fix Visual C++ warnings and the extra semicolons of vibes.h
- Disable Clang's -Wself-assign-overloaded in in-place operator bindings #525 Disable Clang's -Wself-assign-overloaded in in-place operator bindings
- Add the @ operator for matrix products to the Python binding #526 Add the @ operator for matrix products to the Python binding
- Upgrade the Doxyfile to 1.17 and expand the operator macros #527 Upgrade the Doxyfile to 1.17 and expand the operator macros
- Make doxygen2docstring independent of the Doxygen version #528 Make doxygen2docstring independent of the Doxygen version
- Fail the configuration when Doxygen or doxygen2docstring.py fails #529 Fail the configuration when Doxygen or doxygen2docstring.py fails
- Fix the Sphinx warnings and build the manual into manual/html #530 Fix the Sphinx warnings and build the manual into manual/html
- Compile the parallelepiped, peibos and shape snippets as tests #531 Compile the parallelepiped, peibos and shape snippets as tests — dépend de Treat the Eigen and Catch2 headers from FetchContent as system headers #510
- Add the Python pendulum stability analysis to the Ellipsoid manual #532 Add the Python pendulum stability analysis to the Ellipsoid manual
- Document how to use Codac from an external C++ or Python project #533 Document how to use Codac from an external C++ or Python project — dépend de Document in the manual that Codac depends on GAOL instead of IBEX #478 — de préférence après Export the Codac targets and fix codac.pc for installed consumers #517
- Add an Examples section and the 2.0.3 to 2.1.1 changelog #534 Add an Examples section and the 2.0.3 to 2.1.1 changelog — dépend de Fail the configuration when Doxygen or doxygen2docstring.py fails #529 et Fix the Sphinx warnings and build the manual into manual/html #530
- Add the summary page of the code coverage #535 Add the summary page of the code coverage — en dernier
Activity
[-]Merge plan for the dev-clean-v2 series of pull requests[/-][+]Merge plan for the dev-clean-v2 series of pull requests (#472 to #535)[/+]