Build Packages / Create release (push) Successful in 16s
Build Packages / build:rugnux:aarch64 (cross) (push) Successful in 8m15s
Build Packages / build:rugnux-tgz (x86_64) (push) Successful in 8m18s
Build Packages / build:viewer-tgz:cpu (push) Successful in 9m16s
Build Packages / build:viewer-tgz:cuda (push) Successful in 10m48s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 12m48s
Build Packages / build:windows:nocuda (push) Successful in 17m20s
Build Packages / build:windows:cuda (push) Successful in 19m43s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 22m47s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 16m6s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 17m17s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 18m25s
Build Packages / Generate python client (push) Successful in 37s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m37s
Build Packages / Build documentation (push) Successful in 46s
Build Packages / build:rugnux:windows (push) Successful in 10m50s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m8s
Build Packages / build:rpm (rocky8) (push) Successful in 15m39s
Build Packages / build:rpm (rocky9) (push) Successful in 16m1s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 14m2s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 14m22s
Build Packages / Unit tests (push) Successful in 1h13m32s
They were the last two dependencies a machine had to supply itself. Everything else - spdlog, zstd, HDF5, Catch2, libzmq, libtiff, FFTW, Ceres, the indexer, libcurl, libjpeg-turbo - the build fetches, so a checkout and a compiler were almost enough and then were not. Now they are: a plain Release configure needs neither zlib-devel nor eigen3-devel. Eigen is fetched as headers and never added as a subdirectory; a two-file config package is written into the build tree and Eigen3_DIR points at it, so Ceres and the indexer resolve their own find_package(Eigen3) through the ordinary config path. This is what makes it safe: OVERRIDE_FIND_PACKAGE remains banned, for the reason the note in CMakeLists has always given - it segfaults the CMake that ships with Visual Studio, one configure in three and every configure with Ceres CUDA on - and the shim never enters that code path at all, which the empty pkgRedirects directory in a configured build shows. The version file uses CMake's own AnyNewerVersion rather than Eigen's same-major rule, which is what declined Ceres' cross-major range and cost us a mixed-Eigen hunt in August. zlib is zlib-ng in compat mode, built during the configure into a prefix that FindZLIB is pointed at ahead of the system one. Built, not added as a subdirectory: libcurl puts ZLIB::ZLIB in CMAKE_REQUIRED_LIBRARIES and try_compile against an alias of an in-tree target is a hard error, so the viewer build breaks. A real archive has no such problem. It is forced position-independent, which the distro archive is and a default zlib-ng build is not - the xds plugin does not link otherwise. An existing installation still wins when it is asked for: -DZLIB_ROOT= and -DEigen3_DIR= configure as before and skip the fetches. About eighteen seconds on a first configure, nothing on a rebuild, and nothing added to the build itself. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011GxZqDiFP3KqriBhNdcR56