diff --git a/components/servo/main.rs b/components/servo/main.rs index 214d9ee101d..f939b63a324 100644 --- a/components/servo/main.rs +++ b/components/servo/main.rs @@ -35,6 +35,7 @@ use servo::Browser; use servo::compositing::windowing::WindowEvent; use servo::util::opts::{self, ArgumentParsingResult}; use servo::util::panicking::initiate_panic_hook; +use std::process; use std::rc::Rc; fn main() { @@ -60,6 +61,11 @@ fn main() { return servo::run_content_process(token) } + if opts::get().is_printing_version { + println!("Servo {}{}", env!("CARGO_PKG_VERSION"), env!("GIT_INFO")); + process::exit(0); + } + let window = app::create_window(None); // Our wrapper around `Browser` that also implements some diff --git a/components/util/opts.rs b/components/util/opts.rs index 50541140b70..f425bb102ea 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -205,6 +205,9 @@ pub struct Opts { // don't skip any backtraces on panic pub full_backtraces: bool, + + /// Print the version and exit. + pub is_printing_version: bool, } fn print_usage(app: &str, opts: &Options) { @@ -527,6 +530,7 @@ pub fn default_opts() -> Opts { render_api: DEFAULT_RENDER_API, config_dir: None, full_backtraces: false, + is_printing_version: false, } } @@ -584,6 +588,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { opts.optopt("G", "graphics", "Select graphics backend (gl or es2)", "gl"); opts.optopt("", "config-dir", "config directory following xdg spec on linux platform", ""); + opts.optflag("v", "version", "Display servo version information"); let opt_match = match opts.parse(args) { @@ -776,6 +781,8 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { _ => args_fail(&format!("error: graphics option must be gl or es2:")), }; + let is_printing_version = opt_match.opt_present("v") || opt_match.opt_present("version"); + let opts = Opts { is_running_problem_test: is_running_problem_test, url: Some(url), @@ -831,6 +838,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { use_msaa: debug_options.use_msaa, config_dir: opt_match.opt_str("config-dir"), full_backtraces: debug_options.full_backtraces, + is_printing_version: is_printing_version, }; set_defaults(opts); diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 79e1fb8f3c1..96d179d4c0f 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -413,6 +413,22 @@ class CommandBase(object): env['RUSTFLAGS'] = env.get('RUSTFLAGS', "") + " -W unused-extern-crates" + git_info = [] + if os.path.isdir('.git'): + git_sha = subprocess.check_output([ + 'git', 'rev-parse', '--short', 'HEAD' + ]).strip() + git_is_dirty = bool(subprocess.check_output([ + 'git', 'status', '--porcelain' + ]).strip()) + + git_info.append('') + git_info.append(git_sha) + if git_is_dirty: + git_info.append('dirty') + + env['GIT_INFO'] = '-'.join(git_info) + return env def servo_crate(self):