diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 68aeed3f77c..b7554b8f428 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -22,7 +22,7 @@ labels: C-bug **Notes** -Output of `cargo version`: +Output of `cargo version --verbose`: diff --git a/Cargo.toml b/Cargo.toml index 2185d11e0e5..c9fa27f5eaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,8 @@ cargo-platform = { path = "crates/cargo-platform", version = "0.1.2" } cargo-util = { path = "crates/cargo-util", version = "0.1.1" } crates-io = { path = "crates/crates-io", version = "0.33.0" } crossbeam-utils = "0.8" -curl = { version = "0.4.38", features = ["http2"] } -curl-sys = "0.4.48" +curl = { version = "0.4.39", features = ["http2"] } +curl-sys = "0.4.49" env_logger = "0.9.0" pretty_env_logger = { version = "0.4", optional = true } anyhow = "1.0" @@ -48,6 +48,7 @@ libgit2-sys = "0.12.24" memchr = "2.1.3" num_cpus = "1.0" opener = "0.5" +os_info = "3.0.7" percent-encoding = "2.0" rustfix = "0.6.0" semver = { version = "1.0.3", features = ["serde"] } diff --git a/build.rs b/build.rs index 8c33c72b098..68865b58fcf 100644 --- a/build.rs +++ b/build.rs @@ -5,6 +5,10 @@ use std::path::Path; fn main() { compress_man(); + println!( + "cargo:rustc-env=RUST_HOST_TARGET={}", + std::env::var("TARGET").unwrap() + ); } fn compress_man() { diff --git a/src/bin/cargo/cli.rs b/src/bin/cargo/cli.rs index 627d2ea0594..81e9f1262ce 100644 --- a/src/bin/cargo/cli.rs +++ b/src/bin/cargo/cli.rs @@ -4,6 +4,7 @@ use cargo::{self, drop_print, drop_println, CliResult, Config}; use clap::{AppSettings, Arg, ArgMatches}; use itertools::Itertools; use std::collections::HashMap; +use std::fmt::Write; use super::commands; use super::list_commands; @@ -173,10 +174,64 @@ pub fn get_version_string(is_verbose: bool) -> String { version_string.push_str(&format!("commit-date: {}\n", ci.commit_date)); } } + writeln!(version_string, "host: {}", env!("RUST_HOST_TARGET")).unwrap(); + add_libgit2(&mut version_string); + add_curl(&mut version_string); + add_ssl(&mut version_string); + writeln!(version_string, "os: {}", os_info::get()).unwrap(); } version_string } +fn add_libgit2(version_string: &mut String) { + let git2_v = git2::Version::get(); + let lib_v = git2_v.libgit2_version(); + let vendored = if git2_v.vendored() { + format!("vendored") + } else { + format!("system") + }; + writeln!( + version_string, + "libgit2: {}.{}.{} (sys:{} {})", + lib_v.0, + lib_v.1, + lib_v.2, + git2_v.crate_version(), + vendored + ) + .unwrap(); +} + +fn add_curl(version_string: &mut String) { + let curl_v = curl::Version::get(); + let vendored = if curl_v.vendored() { + format!("vendored") + } else { + format!("system") + }; + writeln!( + version_string, + "libcurl: {} (sys:{} {} ssl:{})", + curl_v.version(), + curl_sys::rust_crate_version(), + vendored, + curl_v.ssl_version().unwrap_or("none") + ) + .unwrap(); +} + +fn add_ssl(version_string: &mut String) { + #[cfg(feature = "openssl")] + { + writeln!(version_string, "ssl: {}", openssl::version::version()).unwrap(); + } + #[cfg(not(feature = "openssl"))] + { + let _ = version_string; // Silence unused warning. + } +} + fn expand_aliases( config: &mut Config, args: ArgMatches<'static>, diff --git a/tests/testsuite/version.rs b/tests/testsuite/version.rs index 911b2360b0f..a5e4676dd46 100644 --- a/tests/testsuite/version.rs +++ b/tests/testsuite/version.rs @@ -1,6 +1,6 @@ //! Tests for displaying the cargo version. -use cargo_test_support::project; +use cargo_test_support::{cargo_process, project}; #[cargo_test] fn simple() { @@ -41,3 +41,15 @@ fn version_works_with_bad_target_dir() { .build(); p.cargo("version").run(); } + +#[cargo_test] +fn verbose() { + // This is mainly to check that it doesn't explode. + cargo_process("-vV") + .with_stdout_contains(&format!("cargo {}", cargo::version())) + .with_stdout_contains("host: [..]") + .with_stdout_contains("libgit2: [..]") + .with_stdout_contains("libcurl: [..]") + .with_stdout_contains("os: [..]") + .run(); +}