use std::fs;
use std::path::Path;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum BuildSystem {
Rebar3,
ErlangMk,
Unknown,
}
impl BuildSystem {
pub fn detect(repo_root: &Path) -> Self {
if repo_root.join("rebar.config").is_file()
|| repo_root.join("rebar.config.script").is_file()
{
return Self::Rebar3;
}
if repo_root.join("erlang.mk").is_file() {
return Self::ErlangMk;
}
if let Ok(mk) = fs::read_to_string(repo_root.join("Makefile"))
&& (mk.contains("erlang.mk") || mk.contains("PROJECT ="))
{
return Self::ErlangMk;
}
Self::Unknown
}
}