use std::slice;
+use std::path::Path;
use semver;
use core;
use core::{NameVer,Dependency};
*
* 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 {
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()
}
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 {
try!(source.download(names.as_slice()));
let packages = try!(source.get(names));
- println!("Packages: {}", packages);
Ok(())
//call_rustc(~BufReader::new(manifest_bytes.as_slice()))
}
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() {
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>> {
use std::os;
use std::path::Path;
+use std::io;
use std::io::process::{Process,ProcessConfig,ProcessOutput};
use ToCargoError;
use CargoResult;
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();