basisu_c_sys 0.8.0

Rust binding and wrappers for Basis Universal C API
Documentation
fn write_cmake_args<A, B, C>(
    default_encoder_emcc_args: &[A],
    default_transcoder_emcc_args: &[A],
    encoder_sources: &[B],
    transcoder_sources: &[B],
    emcc_flags: Option<C>,
    out_dir: &std::path::Path,
) where
    A: AsRef<str>,
    B: AsRef<str>,
    C: AsRef<str>,
{
    let (mut encoder_args, mut transcoder_args) = (
        default_encoder_emcc_args
            .iter()
            .map(|arg| arg.as_ref())
            .filter(|&arg| arg != "-Wno-stringop-overflow")
            .collect::<Vec<_>>(),
        default_transcoder_emcc_args
            .iter()
            .map(|arg| arg.as_ref())
            .filter(|&arg| arg != "-Wno-stringop-overflow")
            .collect::<Vec<_>>(),
    );

    if let Some(flags) = &emcc_flags {
        encoder_args.extend(flags.as_ref().split(" ").filter(|s| !s.is_empty()));
        transcoder_args.extend(flags.as_ref().split(" ").filter(|s| !s.is_empty()));
    }

    for (name, sources) in [
        ("encoder_srcs.txt", encoder_sources),
        ("transcoder_srcs.txt", transcoder_sources),
    ] {
        std::fs::write(
            out_dir.join(name),
            sources
                .iter()
                .map(|src| src.as_ref())
                .collect::<Vec<_>>()
                .join("\n"),
        )
        .unwrap();
    }

    for (name, sources) in [
        ("encoder_link_flags.txt", &encoder_args),
        ("transcoder_link_flags.txt", &transcoder_args),
    ] {
        std::fs::write(
            out_dir.join(name),
            sources
                .iter()
                .map(|src| src.as_ref())
                .collect::<Vec<_>>()
                .join("\n"),
        )
        .unwrap();
    }

    for (name, sources) in [
        ("encoder_compile_flags.txt", encoder_args),
        ("transcoder_compile_flags.txt", transcoder_args),
    ] {
        std::fs::write(
            out_dir.join(name),
            sources
                .into_iter()
                .filter(|f| !f.starts_with("-s") || *f == "-sSTRICT")
                .collect::<Vec<_>>()
                .join("\n"),
        )
        .unwrap();
    }
}