Crates.io | dlprotoc |
lib.rs | dlprotoc |
version | 0.3.4+28.2 |
source | src |
created_at | 2024-06-02 19:11:53.148809 |
updated_at | 2024-10-08 21:19:29.300701 |
description | Downloads protoc Protocol Buffers compiler for Cargo builds |
homepage | https://github.com/evanj/dlprotoc-rs |
repository | https://github.com/evanj/dlprotoc-rs |
max_upload_size | |
id | 1259423 |
size | 67,927 |
This crate downloads the
official binary releases of protoc
from Google's protobuf Github repo,
verifies a SHA256 hash, then extracts it. It is intended to be used in Cargo build scripts (build.rs
) with Prost or Tonic, so you don't need to have protoc
installed to build Rust projects that use Protocol Buffers.
This fixes Cargo errors like the following:
error: failed to run custom build command for `example v0.1.0 (/home/user/example)`
Caused by:
process didn't exit successfully: `target/debug/build/example-3f5090329e3c4e4b/build-script-build` (exit status: 1)
--- stderr
Error: Custom { kind: NotFound, error: "Could not find `protoc`. If `protoc` is installed, try setting the `PROTOC` environment variable to the path of the `protoc` binary. To install it on Debian, run `apt-get install protobuf-compiler`. It is also available at https://github.com/protocolbuffers/protobuf/releases For more information: https://docs.rs/prost-build/#sourcing-protoc" }
An alternative is the protobuf-src crate, which compiles protoc from source. Unfortunately, compiling protoc is quite slow (approximately 2 minutes on my 4 core Intel desktop from 2020), and requires cmake
and a C++ compiler. This crate only requires Rust.
Add dlprotoc
to
In build.rs
, call dlprotoc::download_protoc()
before calling compile_protos(...)
:
fn main() -> Result<(), Box<dyn std::error::Error>> {
dlprotoc::download_protoc()?;
prost_build::compile_protos(&["src/example.proto"], &["src/"])?;
Ok(())
}
For a complete example, see protoc-cargo-example-rs.
This downloads pre-compiled executables on Github, which is somewhat dangerous. You need to trust:
The SHA256 hashes embedded in the source code are for protoc binaries that are non-malicious. The hashes are from Google's Github releases.
The crate does not have bugs, and will not run protoc binaries that have not been seen before.
Crates.io: Must give you a non-malicious version of this crate.
Google Protobuf maintainers: Uploads non-malicious protoc binaries to Github.
Run: cargo run -- (version e.g 27.0)
Append the printed struct definitions into the KNOWN_VERSIONS
array in versions.rs
.
Run make
to execute all checks.
Update the version in Cargo.toml
to include the version of protoc. E.g. "0.1.0+27.0"
.
Send a pull request.
make && cargo publish --dry-run
cargo publish
(VERSION=$(cargo pkgid | sed 's/.*@//'); git tag -a "v$VERSION" -m "release version $VERSION")
git push --tags