cbindgen 0.1.10

A tool for generating C bindings to Rust code.
Documentation
#!/bin/python

import os
import glob
import subprocess
import sys

def cbindgen(rust_src, out, c):
    if c:
        subprocess.check_output(["cargo", "run", "--", "--lang", "c", rust_src, "-o", out])
    else:
        subprocess.check_output(["cargo", "run", "--", rust_src, "-o", out])

def gcc(src):
    subprocess.check_output(["gcc", "-c", src, "-o", "compile-tests/tmp.o"])
    os.remove("compile-tests/tmp.o")

def gxx(src):
    subprocess.check_output(["g++", "-c", src, "-o", "compile-tests/tmp.o"])
    os.remove("compile-tests/tmp.o")

def run_compile_test(rust_src, leave_output, c):
    if c:
        out = rust_src.replace(".rs", ".c")
    else:
        out = rust_src.replace(".rs", ".cpp")

    try:
        cbindgen(rust_src, out, c)

        if c:
            gcc(out)
        else:
            gxx(out)

        if not leave_output:
            os.remove(out)
    except subprocess.CalledProcessError:
        if not leave_output and os.path.exists(out):
            os.remove(out)
        return False

    return True

tests = glob.glob("compile-tests/*.rs")
num_pass = 0
num_fail = 0

flags = sys.argv[1:]
leave_output = False
c = False
for flag in flags:
    if flag == "-l":
        leave_output = True
    elif flag == "-c":
        c = True

for test in tests:
    if run_compile_test(test, leave_output, c):
        num_pass += 1
        print("Pass - %s" % test)
    else:
        num_fail += 1
        print("Fail - %s" % test)

print("Tests complete. %i passed, %i failed." % (num_pass, num_fail))