diff --git a/src/bindgen.rs b/src/bindgen.rs new file mode 100644 index 0000000..ef20ad8 --- /dev/null +++ b/src/bindgen.rs @@ -0,0 +1,42 @@ +use std::process::Command; + +pub fn cargo_install_wasm_bindgen() { + let output = Command::new("cargo") + .arg("install") + .arg("--git") + .arg("https://github.com/alexcrichton/wasm-bindgen") + .output() + .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); + + if output.status.success() { + let s = String::from_utf8_lossy(&output.stdout); + + print!( + "cargo_install_wasm_bindgen succeeded and stdout was:\n{}", + s + ); + } else { + let s = String::from_utf8_lossy(&output.stderr); + + print!("cargo_install_wasm_bindgen failed and stderr was:\n{}", s); + } +} + +pub fn wasm_bindgen_build(path: &str) { + let output = Command::new("wasm-bindgen") + .current_dir(path) + .arg("--out-dir") + .arg("./pkg") + .output() + .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); + + if output.status.success() { + let s = String::from_utf8_lossy(&output.stdout); + + print!("cargo_build_wasm succeeded and stdout was:\n{}", s); + } else { + let s = String::from_utf8_lossy(&output.stderr); + + print!("cargo_build_wasm failed and stderr was:\n{}", s); + } +} diff --git a/src/build.rs b/src/build.rs new file mode 100644 index 0000000..b62164e --- /dev/null +++ b/src/build.rs @@ -0,0 +1,41 @@ +use std::process::Command; + +pub fn rustup_add_wasm_target() { + let output = Command::new("rustup") + .arg("target") + .arg("add") + .arg("wasm32-unknown-unknown") + .output() + .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); + + if output.status.success() { + let s = String::from_utf8_lossy(&output.stdout); + + print!("rustup_add_wasm_target succeeded and stdout was:\n{}", s); + } else { + let s = String::from_utf8_lossy(&output.stderr); + + print!("rustup_add_wasm_target failed and stderr was:\n{}", s); + } +} + +pub fn cargo_build_wasm(path: &str) { + let output = Command::new("cargo") + .current_dir(path) + .arg("build") + .arg("--release") + .arg("--target") + .arg("wasm32-unknown-unknown") + .output() + .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); + + if output.status.success() { + let s = String::from_utf8_lossy(&output.stdout); + + print!("cargo_build_wasm succeeded and stdout was:\n{}", s); + } else { + let s = String::from_utf8_lossy(&output.stderr); + + print!("cargo_build_wasm failed and stderr was:\n{}", s); + } +} diff --git a/src/main.rs b/src/main.rs index 08fd3f8..f6ac848 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,9 @@ extern crate quicli; extern crate wasm_pack; +mod build; +mod bindgen; + use quicli::prelude::*; /// 📦 ✨ pack and publish your wasm! @@ -29,11 +32,16 @@ enum Command { main!(|args: Cli, log_level: verbosity| match args.cmd { Command::Init { path } => { - match path { - Some(p) => wasm_pack::write_package_json(&p)?, - None => wasm_pack::write_package_json(".")?, - } + let crate_path = match path { + Some(p) => p, + None => ".".to_string(), + }; + build::rustup_add_wasm_target(); + build::cargo_build_wasm(&crate_path); + wasm_pack::write_package_json(&crate_path)?; println!("✍️ wrote a package.json!"); + bindgen::cargo_install_wasm_bindgen(); + bindgen::wasm_bindgen_build(&crate_path); } Command::Pack { .. } => { println!("🎒 packed up your package!");