mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-25 11:14:46 +00:00

Hi Everyone! This is PR for the implementation of the first milestone of [GSoC Project : Build Script Delegation](https://summerofcode.withgoogle.com/programs/2025/projects/nUt4PdAA) This will provide actual implementation for #15630 ### What does this PR try to resolve? Now, multiple build scripts are parsed, this PR aims to implement the functioning the feature. This PR will allow users to use multiple build scripts, and is backward compatible with single script as well as boolean values. **Motivation :** This will help users to maintain separate smaller and cleaner build scripts instead of one large build script. This is also necessary for build script delegation. Deferred - Accessing each build script's `OUT_DIR`: This will be handled in a follow up PR. For now, each build script writes to its own `OUT_DIR` and `OUT_DIR` for the regular build targets is set to the build script with the **lexicographically largest** name.. - User control over which build script wins in a conflict. This will be handled in a follow up PR. If two build scripts write to the same env variable, which gets applied to the binary? Currently, its the build script with the **lexicographically largest** name. This makes it deterministic. With some futzing, users can control this for now. However, with build script delegation, users won't be able to control this. We likely want it based off of the order the user assigns into the build script array. - Something about linking a C library is actually preferring **lexicographically smallest** name. We should handle conflicts consistently. We need to dig into what parts are doing it based on smallest and make sure that whatever priority scheme we use for env variables applies here as well. ### How to test and review this PR? There is a feature gate `multiple-build-scripts` that can be passed via `cargo-features` in `Cargo.toml`. So, you have to add ```toml cargo-features = ["multiple-build-scripts"] ``` Preferably on the top of the `Cargo.toml` and use nightly toolchain to use the feature