Progress towards compiling with dependencies
authorCarl Lerche <me@carllerche.com>
Thu, 1 May 2014 19:52:09 +0000 (12:52 -0700)
committerCarl Lerche <me@carllerche.com>
Thu, 1 May 2014 19:52:09 +0000 (12:52 -0700)
src/cargo/core/package.rs
src/cargo/ops/cargo_compile.rs
src/cargo/ops/cargo_rustc.rs
src/cargo/util/process_builder.rs

index f585b79476f8a032d3215c427e2e3009a9b51794..f3d1ba5ae511e81772c35eeb4f33933ac142e5ae 100644 (file)
@@ -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<core::Dependency>,
-    root: ~str,
+    root: Path,
     source: LibTarget,
     target: ~str
 }
 
 impl Package {
     pub fn new(name: &core::NameVer, deps: &Vec<core::Dependency>, 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 {
index 20e3c8aa2f16d4046d0f52998edc43595842a235..1ac6c523340987c2737c8b1394b1c9cf0fb3233d 100644 (file)
@@ -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()))
 }
index 2f9443cd03e83196c60779ff7c9a2a7b130789c0..a9f3768bacabf04f8641ba62da45a6a2562d09b7 100644 (file)
@@ -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<Option<core::Manifest>> {
index 0f500c501fe2f25aceb20276f837bd5551af5609..8d8958bfc561bec644ff5a8c6d89962e6776bca0 100644 (file)
@@ -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<ProcessOutput> {
     let mut config = ProcessConfig::new();