rust-lang / cargo

The Rust package manager
https://doc.rust-lang.org/cargo
Apache License 2.0
12.63k stars 2.4k forks source link

Export environment `OUT_DIR` to proc-macro. #14035

Open Neutron3529 opened 3 months ago

Neutron3529 commented 3 months ago

Problem

Currently, crates-io will yield such error:

error: failed to verify package tarball

Caused by:
  Source directory was modified by build.rs during cargo publish. Build scripts should not modify anything outside of OUT_DIR.
  Added: /me/rmin/target/package/rmin-examples-0.0.1/aaa.rmin.Rust.Functions.R

But since I only have a proc-macro and no build.rs, the OUT_DIR is not set. And since I need some of their output (generating R wrappers for further roxygen2 doc generation and further package loading), the output is necessary.

Is there some configuration that could make a OUT_DIR visible for proc-macros?

Proposed Solution

Currently, for build.rs, it could write output to OUT_DIR, but for proc-macro-only crate, such option does not exists.

Another solution is that adding a [cache] section in Cargo.toml, tell Cargo what file could be written. With this configure, we may have the ability to debug proc-macros by tell them writting down all the code they generates.

Notes

No response

epage commented 3 months ago

See also Internals discussion