fn main()

in kernel-abi-check/src/main.rs [33:72]


fn main() -> Result<()> {
    // Initialize color_eyre error handling
    color_eyre::install()?;

    // Parse command-line arguments
    let args = Cli::parse();

    eprintln!(
        "🐍 Checking for compatibility with {}, macOS {}, and Python ABI version {}",
        args.manylinux, args.macos, args.python_abi
    );

    let binary_data = fs::read(args.object).context("Cannot open object file")?;
    let file = object::File::parse(&*binary_data).context("Cannot parse object")?;

    let many_linux_violations = check_manylinux(
        &args.manylinux,
        file.architecture(),
        file.endianness(),
        file.symbols(),
    )?;
    print_manylinux_violations(&many_linux_violations, &args.manylinux)?;

    let macos_violations = check_macos(&file, &args.macos)?;
    print_macos_violations(&macos_violations, &args.macos);

    let python_abi_violations = check_python_abi(&args.python_abi, file.format(), file.symbols())?;
    print_python_abi_violations(&python_abi_violations, &args.python_abi);

    if !(many_linux_violations.is_empty()
        && macos_violations.is_empty()
        && python_abi_violations.is_empty())
    {
        return Err(eyre::eyre!("Compatibility issues found"));
    } else {
        eprintln!("✅ No compatibility issues found");
    }

    Ok(())
}