diff --git a/crates/wasm-bindgen-cli/Cargo.toml b/crates/wasm-bindgen-cli/Cargo.toml index b161bc35..a5e4f113 100644 --- a/crates/wasm-bindgen-cli/Cargo.toml +++ b/crates/wasm-bindgen-cli/Cargo.toml @@ -9,6 +9,7 @@ parity-wasm = "0.27" serde = "1.0" serde_derive = "1.0" wasm-bindgen-cli-support = { path = "../wasm-bindgen-cli-support" } +wasm-bindgen-shared = { path = "../wasm-bindgen-shared" } [[bin]] name = "wasm-bindgen" diff --git a/crates/wasm-bindgen-cli/src/bin/wasm-bindgen.rs b/crates/wasm-bindgen-cli/src/bin/wasm-bindgen.rs index f067de93..4d8a1303 100644 --- a/crates/wasm-bindgen-cli/src/bin/wasm-bindgen.rs +++ b/crates/wasm-bindgen-cli/src/bin/wasm-bindgen.rs @@ -2,6 +2,7 @@ extern crate wasm_bindgen_cli_support; #[macro_use] extern crate serde_derive; extern crate docopt; +extern crate wasm_bindgen_shared; use std::path::PathBuf; @@ -14,6 +15,7 @@ Generating JS bindings for a wasm file Usage: wasm-bindgen [options] wasm-bindgen -h | --help + wasm-bindgen -V | --version Options: -h --help Show this screen. @@ -21,6 +23,7 @@ Options: --nodejs Generate output for node.js, not the browser --typescript Output a TypeScript definition file --debug Include otherwise-extraneous debug checks in output + -V --version Print the version number of wasm-bindgen "; #[derive(Debug, Deserialize)] @@ -29,7 +32,8 @@ struct Args { flag_typescript: bool, flag_out_dir: Option, flag_debug: bool, - arg_input: PathBuf, + flag_version: bool, + arg_input: Option, } fn main() { @@ -37,8 +41,18 @@ fn main() { .and_then(|d| d.deserialize()) .unwrap_or_else(|e| e.exit()); + if args.flag_version { + println!("wasm-bindgen {}", wasm_bindgen_shared::version()); + return + } + + let input = match args.arg_input { + Some(s) => s, + None => panic!("input file expected"), + }; + let mut b = Bindgen::new(); - b.input_path(&args.arg_input) + b.input_path(&input) .nodejs(args.flag_nodejs) .debug(args.flag_debug) .typescript(args.flag_typescript); diff --git a/crates/wasm-bindgen-shared/build.rs b/crates/wasm-bindgen-shared/build.rs new file mode 100644 index 00000000..a1761e39 --- /dev/null +++ b/crates/wasm-bindgen-shared/build.rs @@ -0,0 +1,14 @@ +use std::process::Command; + +fn main() { + let rev = Command::new("git") + .arg("rev-parse") + .arg("HEAD") + .output() + .ok() + .map(|s| s.stdout) + .and_then(|s| String::from_utf8(s).ok()); + if let Some(rev) = rev { + println!("cargo:rustc-env=WBG_VERSION={}", &rev[..9]); + } +} diff --git a/crates/wasm-bindgen-shared/src/lib.rs b/crates/wasm-bindgen-shared/src/lib.rs index d4ef64d7..17ac86de 100644 --- a/crates/wasm-bindgen-shared/src/lib.rs +++ b/crates/wasm-bindgen-shared/src/lib.rs @@ -134,3 +134,13 @@ pub fn name_to_descriptor(name: &str) -> char { } char::from_u32(ret).unwrap() } + +pub fn version() -> String { + let mut v = env!("CARGO_PKG_VERSION").to_string(); + if let Some(s) = option_env!("WBG_VERSION") { + v.push_str(" ("); + v.push_str(s); + v.push_str(")"); + } + return v +}