This file applies to all changes under thirdparty/, including patches applied to vendored projects.
When locating a header, library, or CMake package provided by the Doris third-party build, search only inside the Doris third-party install directory. Do not allow CMake to fall back to system directories, user-installed packages, environment-provided prefixes, or another checkout.
The third-party build sets CMAKE_INSTALL_PREFIX to ${TP_INSTALL_DIR}. Prefer that existing value instead of introducing another variable for the same directory.
For find_path and find_library:
PATHS below ${CMAKE_INSTALL_PREFIX}.NO_DEFAULT_PATH.NO_CACHE and a Doris-specific result variable when supported, so a stale CMake cache cannot select a path outside the Doris third-party directory.REQUIRED unless absence is an explicitly supported configuration.Example:
find_path(DORIS_FOO_INCLUDE_DIR NAMES foo/foo.h PATHS "${CMAKE_INSTALL_PREFIX}/include" NO_DEFAULT_PATH NO_CACHE REQUIRED) find_library(DORIS_FOO_LIBRARY NAMES foo PATHS "${CMAKE_INSTALL_PREFIX}/lib" "${CMAKE_INSTALL_PREFIX}/lib64" NO_DEFAULT_PATH NO_CACHE REQUIRED)
Apply the same rule to find_package: provide only package paths rooted under ${CMAKE_INSTALL_PREFIX}, use NO_DEFAULT_PATH, and ensure a cached <Package>_DIR cannot point outside that directory.
Do not rely on an unconstrained find_path, find_library, find_package, CMAKE_PREFIX_PATH, the host PATH, or platform default search paths for a Doris-managed dependency. A dependency missing from the Doris third-party directory must fail configuration instead of silently linking a different installation.
System toolchain components and dependencies intentionally supplied by the operating system are outside this rule, but that intent must be explicit in the surrounding build configuration.
build-thirdparty.sh clears ambient CMake code-injection, vcpkg, and Conda variables immediately after loading env.sh. Keep this sanitization before any third-party download or build command, and add newly supported package-manager or CMake injection variables when they could redirect dependency resolution outside the Doris third-party directory.
Never source or use . to execute a script from an extracted third-party source tree. Invoke upstream scripts as executables or through bash/sh so they run in a child process. Keep each build_<package> function invocation inside its package subshell in the main build loop. This boundary prevents exports, shell options, traps, functions, and working-directory changes made by one package from leaking into later package builds, including if an upstream script is accidentally sourced in the future.
Only repository-owned initialization files such as env.sh and thirdparty/vars.sh may be sourced, and they must be sourced before package builds begin.