nil-zonefile 0.3.0

A library for parsing and creating zonefiles on the new internet.
Documentation
use std::env;
use std::process::Command;
use std::path::Path;

fn main() {
    // Only run checks for wasm32 target on macOS
    if cfg!(target_os = "macos") && env::var("TARGET").map(|t| t == "wasm32-unknown-unknown").unwrap_or(false) {
        check_llvm_setup().unwrap_or_else(|e| {
            eprintln!("Error: {}", e);
            std::process::exit(1);
        });
    }
}

fn check_llvm_setup() -> Result<(), String> {
    // Check if we're on macOS
    if !cfg!(target_os = "macos") {
        return Ok(());
    }

    // Check if Homebrew is installed
    if !Command::new("brew").arg("--version").output().is_ok() {
        return Err("Homebrew is not installed. Please install it first:\n\
                   /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"".to_string());
    }

    // Check LLVM path
    let llvm_path = Path::new("/opt/homebrew/opt/llvm");
    if !llvm_path.exists() {
        return Err("LLVM is not installed. Please run: brew install llvm".to_string());
    }

    // Check for required files
    let clang_path = llvm_path.join("bin/clang");
    let llvm_ar_path = llvm_path.join("bin/llvm-ar");

    if !clang_path.exists() {
        return Err(format!("clang not found in {}", clang_path.display()));
    }

    if !llvm_ar_path.exists() {
        return Err(format!("llvm-ar not found in {}", llvm_ar_path.display()));
    }

    // Check if environment variables are set correctly
    let path = env::var("PATH").unwrap_or_default();
    let cc = env::var("CC").unwrap_or_default();
    let ar = env::var("AR").unwrap_or_default();

    let llvm_bin_path = llvm_path.join("bin").to_string_lossy().to_string();

    if !path.contains(&llvm_bin_path) || 
       !cc.contains("clang") || 
       !ar.contains("llvm-ar") {
        return Err(format!(
            "Environment variables not set correctly. Please run:\n\
             export PATH=\"{}/bin:$PATH\"\n\
             export CC={}/bin/clang\n\
             export AR={}/bin/llvm-ar",
            llvm_path.display(), llvm_path.display(), llvm_path.display()
        ));
    }

    Ok(())
}