Description
Problem
When sources aren't in a subdirectory of the cargo manifest, cargo doc
fails to detect changes to those sources. The issue only occurs with cargo doc
(not check or build). It isn't affected by the working directory (using --manifest-path
), and using an absolute vs. relative path for the source makes no difference.
Steps
Use the following directory structure and Cargo.toml
with an empty lib.rs
:
manifest
└── Cargo.toml
lib.rs
[package]
name = "foo"
version = "0.1.0"
edition = "2021"
[lib]
path = "../lib.rs"
Running cargo doc --manifest-path=manifest/Cargo.toml -v
should succeed. Now add a syntax error to lib.rs
. Subsequent cargo doc
runs will say that the crate is Fresh
and exit without detecting the syntax error.
Removing manifest/target
manually or by cargo clean
ing will force a rebuild, but changes to lib.rs
seem to never cause rebuilds.
Possible Solution(s)
No response
Notes
This behavior was encountered on Fuchsia, where we primarily use a different build system (GN+ninja) but have experimental support for generating cargo manifests for rust targets. The Cargo.toml
s are generated in an out directory and contain absolute paths pointing to the source root for each crate. We initially thought the issue had to do with the absolute paths or our use of symlinks, but it appears that change detection for cargo doc
is broken for ANY sources that aren't in the same dir or subdirs of the manifest.
Version
Verified the behavior with both nightly `cargo 1.72.0-nightly (49b6d9e17 2023-06-09)` and stable `cargo 1.70.0 (ec8a8a0ca 2023-04-25)`