infomgr 0.2.2

Show system information.
Documentation
use std::env;
use std::fs;
use std::os::unix::fs::symlink;
use std::path::Path;
#[allow(unused)]
use {
    jlogger_tracing::{jdebug, jerror, jinfo, jwarn, JloggerBuilder, LevelFilter},
    tracing::{debug, error, info, warn},
};

fn env_string(env: &str) -> String {
    format!(
        "{:30} : {}",
        env,
        env::var(env).unwrap_or_else(|_| String::from("null"))
    )
}

fn main() {
    JloggerBuilder::new()
        .log_console(false)
        .log_file(Some(("/tmp/infomgr_build.log", false)))
        .build();

    let out_dir = env::var("OUT_DIR").unwrap();

    jinfo!("{}", env_string("CARGO"));
    jinfo!("{}", env_string("CARGO_MANIFEST_LINKS"));
    jinfo!(
        "{}",
        env_string("CARGO_FEATURE_ENABLE_IPCON")
            .replace('1', "Enabled")
            .replace("null", "Disabled")
    );

    jinfo!("{}", env_string("TARGET"));
    jinfo!("{}", env_string("OUT_DIR"));

    let target = env::var("TARGET").unwrap();

    if target == "aarch64-unknown-linux-gnu" {
        let env_dir_name = format!("{}/build_env", out_dir);
        let env_dir = Path::new(env_dir_name.as_str());
        jinfo!("{:30} : {}", "env_dir", env_dir.display());

        if env_dir.exists() {
            if !env_dir.is_dir() {
                panic!("{} is not a directory.", env_dir.display())
            }
        } else {
            fs::create_dir(env_dir).expect("Failed to create env dir")
        }

        let ipcon_lib_orig = env::var("LIBIPCON").expect("No LIBIPCON specified.");
        let ipcon_lib_name = format!("{}/libipcon.so", env_dir_name);
        let ipcon_lib = Path::new(ipcon_lib_name.as_str());
        if ipcon_lib.exists() {
            fs::remove_file(ipcon_lib).expect("Failed to remove old ipcon lib.");
        }
        symlink(ipcon_lib_orig.as_str(), ipcon_lib_name.as_str())
            .expect("Failed to created libipcon link");

        let nl_lib_orig = env::var("LIBNL").expect("No LIBNL specified.");
        let nl_lib_name = format!("{}/libnl.so", env_dir_name);
        let nl_lib = Path::new(nl_lib_name.as_str());
        if nl_lib.exists() {
            fs::remove_file(nl_lib).expect("Failed to remove old ipcon lib.");
        }
        symlink(nl_lib_orig.as_str(), nl_lib_name.as_str())
            .expect("Failed to created libipcon link");

        let cargo_search_path = format!("cargo:rustc-link-search={}", env_dir_name);
        jinfo!("{:30} : {}", "cargo_search_path", cargo_search_path);
        println!("{}", cargo_search_path.as_str());
        println!("cargo:rustc-link-lib=nl");
    }
}