diff --git a/servo/components/servo/main.rs b/servo/components/servo/main.rs index bf4c0b14f4c1..ca0eec17955f 100644 --- a/servo/components/servo/main.rs +++ b/servo/components/servo/main.rs @@ -40,6 +40,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; pub mod platform { @@ -102,6 +103,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/servo/components/util/opts.rs b/servo/components/util/opts.rs index 711782ab3ea6..1fe76f96d26e 100644 --- a/servo/components/util/opts.rs +++ b/servo/components/util/opts.rs @@ -202,6 +202,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) { @@ -507,6 +510,7 @@ pub fn default_opts() -> Opts { render_api: DEFAULT_RENDER_API, config_dir: None, full_backtraces: false, + is_printing_version: false, } } @@ -564,6 +568,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) { @@ -753,6 +758,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), @@ -807,6 +814,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/servo/python/servo/command_base.py b/servo/python/servo/command_base.py index e90245f43ec3..990bc9a586c1 100644 --- a/servo/python/servo/command_base.py +++ b/servo/python/servo/command_base.py @@ -374,6 +374,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):