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:

  1. Refactor: rename top-level unsupported/ to contrib/ — pure git mv (433 renames at 100% similarity).
  2. 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 label UnsupportedContrib and group target BuildUnsupportedBuildContrib.
  3. CI: rename ":unsupported:" labels to ":contrib:" — mechanical sweep of .gitlab-ci.yml job names, EIGEN_CI_CTEST_LABEL, EIGEN_CI_BUILD_TARGET, plus ci/scripts/run-clang-tidy.sh regex/hint.
  4. Refactor: update internal references from unsupported/ to contrib/ — InternalHeaderCheck.h #error strings, Doxygen \\code blocks, doc CMakeLists/Doxyfile (target names, source/output paths, project name), contrib/README.txt rewrite, top-level benchmark includes, prose comments.
  5. Refactor: update scripts and CHANGELOG ...scripts/format.sh formats both trees, scripts/add_spdx_headers.py accepts both prefixes, CHANGELOG entry.
  6. 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; BuildContrib and BuildOfficial targets exist.
  • ctest --print-labels lists Contrib, Official, smoketest (241 tests under Contrib).
  • Sample contrib tests pass with Contrib label (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 --install produces <prefix>/include/eigen3/contrib/Eigen/... AND <prefix>/include/eigen3/unsupported/Eigen/... (shims).
  • clang-format-17 --dry-run --Werror clean on every file modified by the rename.
  • CI matrix (:contrib: jobs replace the old :unsupported: ones).

Out of scope

🤖 Generated with Claude Code

  • #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).
Edited by Rasmus Munk Larsen

Merge request reports

Loading