ext4-mkfs-sys 0.1.0

FFI bindings to lwext4 for ext4 filesystem creation
Documentation
use std::env;
use std::path::PathBuf;

fn main() {
    let vendor_dir = PathBuf::from("vendor/lwext4");
    let src_dir = vendor_dir.join("src");
    let include_dir = vendor_dir.join("include");

    let sources = [
        "ext4.c",
        "ext4_balloc.c",
        "ext4_bcache.c",
        "ext4_bitmap.c",
        "ext4_block_group.c",
        "ext4_blockdev.c",
        "ext4_crc32.c",
        "ext4_debug.c",
        "ext4_dir.c",
        "ext4_dir_idx.c",
        "ext4_extent.c",
        "ext4_fs.c",
        "ext4_hash.c",
        "ext4_ialloc.c",
        "ext4_inode.c",
        "ext4_journal.c",
        "ext4_mkfs.c",
        "ext4_super.c",
        "ext4_trans.c",
        "ext4_xattr.c",
        "ext4_mbr.c",
    ];

    let mut build = cc::Build::new();

    build
        .include(&include_dir)
        // Use default config (avoid trying to include generated config)
        .define("CONFIG_USE_DEFAULT_CFG", "1")
        // Use standard library flags
        .define("CONFIG_HAVE_OWN_OFLAGS", "0")
        .define("CONFIG_HAVE_OWN_ERRNO", "0")
        // Disable debug output for cleaner builds
        .define("CONFIG_DEBUG_PRINTF", "0")
        .define("CONFIG_DEBUG_ASSERT", "0")
        // Standard C flags
        .flag_if_supported("-std=c99")
        .flag_if_supported("-Wno-unused-parameter")
        .flag_if_supported("-Wno-sign-compare");

    for source in &sources {
        build.file(src_dir.join(source));
    }

    build.compile("lwext4");

    // Tell cargo to invalidate the built crate whenever the sources change
    println!("cargo:rerun-if-changed=vendor/lwext4/src");
    println!("cargo:rerun-if-changed=vendor/lwext4/include");

    // Export include path for dependent crates
    let out_dir = env::var("OUT_DIR").unwrap();
    println!("cargo:include={}", include_dir.display());
    println!("cargo:root={}", out_dir);
}