diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index 703fcff83ca..c08fa0723cb 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -80,6 +80,7 @@ impl Package { pub fn summary(&self) -> &Summary { self.manifest.summary() } pub fn targets(&self) -> &[Target] { self.manifest().targets() } pub fn version(&self) -> &Version { self.package_id().version() } + pub fn authors(&self) -> &Vec { &self.manifest.metadata().authors } pub fn publish(&self) -> bool { self.manifest.publish() } pub fn has_custom_build(&self) -> bool { diff --git a/src/cargo/ops/cargo_rustc/compilation.rs b/src/cargo/ops/cargo_rustc/compilation.rs index b71c504c65a..f5fd87ddea2 100644 --- a/src/cargo/ops/cargo_rustc/compilation.rs +++ b/src/cargo/ops/cargo_rustc/compilation.rs @@ -120,6 +120,7 @@ impl<'cfg> Compilation<'cfg> { .env("CARGO_PKG_NAME", &pkg.name()) .env("CARGO_PKG_DESCRIPTION", metadata.description.as_ref().unwrap_or(&String::new())) .env("CARGO_PKG_HOMEPAGE", metadata.homepage.as_ref().unwrap_or(&String::new())) + .env("CARGO_PKG_AUTHORS", &pkg.authors().join(":")) .cwd(pkg.root()); Ok(cmd) } diff --git a/src/doc/environment-variables.md b/src/doc/environment-variables.md index 8f77b5c9122..1f23ce68eca 100644 --- a/src/doc/environment-variables.md +++ b/src/doc/environment-variables.md @@ -45,6 +45,7 @@ let version = env!("CARGO_PKG_VERSION"); * `CARGO_PKG_VERSION_MINOR` - The minor version of your package. * `CARGO_PKG_VERSION_PATCH` - The patch version of your package. * `CARGO_PKG_VERSION_PRE` - The pre-release version of your package. +* `CARGO_PKG_AUTHORS` - Colon seperated list of authors from the manifest of your package. # Environment variables Cargo sets for build scripts diff --git a/tests/test_cargo_compile.rs b/tests/test_cargo_compile.rs index 131f0820940..f761cd5fd1b 100644 --- a/tests/test_cargo_compile.rs +++ b/tests/test_cargo_compile.rs @@ -784,6 +784,44 @@ test!(crate_env_vars { execs().with_status(0)); }); +test!(crate_authors_env_vars { + let p = project("foo") + .file("Cargo.toml", r#" + [project] + name = "foo" + version = "0.5.1-alpha.1" + authors = ["wycats@example.com", "neikos@example.com"] + "#) + .file("src/main.rs", r#" + extern crate foo; + + static AUTHORS: &'static str = env!("CARGO_PKG_AUTHORS"); + + fn main() { + let s = "wycats@example.com:neikos@example.com"; + assert_eq!(AUTHORS, foo::authors()); + println!("{}", AUTHORS); + assert_eq!(s, AUTHORS); + } + "#) + .file("src/lib.rs", r#" + pub fn authors() -> String { + format!("{}", env!("CARGO_PKG_AUTHORS")) + } + "#); + + println!("build"); + assert_that(p.cargo_process("build").arg("-v"), execs().with_status(0)); + + println!("bin"); + assert_that(process(&p.bin("foo")), + execs().with_stdout(&format!("wycats@example.com:neikos@example.com"))); + + println!("test"); + assert_that(p.cargo("test").arg("-v"), + execs().with_status(0)); +}); + // this is testing that src/.rs still works (for now) test!(many_crate_types_old_style_lib_location { let mut p = project("foo");