From: Carl Lerche Date: Thu, 1 May 2014 19:52:09 +0000 (-0700) Subject: Progress towards compiling with dependencies X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~1098 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5accea9f81f1ff3182594a813ad959a6f843b97c;p=cargo.git Progress towards compiling with dependencies --- diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index f585b7947..f3d1ba5ae 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -1,4 +1,5 @@ use std::slice; +use std::path::Path; use semver; use core; use core::{NameVer,Dependency}; @@ -13,18 +14,24 @@ use util::graph; * * This differs from core::Project */ -#[deriving(Clone,Eq,Show)] +#[deriving(Clone,Eq)] pub struct Package { name_ver: core::NameVer, deps: Vec, - root: ~str, + root: Path, source: LibTarget, target: ~str } impl Package { pub fn new(name: &core::NameVer, deps: &Vec, root: &str, source: &LibTarget, target: &str) -> Package { - Package { name_ver: name.clone(), deps: deps.clone(), root: root.to_owned(), source: source.clone(), target: target.to_owned() } + Package { + name_ver: name.clone(), + deps: deps.clone(), + root: Path::new(root), + source: source.clone(), + target: target.to_owned() + } } pub fn from_manifest(manifest: &Manifest) -> Package { @@ -33,7 +40,7 @@ impl Package { Package { name_ver: core::NameVer::new(project.name.as_slice(), project.version.as_slice()), deps: manifest.dependencies.clone(), - root: manifest.root.clone(), + root: Path::new(manifest.root.as_slice()), source: manifest.lib.as_slice().get(0).unwrap().clone(), target: manifest.target.clone() } @@ -47,8 +54,8 @@ impl Package { self.name_ver.get_version() } - pub fn get_root<'a>(&'a self) -> &'a str { - self.root.as_slice() + pub fn get_root<'a>(&'a self) -> &'a Path { + &self.root } pub fn get_source<'a>(&'a self) -> &'a LibTarget { diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 20e3c8aa2..1ac6c5233 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -56,7 +56,6 @@ pub fn compile() -> CargoResult<()> { try!(source.download(names.as_slice())); let packages = try!(source.get(names)); - println!("Packages: {}", packages); Ok(()) //call_rustc(~BufReader::new(manifest_bytes.as_slice())) } diff --git a/src/cargo/ops/cargo_rustc.rs b/src/cargo/ops/cargo_rustc.rs index 2f9443cd0..a9f3768ba 100644 --- a/src/cargo/ops/cargo_rustc.rs +++ b/src/cargo/ops/cargo_rustc.rs @@ -5,6 +5,7 @@ use std::io::process::{Process,ProcessConfig,InheritFd}; use std::path::Path; use {CargoResult,CargoError,ToCargoError,NoFlags,core}; use core; +use util; pub fn compile(pkgs: &core::PackageSet) { let sorted = match pkgs.sort() { @@ -19,10 +20,25 @@ pub fn compile(pkgs: &core::PackageSet) { fn compile_pkg(pkg: &core::Package, pkgs: &core::PackageSet) { + let root = pkg.get_root(); + mk_target(pkg.get_root(), &Path::new(pkg.get_target())); } -fn rustc() { +fn mk_target(root: &Path, target: &Path) -> io::IoResult<()> { + let target = root.join(target); + io::fs::mkdir_recursive(&target, io::UserRWX) +} + +fn rustc(root: &Path, target: &core::LibTarget) { + util::process("rustc") + .cwd(root.clone()) + .args(rustc_args(root, target)) + .exec(); +} + +fn rustc_args(root: &Path, target: &core::LibTarget) -> ~[~str] { + ~[] } pub fn execute(_: NoFlags, manifest: core::Manifest) -> CargoResult> { diff --git a/src/cargo/util/process_builder.rs b/src/cargo/util/process_builder.rs index 0f500c501..8d8958bfc 100644 --- a/src/cargo/util/process_builder.rs +++ b/src/cargo/util/process_builder.rs @@ -1,5 +1,6 @@ use std::os; use std::path::Path; +use std::io; use std::io::process::{Process,ProcessConfig,ProcessOutput}; use ToCargoError; use CargoResult; @@ -32,6 +33,28 @@ impl ProcessBuilder { self } + pub fn exec(&self) -> io::IoResult<()> { + let mut config = ProcessConfig::new(); + + config.program = self.program.as_slice(); + config.args = self.args.as_slice(); + config.cwd = Some(&self.cwd); + + let mut process = try!(Process::configure(config)); + let exit = process.wait(); + + if exit.success() { + Ok(()) + } + else { + Err(io::IoError { + kind: io::OtherIoError, + desc: "process did not exit successfully", + detail: None + }) + } + } + pub fn exec_with_output(&self) -> CargoResult { let mut config = ProcessConfig::new();