HEADERS = []

src = open("wiringpi.i").read().split('\n')

for line in src:
    line = line.strip()
    if line.startswith('#include') and line.endswith('.h"'):
        HEADERS.append(line.replace('#include','').replace('"','').strip())

#print(HEADERS)

def is_c_decl(line):
    for fn in ['wiringPiISR','wiringPiSetupPiFace','wiringPiSetupPiFaceForGpioProg']:
        if fn in line:
            if 'wiringPiISRCancel' in line:
                return True
            else:
                return False
    for prefix in ['extern','void','int','uint8_t']:
        if line.startswith(prefix):
            return True

print("// Generated by generate-bindings.py - do not edit manually!")

for file in HEADERS:
    print("\n// Header file {}".format(file))
    h = open(file).read().split('\n')
    extern = False
    cont = False
    if 'extern "C" {' not in h:
        extern = True
    for line in h:
        line = line.strip()
        if 'UNU' in line[-5:]:
            line = line[:-5] + ';'
        if cont:
            print("\t{}".format(line))
            cont = ";" not in line
            continue
        if line.startswith('extern "C"'):
            extern = True
            continue
        if is_c_decl(line) and extern:
            print(line)
            cont = ";" not in line
