提交 d6a4c431 编写于 作者: R Robert Buonpastore 提交者: Alex Crichton

Stabilize version output for rustc and rustdoc

上级 fb296b80
...@@ -42,9 +42,9 @@ SPACE := ...@@ -42,9 +42,9 @@ SPACE :=
SPACE += SPACE +=
ifneq ($(wildcard $(subst $(SPACE),\$(SPACE),$(CFG_GIT))),) ifneq ($(wildcard $(subst $(SPACE),\$(SPACE),$(CFG_GIT))),)
ifneq ($(wildcard $(subst $(SPACE),\$(SPACE),$(CFG_GIT_DIR))),) ifneq ($(wildcard $(subst $(SPACE),\$(SPACE),$(CFG_GIT_DIR))),)
CFG_VERSION += $(shell git --git-dir='$(CFG_GIT_DIR)' log -1 \ CFG_VER_DATE = $(shell git --git-dir='$(CFG_GIT_DIR)' log -1 --pretty=format:'%ci')
--pretty=format:'(%h %ci)')
CFG_VER_HASH = $(shell git --git-dir='$(CFG_GIT_DIR)' rev-parse HEAD) CFG_VER_HASH = $(shell git --git-dir='$(CFG_GIT_DIR)' rev-parse HEAD)
CFG_VERSION += ($(CFG_VER_HASH) $(CFG_VER_DATE))
endif endif
endif endif
...@@ -272,6 +272,12 @@ $(foreach host,$(CFG_HOST), \ ...@@ -272,6 +272,12 @@ $(foreach host,$(CFG_HOST), \
export CFG_SRC_DIR export CFG_SRC_DIR
export CFG_BUILD_DIR export CFG_BUILD_DIR
ifdef CFG_VER_DATE
export CFG_VER_DATE
endif
ifdef CFG_VER_HASH
export CFG_VER_HASH
endif
export CFG_VERSION export CFG_VERSION
export CFG_VERSION_WIN export CFG_VERSION_WIN
export CFG_RELEASE export CFG_RELEASE
......
...@@ -544,7 +544,7 @@ pub fn optgroups() -> Vec<getopts::OptGroup> { ...@@ -544,7 +544,7 @@ pub fn optgroups() -> Vec<getopts::OptGroup> {
optmulti("F", "forbid", "Set lint forbidden", "OPT"), optmulti("F", "forbid", "Set lint forbidden", "OPT"),
optmulti("C", "codegen", "Set a codegen option", "OPT[=VALUE]"), optmulti("C", "codegen", "Set a codegen option", "OPT[=VALUE]"),
optmulti("Z", "", "Set internal debugging options", "FLAG"), optmulti("Z", "", "Set internal debugging options", "FLAG"),
optflag("v", "version", "Print version info and exit"), optflagopt("v", "version", "Print version info and exit", "verbose"),
optopt("", "color", "Configure coloring of output: optopt("", "color", "Configure coloring of output:
auto = colorize, if output goes to a tty (default); auto = colorize, if output goes to a tty (default);
always = always colorize output; always = always colorize output;
......
...@@ -112,13 +112,24 @@ fn run_compiler(args: &[String]) { ...@@ -112,13 +112,24 @@ fn run_compiler(args: &[String]) {
driver::compile_input(sess, cfg, &input, &odir, &ofile); driver::compile_input(sess, cfg, &input, &odir, &ofile);
} }
pub fn version(command: &str) { /// Prints version information and returns None on success or an error
let vers = match option_env!("CFG_VERSION") { /// message on failure.
Some(vers) => vers, pub fn version(binary: &str, matches: &getopts::Matches) -> Option<String> {
None => "unknown version" let verbose = match matches.opt_str("version").as_ref().map(|s| s.as_slice()) {
None => false,
Some("verbose") => true,
Some(s) => return Some(format!("Unrecognized argument: {}", s))
}; };
println!("{} {}", command, vers);
println!("host: {}", driver::host_triple()); println!("{} {}", binary, env!("CFG_VERSION"));
if verbose {
println!("binary: {}", binary);
println!("commit-hash: {}", option_env!("CFG_VER_HASH").unwrap_or("unknown"));
println!("commit-date: {}", option_env!("CFG_VER_DATE").unwrap_or("unknown"));
println!("host: {}", driver::host_triple());
println!("release: {}", env!("CFG_RELEASE"));
}
None
} }
fn usage() { fn usage() {
...@@ -268,9 +279,11 @@ pub fn handle_options(mut args: Vec<String>) -> Option<getopts::Matches> { ...@@ -268,9 +279,11 @@ pub fn handle_options(mut args: Vec<String>) -> Option<getopts::Matches> {
return None; return None;
} }
if matches.opt_present("v") || matches.opt_present("version") { if matches.opt_present("version") {
version("rustc"); match version("rustc", &matches) {
return None; Some(err) => early_error(err.as_slice()),
None => return None
}
} }
Some(matches) Some(matches)
......
...@@ -95,7 +95,7 @@ pub fn opts() -> Vec<getopts::OptGroup> { ...@@ -95,7 +95,7 @@ pub fn opts() -> Vec<getopts::OptGroup> {
use getopts::*; use getopts::*;
vec!( vec!(
optflag("h", "help", "show this help message"), optflag("h", "help", "show this help message"),
optflag("", "version", "print rustdoc's version"), optflagopt("", "version", "print rustdoc's version", "verbose"),
optopt("r", "input-format", "the input type of the specified file", optopt("r", "input-format", "the input type of the specified file",
"[rust|json]"), "[rust|json]"),
optopt("w", "output-format", "the output type to write", optopt("w", "output-format", "the output type to write",
...@@ -150,8 +150,13 @@ pub fn main_args(args: &[String]) -> int { ...@@ -150,8 +150,13 @@ pub fn main_args(args: &[String]) -> int {
usage(args[0].as_slice()); usage(args[0].as_slice());
return 0; return 0;
} else if matches.opt_present("version") { } else if matches.opt_present("version") {
rustc::driver::version("rustdoc"); match rustc::driver::version("rustdoc", &matches) {
return 0; Some(err) => {
println!("{}", err);
return 1
},
None => return 0
}
} }
if matches.free.len() == 0 { if matches.free.len() == 0 {
......
-include ../tools.mk
all:
$(RUSTC) -v
$(RUSTC) -v verbose
$(RUSTC) -v bad_arg && exit 1 || exit 0
$(RUSTC) --version verbose
$(RUSTC) --version bad_arg && exit 1 || exit 0
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册