[CMake] Don't override find_package() for builtins#22604
Open
guitargeek wants to merge 2 commits into
Open
Conversation
builtins/zstd defined the imported ZSTD::ZSTD target but never tied it to the BUILTIN_ZSTD ExternalProject that actually produces libzstd.a. As a result a parallel or targeted build (e.g. building only the Core target) could try to link the archive before it exists. Add the dependency edge, consistent with what builtins/zlib already does for BUILTIN_ZLIB. 🤖 Done with the help of [Claude Code](https://claude.com/claude-code) (Claude Opus 4.8)
find_package() for builtins
Test Results 21 files 21 suites 3d 6h 2m 46s ⏱️ For more details on these failures, see this check. Results for commit 448ffc3. ♻️ This comment has been updated with latest results. |
Comment on lines
+83
to
+84
| set(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR} CACHE PATH "Path to the builtin zlib headers" FORCE) | ||
| set(ZLIB_LIBRARY ${ROOT_ZLIB_LIBRARY} CACHE FILEPATH "Path to the builtin zlib library" FORCE) |
Collaborator
There was a problem hiding this comment.
Suggested change
| set(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR} CACHE PATH "Path to the builtin zlib headers" FORCE) | |
| set(ZLIB_LIBRARY ${ROOT_ZLIB_LIBRARY} CACHE FILEPATH "Path to the builtin zlib library" FORCE) | |
| set(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR} PARENT_SCOPE) | |
| set(ZLIB_LIBRARY ${ROOT_ZLIB_LIBRARY} PARENT_SCOPE) |
for consistency with above?
Contributor
Author
There was a problem hiding this comment.
Ok I'll try! As long as FindPNG (which does find_package(ZLIB) internally) picks up the builtin ZLIB we're good. We just need to set the right variables so find_package(ZLIB) knows ZLIB is already there, and it will not look for it again and find the system ZLIB.
ferdymercury
approved these changes
Jun 14, 2026
ferdymercury
left a comment
Collaborator
There was a problem hiding this comment.
Thanks, just a minor nitpick
ROOT redefined the global find_package() command to no-op for its builtins, so that sub-projects added later (notably the bundled LLVM) and transitive find modules (e.g. FindPNG -> find_package(ZLIB)) would reuse ROOT's builtin imported targets instead of re-discovering a system copy. This relied on undocumented CMake behaviour and recursed infinitely under tools that override find_package() themselves, such as vcpkg (root-project#8633). The override only ever did real work for ZLIB and zstd: every other name in ROOT_BUILTINS was unnecessary (no find_package() consumer downstream). Both are now handled directly, so the override and the ROOT_BUILTINS list can be removed: * ZLIB (used by core/zip's find_package(ZLIB REQUIRED) and the transitive FindPNG -> find_package(ZLIB) of the asimage build): builtins/zlib pre-seeds the singular cache variables ZLIB_LIBRARY and ZLIB_INCLUDE_DIR that FindZLIB.cmake checks, so find_package() short-circuits to the builtin and keeps the ZLIB::ZLIB target. This also avoids the "FORCE specified without CACHE" error from select_library_configurations() that a real FindPNG -> FindZLIB chain would otherwise hit. * zstd (used only by the bundled LLVM): interpreter/CMakeLists.txt sets LLVM_ENABLE_ZSTD=OFF (and LLVM_ENABLE_ZLIB=OFF) for builtin builds, so LLVM never searches for the system copy. We can't point LLVM at the builtins instead, as it probes them with a configure-time compile/link check that the not-yet-built ExternalProject can't pass anyway. This makes ROOT compatible with vcpkg and other dependency providers without changing behaviour: in builtin builds LLVM is still built without zlib/zstd, and a system build is unaffected since find_package() is no longer shadowed. Closes root-project#8633. 🤖 Done with the help of [Claude Code](https://claude.com/claude-code) (Claude Opus 4.8)
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.
Targeted changes to make the
find_packageoverride unnecessary (more detail in inline comments and commit messages).Closes #8633.
🤖 Done with the help of Claude Code (Claude Opus 4.8)