gpgme 0.7.1

GPGme bindings for Rust
Documentation
extern crate semver;

use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::path::PathBuf;

use semver::Version;

fn main() {
    let (mut major, mut minor) = if let Ok(v) = env::var("DEP_GPGME_VERSION") {
        let sys_version = Version::parse(&v).unwrap();
        (sys_version.major, sys_version.minor)
    } else {
        (1, 2) // Minimum supported version
    };

    let path = PathBuf::from(env::var_os("OUT_DIR").unwrap());
    let mut output = File::create(path.join("version.rs")).unwrap();
    writeln!(
        output,
        "#[macro_export]\nmacro_rules! require_gpgme_ver {{\n\
         ($ver:tt => {{ $($t:tt)* }}) => (require_gpgme_ver! {{ $ver => {{ $($t)* }} else {{}} }});"
    ).unwrap();
    loop {
        writeln!(
            output,
            "(({0},{1}) => {{ $($t:tt)* }} else {{ $($u:tt)* }}) => ($($t)*);",
            major, minor
        ).unwrap();

        if minor == 0 {
            break;
        }
        minor -= 1;
    }
    major -= 1;

    loop {
        writeln!(
            output,
            "(({0},$ver:tt) => {{ $($t:tt)* }} else {{ $($u:tt)* }}) => ($($t)*);",
            major
        ).unwrap();

        if major == 0 {
            break;
        }
        major -= 1;
    }
    writeln!(
        output,
        "($ver:tt => {{ $($t:tt)* }} else {{ $($u:tt)* }}) => ($($u)*);\n}}"
    ).unwrap();
}