Refactor: rename top-level unsupported/ to contrib/
Summary
Renames the top-level unsupported/ directory to contrib/. Most of the content (Tensor, AutoDiff, FFT, MatrixFunctions, Polynomials, Splines, NNLS, the GPU host-dispatch layer, etc.) is mature and widely depended on; what actually distinguishes the directory is a looser API-stability contract, not lack of support. contrib/ reflects that more honestly.
Existing user code with #include <unsupported/Eigen/...> continues to compile unchanged: 24 + 3 silent forwarding header shims live under unsupported/Eigen/ and unsupported/Eigen/CXX11/, each a one-line #include of the corresponding contrib/Eigen[/CXX11]/ path with IWYU pragma: export. The shims are installed alongside the new headers, so installed packages also keep both paths working.
Commit organization
The branch is split into reviewable steps:
Refactor: rename top-level unsupported/ to contrib/— puregit mv(433 renames at 100% similarity).Refactor: leave forwarding shims at unsupported/ and wire contrib/ into CMake— adds the 27 shim headers, minimal CMakeLists for the legacy tree, and updates install paths + subproject labelUnsupported→Contriband group targetBuildUnsupported→BuildContrib.CI: rename ":unsupported:" labels to ":contrib:"— mechanical sweep of.gitlab-ci.ymljob names,EIGEN_CI_CTEST_LABEL,EIGEN_CI_BUILD_TARGET, plusci/scripts/run-clang-tidy.shregex/hint.Refactor: update internal references from unsupported/ to contrib/— InternalHeaderCheck.h#errorstrings, Doxygen\\codeblocks, doc CMakeLists/Doxyfile (target names, source/output paths, project name),contrib/README.txtrewrite, top-level benchmark includes, prose comments.Refactor: update scripts and CHANGELOG ...—scripts/format.shformats both trees,scripts/add_spdx_headers.pyaccepts both prefixes, CHANGELOG entry.Format: realign continuation backslashes after rename— clang-format-17 fix-up after the prose substitution shortened a few macro lines.
Test plan
-
cmake -G Ninja -B build .configures cleanly;BuildContribandBuildOfficialtargets exist. -
ctest --print-labelslistsContrib,Official,smoketest(241 tests underContrib). - Sample contrib tests pass with
Contriblabel (autodiff_*,matrix_function_*,tensor_simple,tensor_assign,tensor_reduction). - All 107
smoketest-labeled tests pass. - A 12-include legacy-path smoke TU (
<unsupported/Eigen/Tensor>,<unsupported/Eigen/CXX11/Tensor>,<unsupported/Eigen/MatrixFunctions>, ...) compiles and runs against both the source tree and an installed prefix. -
cmake --installproduces<prefix>/include/eigen3/contrib/Eigen/...AND<prefix>/include/eigen3/unsupported/Eigen/...(shims). -
clang-format-17 --dry-run --Werrorclean on every file modified by the rename. - CI matrix (
:contrib:jobs replace the old:unsupported:ones).
Out of scope
- Deletion of the legacy shims: deferred to a future minor release once downstream has had time to migrate.
- Deprecation warnings on the shims: silent today; can be added behind an opt-in macro later.
- Rewrite https://drive.google.com/file/d/1ceF6ziwlk33vBQfZi48C44fzyP622ehP/view?usp=sharing to conform to the new name.
Related issues
- #3079 — Proposal: audit of unsupported/ modules for promotion to Core (this MR handles the directory rename; the audit-for-promotion is the natural follow-up).