import os
import sys
import re
ERROR = False
ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
def error(message):
print(message)
global ERROR
ERROR = True
def functions_list():
functions = []
with open(os.path.join(ROOT, "chemfiles-sys", "lib.rs")) as fd:
extern = False
for line in fd:
if "extern \"C\" {" in line:
extern = True
continue
if extern and "}" in line:
extern = False
continue
if extern:
name = line.split()[2].split('(')[0]
functions.append(name)
return functions
def read_all_binding_functions():
binding_functions = set()
for (dirpath, _, paths) in os.walk(os.path.join(ROOT, "src")):
for path in paths:
with open(os.path.join(ROOT, dirpath, path)) as fd:
file_functions = re.findall(r"(chfl_[a-z A-Z 0-9 _]*)\(", fd.read())
binding_functions.update(file_functions)
return binding_functions
def check_functions(functions, binding_functions):
for function in functions:
if function not in binding_functions:
error("Missing: " + function)
if __name__ == '__main__':
functions = functions_list()
binding_functions = read_all_binding_functions()
check_functions(functions, binding_functions)
if ERROR:
sys.exit(1)