bevy_mujoco 0.12.0

Use MuJoCo physics and MCJF / URDF scenes in bevy
use std::env;
use std::fs;
use std::path::Path;
use std::path::PathBuf;
use std::str::FromStr;

fn get_output_path() -> PathBuf {
    let manifest_dir_string = env::var("CARGO_MANIFEST_DIR").unwrap();
    let build_type = env::var("PROFILE").unwrap();
    let path = Path::new(&manifest_dir_string)
        .join("target")
        .join(build_type);
    path
}

fn main() {
    let (_, _, default_install) = match env::var("CARGO_CFG_UNIX") {
        Ok(_) => ("", "", ""),
        _ => match env::var("CARGO_CFG_WINDOWS") {
            Ok(_) => ("", "dll", "C:\\Program Files\\MuJoCo"),
            _ => ("", "", ""),
        },
    };

    if option_env!("DOCS_RS").is_none() {
        let mj_root = match (env::var("MUJOCO_DIR"), env::var("MUJOCO_PREFIX")) {
            (Ok(dir), _) | (Err(..), Ok(dir)) => dir,
            (Err(..), Err(..)) => default_install.to_string(),
        };
        let mj_root = PathBuf::from_str(&mj_root).expect("Unable to get path");
        let mj_lib_windows = mj_root.join("bin");

        // Copy mujoco.dll to target directory on Windows targets
        if env::var("CARGO_CFG_WINDOWS").is_ok() {
            let target_dir = get_output_path();
            let src = Path::join(
                &env::current_dir().unwrap(),
                mj_lib_windows.join("mujoco.dll"),
            );

            fs::create_dir_all(&target_dir).unwrap();
            let dest = Path::join(Path::new(&target_dir), Path::new("mujoco.dll"));
            eprintln!("Copying {src:?} to {dest:?}");
            std::fs::copy(src, dest).unwrap();
        }
    }
}