cargo-web 0.6.26

A Cargo subcommand for the client-side Web
Documentation
extern crate cargo_web;
extern crate env_logger;
extern crate structopt;

use std::env::{args, var};
use std::process::exit;

use cargo_web::{run, CargoWebOpts};
use structopt::StructOpt;

macro_rules! target_arg {
    ( $opt:expr, $arch:ident $abi:ident ) => {{
        let triple = concat!(stringify!($arch), "-unknown-", stringify!($abi));

        eprintln!(
            "The `--target-{}` flag is DEPRECATED. Please use the `--target` \
             option with the full triple (`{}`)",
            $opt, triple
        );

        format!("--target={}", triple)
    }};
}

fn main() {
    if let Ok(value) = var("CARGO_WEB_LOG") {
        let mut builder = env_logger::Builder::new();
        builder.parse(&value);
        builder.init();
    }

    let mut argv = Vec::new();
    let mut args = args().into_iter();
    argv.extend( args.next() );

    match args.next() {
        Some( ref arg ) if arg != "web" => argv.push( arg.clone() ),
        _ => {}
    }

    let args = args.map(|arg| match arg.as_ref() {
        "--target-webasm" => target_arg!("webasm", wasm32 unknown),
        "--target-webasm-emscripten" => target_arg!("webasm-emscripten", wasm32 emscripten),
        "--target-asmjs-emscripten" => target_arg!("asmjs-emscripten", asmjs emscripten),
        _ => arg,
    });

    argv.extend( args );

    if let Err(error) = run(CargoWebOpts::from_iter(argv)) {
        eprintln!("error: {}", error);
        exit(101);
    }
}