1
0
Fork 0
mirror of https://github.com/librespot-org/librespot.git synced 2025-10-03 01:39:28 +02:00

Use the protobuf_build crate to simplify build process.

Removes external dependency on rust-protobuf, which prevents version
mismatch between the runtime and the compiler.
This commit is contained in:
Paul Lietar 2016-01-12 23:10:57 +00:00
parent 2eeb1c9817
commit 3c29d744a9
3 changed files with 32 additions and 46 deletions

View file

@ -8,3 +8,5 @@ build = "build.rs"
mod_path = "~0.1.6"
protobuf = "~1.0.10"
[build-dependencies.protobuf_build]
git = "https://github.com/plietar/rust-protobuf-build.git"

View file

@ -1,50 +1,22 @@
extern crate protobuf_build;
use std::env;
use std::process::{Command, Stdio};
use std::path::{Path,PathBuf};
#[derive(Debug)]
enum ProtobufError {
IoError(::std::io::Error),
Other
}
impl std::convert::From<::std::io::Error> for ProtobufError {
fn from(e: ::std::io::Error) -> ProtobufError {
ProtobufError::IoError(e)
}
}
fn compile(prefix : &Path, files : &[&Path]) -> Result<(),ProtobufError>{
let mut c = Command::new("protoc");
c.arg("--rust_out").arg(env::var("OUT_DIR").unwrap())
.arg("--proto_path").arg(prefix.to_str().unwrap());
for f in files.iter() {
c.arg(f.to_str().unwrap());
}
//c.stdout(Stdio::inherit());
c.stderr(Stdio::inherit());
let mut p = try!(c.spawn());
let r = try!(p.wait());
return match r.success() {
true => Ok(()),
false => Err(ProtobufError::Other),
};
}
use std::path::PathBuf;
fn main() {
let root = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap());
let root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let out = PathBuf::from(env::var("OUT_DIR").unwrap());
let proto = root.join("proto");
compile(&proto, &[
&proto.join("keyexchange.proto"),
&proto.join("authentication.proto"),
&proto.join("mercury.proto"),
&proto.join("metadata.proto"),
&proto.join("pubsub.proto"),
&proto.join("spirc.proto"),
]).unwrap();
let mut compiler = protobuf_build::Compiler::new(&proto, &out);
for file in &["keyexchange.proto",
"authentication.proto",
"mercury.proto",
"metadata.proto",
"pubsub.proto",
"spirc.proto"] {
compiler.compile(file).unwrap();
}
}