mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Clean up cargo-compile
This commit is contained in:
parent
adbab76fb0
commit
da0ec9a39b
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
|||||||
target
|
target
|
||||||
|
.cargo
|
||||||
|
@ -23,8 +23,8 @@ fn flags<T: FlagConfig + Decodable<FlagDecoder, HammerError>>() -> CLIResult<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn execute() -> CLIResult<()> {
|
fn execute() -> CLIResult<()> {
|
||||||
compile(try!(flags::<Options>()).manifest_path.as_slice()).to_result(|_|
|
compile(try!(flags::<Options>()).manifest_path.as_slice()).to_result(|err|
|
||||||
CLIError::new("Compilation failed", None, 1))
|
CLIError::new(format!("Compilation failed: {}", err), None, 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
use core;
|
use core::NameVer;
|
||||||
|
|
||||||
#[deriving(Eq,Clone,Show,Encodable,Decodable)]
|
#[deriving(Eq,Clone,Show,Encodable,Decodable)]
|
||||||
pub struct Dependency {
|
pub struct Dependency {
|
||||||
name: core::NameVer
|
name: NameVer
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Dependency {
|
impl Dependency {
|
||||||
pub fn new(name: &str) -> Dependency {
|
pub fn new(name: &str) -> Dependency {
|
||||||
Dependency { name: core::NameVer::new(name.to_owned(), "1.0.0") }
|
Dependency { name: NameVer::new(name.to_owned(), "1.0.0") }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_namever(name: &core::NameVer) -> Dependency {
|
pub fn with_namever(name: &NameVer) -> Dependency {
|
||||||
Dependency { name: name.clone() }
|
Dependency { name: name.clone() }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_name_and_version(name: &str, version: &str) -> Dependency {
|
pub fn with_name_and_version(name: &str, version: &str) -> Dependency {
|
||||||
Dependency { name: core::NameVer::new(name, version) }
|
Dependency { name: NameVer::new(name, version) }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_namever<'a>(&'a self) -> &'a core::NameVer {
|
pub fn get_namever<'a>(&'a self) -> &'a NameVer {
|
||||||
&self.name
|
&self.name
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,3 +26,13 @@ impl Dependency {
|
|||||||
self.name.get_name()
|
self.name.get_name()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait DependencyNameVers {
|
||||||
|
fn namevers(&self) -> Vec<NameVer>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DependencyNameVers for Vec<Dependency> {
|
||||||
|
fn namevers(&self) -> Vec<NameVer> {
|
||||||
|
self.iter().map(|dep| dep.get_namever().clone()).collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
use collections::HashMap;
|
use collections::HashMap;
|
||||||
|
use std::fmt;
|
||||||
|
use std::fmt::{Show,Formatter};
|
||||||
use core::{
|
use core::{
|
||||||
Dependency,
|
Dependency,
|
||||||
NameVer,
|
NameVer,
|
||||||
@ -16,7 +18,13 @@ pub struct Manifest {
|
|||||||
target_dir: Path,
|
target_dir: Path,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[deriving(Clone,Eq)]
|
impl Show for Manifest {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||||
|
write!(f.buf, "Manifest({}, authors={}, targets={}, target_dir={})", self.summary, self.authors, self.targets, self.target_dir.display())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[deriving(Show,Clone,Eq)]
|
||||||
pub enum TargetKind {
|
pub enum TargetKind {
|
||||||
LibTarget,
|
LibTarget,
|
||||||
BinTarget
|
BinTarget
|
||||||
@ -29,6 +37,12 @@ pub struct Target {
|
|||||||
path: Path
|
path: Path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Show for Target {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||||
|
write!(f.buf, "{}(name={}, path={})", self.kind, self.name, self.path.display())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Manifest {
|
impl Manifest {
|
||||||
pub fn new(summary: &Summary, targets: &[Target], target_dir: &Path) -> Manifest {
|
pub fn new(summary: &Summary, targets: &[Target], target_dir: &Path) -> Manifest {
|
||||||
Manifest {
|
Manifest {
|
||||||
|
@ -34,5 +34,5 @@ pub mod package;
|
|||||||
pub mod dependency;
|
pub mod dependency;
|
||||||
pub mod manifest;
|
pub mod manifest;
|
||||||
pub mod resolver;
|
pub mod resolver;
|
||||||
mod summary;
|
pub mod summary;
|
||||||
mod registry;
|
mod registry;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
use semver;
|
use semver;
|
||||||
|
use std::fmt;
|
||||||
|
use std::fmt::{Show,Formatter};
|
||||||
use serialize::{
|
use serialize::{
|
||||||
Encodable,
|
Encodable,
|
||||||
Encoder,
|
Encoder,
|
||||||
@ -6,7 +8,7 @@ use serialize::{
|
|||||||
Decoder
|
Decoder
|
||||||
};
|
};
|
||||||
|
|
||||||
#[deriving(Clone,Eq,Show,Ord)]
|
#[deriving(Clone,Eq,Ord)]
|
||||||
pub struct NameVer {
|
pub struct NameVer {
|
||||||
name: ~str,
|
name: ~str,
|
||||||
version: semver::Version
|
version: semver::Version
|
||||||
@ -26,6 +28,12 @@ impl NameVer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Show for NameVer {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||||
|
write!(f.buf, "{} v{}", self.name, self.version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<E, D: Decoder<E>> Decodable<D,E> for NameVer {
|
impl<E, D: Decoder<E>> Decodable<D,E> for NameVer {
|
||||||
fn decode(d: &mut D) -> Result<NameVer, E> {
|
fn decode(d: &mut D) -> Result<NameVer, E> {
|
||||||
let vector: Vec<~str> = try!(Decodable::decode(d));
|
let vector: Vec<~str> = try!(Decodable::decode(d));
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
use std::slice;
|
use std::slice;
|
||||||
|
use std::fmt;
|
||||||
|
use std::fmt::{Show,Formatter};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use core::{
|
use core::{
|
||||||
Dependency,
|
Dependency,
|
||||||
@ -25,6 +27,10 @@ impl Package {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_dependency(&self) -> Dependency {
|
||||||
|
Dependency::with_namever(self.manifest.get_summary().get_name_ver())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_manifest<'a>(&'a self) -> &'a Manifest {
|
pub fn get_manifest<'a>(&'a self) -> &'a Manifest {
|
||||||
&self.manifest
|
&self.manifest
|
||||||
}
|
}
|
||||||
@ -58,6 +64,12 @@ impl Package {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Show for Package {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||||
|
write!(f.buf, "{}", self.get_summary().get_name_ver())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct PackageSet {
|
pub struct PackageSet {
|
||||||
packages: ~[Package]
|
packages: ~[Package]
|
||||||
}
|
}
|
||||||
|
@ -29,3 +29,18 @@ impl Summary {
|
|||||||
self.dependencies.as_slice()
|
self.dependencies.as_slice()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait SummaryVec {
|
||||||
|
fn names(&self) -> Vec<~str>;
|
||||||
|
fn deps(&self) -> Vec<Dependency>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SummaryVec for Vec<Summary> {
|
||||||
|
fn names(&self) -> Vec<~str> {
|
||||||
|
self.iter().map(|summary| summary.name_ver.get_name().to_owned()).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deps(&self) -> Vec<Dependency> {
|
||||||
|
self.iter().map(|summary| Dependency::with_namever(summary.get_name_ver())).collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,18 +14,20 @@
|
|||||||
* b. Compile each dependency in order, passing in the -L's pointing at each previously compiled dependency
|
* b. Compile each dependency in order, passing in the -L's pointing at each previously compiled dependency
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use std::vec::Vec;
|
|
||||||
use std::os;
|
use std::os;
|
||||||
use util::config;
|
use util::config;
|
||||||
use util::config::{all_configs,ConfigValue};
|
use util::config::{all_configs,ConfigValue};
|
||||||
use core::{PackageSet,Source,Dependency,NameVer};
|
use core::{PackageSet,Source};
|
||||||
use core::resolver::resolve;
|
use core::resolver::resolve;
|
||||||
use sources::path::PathSource;
|
use sources::path::PathSource;
|
||||||
use ops::cargo_rustc;
|
use ops::cargo_rustc;
|
||||||
|
use ops::cargo_read_manifest::read_manifest;
|
||||||
use core::errors::{CargoError,CLIError,CLIResult,ToResult};
|
use core::errors::{CargoError,CLIError,CLIResult,ToResult};
|
||||||
|
use core::summary::SummaryVec;
|
||||||
|
|
||||||
pub fn compile(manifest_path: &str) -> CLIResult<()> {
|
pub fn compile(manifest_path: &str) -> CLIResult<()> {
|
||||||
// TODO: Fix
|
let root_dep = try!(read_manifest(manifest_path)).to_dependency();
|
||||||
|
|
||||||
let configs = try!(all_configs(os::getcwd()).to_result(|err: CargoError|
|
let configs = try!(all_configs(os::getcwd()).to_result(|err: CargoError|
|
||||||
CLIError::new("Could not load configurations", Some(err.to_str()), 1)));
|
CLIError::new("Could not load configurations", Some(err.to_str()), 1)));
|
||||||
|
|
||||||
@ -37,25 +39,21 @@ pub fn compile(manifest_path: &str) -> CLIResult<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let source = PathSource::new(paths);
|
let source = PathSource::new(paths);
|
||||||
let summaries = try!(source.list().to_result(|err| CLIError::new(format!("Unable to list packages from {}", source), Some(err.to_str()), 1)));
|
let summaries = try!(source.list().to_result(|err|
|
||||||
let names: Vec<NameVer> = summaries.iter().map(|s| s.get_name_ver().clone()).collect();
|
CLIError::new(format!("Unable to list packages from {}", source), Some(err.to_str()), 1)));
|
||||||
|
|
||||||
// This does not need to happen
|
let resolved = try!(resolve([root_dep], &summaries).to_result(|err: CargoError|
|
||||||
// try!(source.download(names.as_slice()).to_result(|err| CLIError::new(format!("Unable to download packages from {}", source), Some(err.to_str()), 1)));
|
|
||||||
|
|
||||||
let deps: Vec<Dependency> = summaries.iter().map(|summary| {
|
|
||||||
Dependency::with_namever(summary.get_name_ver())
|
|
||||||
}).collect();
|
|
||||||
|
|
||||||
let packages = try!(source.get(names.as_slice()).to_result(|err|
|
|
||||||
CLIError::new(format!("Unable to get packages from {} for {}", source, names), Some(err.to_str()), 1)));
|
|
||||||
|
|
||||||
let registry = PackageSet::new(packages.as_slice());
|
|
||||||
|
|
||||||
let resolved = try!(resolve(deps.as_slice(), ®istry).to_result(|err: CargoError|
|
|
||||||
CLIError::new("Unable to resolve dependencies", Some(err.to_str()), 1)));
|
CLIError::new("Unable to resolve dependencies", Some(err.to_str()), 1)));
|
||||||
|
|
||||||
try!(cargo_rustc::compile(®istry));
|
try!(source.download(resolved.as_slice()).to_result(|err|
|
||||||
|
CLIError::new(format!("Unable to download packages from {}", source), Some(err.to_str()), 1)));
|
||||||
|
|
||||||
|
let packages = try!(source.get(resolved.as_slice()).to_result(|err|
|
||||||
|
CLIError::new(format!("Unable to get packages from {} for {}", source, summaries.names()), Some(err.to_str()), 1)));
|
||||||
|
|
||||||
|
let package_set = PackageSet::new(packages.as_slice());
|
||||||
|
|
||||||
|
try!(cargo_rustc::compile(&package_set));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ pub fn compile(pkgs: &core::PackageSet) -> CLIResult<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
for pkg in sorted.iter() {
|
for pkg in sorted.iter() {
|
||||||
|
println!("Compiling {}", pkg);
|
||||||
try!(compile_pkg(pkg, pkgs));
|
try!(compile_pkg(pkg, pkgs));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ fn rustc(root: &Path, target: &core::Target, dest: &Path, deps: &[core::Package]
|
|||||||
.args(args.as_slice())
|
.args(args.as_slice())
|
||||||
.exec()
|
.exec()
|
||||||
.to_result(|err|
|
.to_result(|err|
|
||||||
CLIError::new(format!("Couldn't execute rustc {}", args.connect(" ")), Some(err.to_str()), 1)));
|
CLIError::new(format!("Couldn't execute `rustc {}` in `{}`", args.connect(" "), root.display()), Some(err.to_str()), 1)));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user