The vendor crate is rsc
. I need to vendor his crate because:
- His GitHub repo is updated to version = "3.0.0" but he didn't publish it on crates.io.
- He didn't implement his
Num
trait forisize
which I need, so might be just easier to vendor and add the implementation for it myself.
My own crate is typenum-consts
(note the branch is feature/computer
).
In my lib.rs
, I have this line:
#[path = "../vendors/rsc/src/lib.rs"]
mod rsc;
This is because, the directory looks like this:
Cargo.toml
- src
- lib.rs
- vendors
- rsc
- lib.rs
I cannot use rsc;
without doing the #[path = "..."]
attribute.
With cargo check
, cargo can find "../vendors/rsc/src/lib.rs"
and everything works well.
But when I want to do cargo package
, I get a compile error that "../vendors/rsc/src/lib.rs"
is not found.
This is because, the build directory does not have the vendors
crates copied over.
So I wrote a build.rs
to copy the files.
So now it successfully copies the vendors crates at the right directory, it compiles but cargo publish
gives me this 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: /root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/.git
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/.gitignore
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/CHANGELOG.md
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/Cargo.lock
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/Cargo.toml
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/LICENSE
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/README.md
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/benches
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/benches/benches.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/grammar
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/bin
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/bin/main.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/expr.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/interpreter.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/lib.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/parser.rs
/root/rust_project/typenum-consts/target/package/typenum-consts-0.1.0/vendors/rsc/src/tokenizer.rs
And cargo check
now cannot find the "../vendors/rsc/src/lib.rs"
because the build.rs
script didn't move it correctly when check
is invoked, lol.