Преглед изворни кода

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.
Paul Lietar пре 9 година
родитељ
комит
3c29d744a9
3 измењених фајлова са 32 додато и 46 уклоњено
  1. 15 3
      Cargo.lock
  2. 2 0
      protocol/Cargo.toml
  3. 15 43
      protocol/build.rs

+ 15 - 3
Cargo.lock

@@ -12,7 +12,7 @@ dependencies = [
  "librespot-protocol 0.1.0",
  "num 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
  "portaudio 0.1.2 (git+https://github.com/mvdnes/portaudio-rs)",
- "protobuf 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "protobuf_macros 0.1.1 (git+https://github.com/plietar/rust-protobuf-macros.git)",
  "rand 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "rpassword 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -213,7 +213,8 @@ name = "librespot-protocol"
 version = "0.1.0"
 dependencies = [
  "mod_path 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "protobuf 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf_build 0.1.1 (git+https://github.com/plietar/rust-protobuf-build.git)",
 ]
 
 [[package]]
@@ -279,9 +280,20 @@ dependencies = [
 
 [[package]]
 name = "protobuf"
-version = "1.0.10"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "protobuf_build"
+version = "0.1.1"
+source = "git+https://github.com/plietar/rust-protobuf-build.git#4859623ecb8d4208f955f0c5758b49630d007cd2"
+dependencies = [
+ "gcc 0.3.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "protobuf 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "protobuf_macros"
 version = "0.1.1"

+ 2 - 0
protocol/Cargo.toml

@@ -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"

+ 15 - 43
protocol/build.rs

@@ -1,50 +1,22 @@
-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());
+extern crate protobuf_build;
 
-    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::env;
+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();
+    }
 }