gifsicle 1.92.0

Bindings for gifsicle library. Supports lossy compression. GPL.
Documentation
use std::path::PathBuf;
use std::env;

fn main() {
    let mut cc = cc::Build::new();
    let out_dir = PathBuf::from(&env::var_os("OUT_DIR").expect("OUT_DIR"));

    let target_pointer_width = env::var("CARGO_CFG_TARGET_POINTER_WIDTH").expect("target");

    std::fs::write(out_dir.join("config.h"), r#"
        #define HAVE_INT64_T 1
        #define HAVE_INTTYPES_H 1
        #define HAVE_POW 1
        #define HAVE_MKSTEMP 1
        #define HAVE_STRERROR 1
        #define HAVE_STRTOUL 1
        #define HAVE_SYS_TYPES_H 1
        #define HAVE_SYS_STAT_H 1
        #define HAVE_UINT64_T 1
        #define HAVE_UINTPTR_T 1
        #define PATHNAME_SEPARATOR '/'
        #define RANDOM random
        #define OUTPUT_GIF_TO_TERMINAL 1
        #define SIZEOF_UNSIGNED_INT 4
    "#).expect("OUT_DIR/config.h");

    cc.define("HAVE_CONFIG_H", Some("1"));
    cc.define("SIZEOF_VOID_P", Some(if target_pointer_width == "32" {"4"} else {"8"}));
    cc.define("SIZEOF_UNSIGNED_LONG", Some(if target_pointer_width == "32" {"4"} else {"8"}));
    cc.define("VERSION", Some(concat!("\"", env!("CARGO_PKG_VERSION"), "\"")));
    cc.define("main", Some("gifsicle_main"));

    cc.include("vendor/include");
    cc.include("vendor/src");
    cc.include(out_dir);

    cc.file("vendor/src/clp.c");
    cc.file("vendor/src/fmalloc.c");
    cc.file("vendor/src/giffunc.c");
    cc.file("vendor/src/gifread.c");
    cc.file("vendor/src/gifunopt.c");
    cc.file("vendor/src/merge.c");
    cc.file("vendor/src/optimize.c");
    cc.file("vendor/src/quantize.c");
    cc.file("vendor/src/support.c");
    cc.file("vendor/src/xform.c");
    cc.file("vendor/src/gifsicle.c");
    cc.file("vendor/src/gifwrite.c");

    cc.compile("gifsicle");
}