mirror of
https://github.com/erg-lang/erg.git
synced 2025-07-07 21:25:31 +00:00
67 lines
2.1 KiB
Rust
67 lines
2.1 KiB
Rust
#![allow(deprecated)]
|
|
|
|
use std::env;
|
|
use std::fs;
|
|
use std::path;
|
|
|
|
use erg_common::erg_util::env_erg_version;
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
let current_erg_version = env_erg_version();
|
|
if current_erg_version.as_ref().map(|s| &s[..]) == Some(env!("CARGO_PKG_VERSION"))
|
|
&& env::var("ERG_PATH").is_ok()
|
|
&& !cfg!(feature = "debug")
|
|
{
|
|
return Ok(());
|
|
}
|
|
// Create a ".erg" directory
|
|
let erg_path = env::home_dir()
|
|
.expect("failed to get the location of the home dir")
|
|
.to_str()
|
|
.expect("invalid encoding of the home dir name")
|
|
.to_string()
|
|
+ "/.erg";
|
|
if !path::Path::new(&erg_path).exists() {
|
|
fs::create_dir(&erg_path).unwrap_or_else(|_| {
|
|
eprintln!("failed to create the directory: {erg_path}");
|
|
});
|
|
}
|
|
println!("cargo:rustc-env=CARGO_ERG_PATH={erg_path}");
|
|
// create a std library in ".erg"
|
|
copy_dir(&erg_path, "lib").unwrap_or_else(|_| {
|
|
eprintln!("failed to copy the std library to {erg_path}");
|
|
});
|
|
let pkgs_path = path::Path::new(&erg_path).join("lib").join("pkgs");
|
|
if !pkgs_path.exists() {
|
|
fs::create_dir(&pkgs_path).unwrap_or_else(|_| {
|
|
eprintln!("failed to create the directory: {}", pkgs_path.display());
|
|
});
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn copy_dir(erg_path: &str, path: &str) -> std::io::Result<()> {
|
|
let full_path = format!("{erg_path}/{path}");
|
|
if !path::Path::new(&full_path).exists() {
|
|
fs::create_dir(&full_path)?;
|
|
}
|
|
let mut dirs = vec![];
|
|
for res in fs::read_dir(path)? {
|
|
let entry = res?;
|
|
let entry_path = entry.path();
|
|
if entry_path.is_dir() {
|
|
dirs.push(entry);
|
|
} else {
|
|
let filename = entry_path
|
|
.file_name()
|
|
.expect("this is not a file")
|
|
.to_string_lossy();
|
|
let filename = format!("{full_path}/{filename}");
|
|
fs::copy(&entry_path, filename)?;
|
|
}
|
|
}
|
|
for dir in dirs {
|
|
copy_dir(erg_path, dir.path().to_str().unwrap())?;
|
|
}
|
|
Ok(())
|
|
}
|