Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 31 additions & 28 deletions binding_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import json
import os
import errno
from pathlib import Path

# Convenience function for using template get_node
def correct_method_name(method_list):
Expand All @@ -19,23 +20,23 @@ def print_file_list(api_filepath, output_dir, headers=False, sources=False):
end = ';'
with open(api_filepath) as api_file:
classes = json.load(api_file)
include_gen_folder = os.path.join(output_dir, 'include', 'gen')
source_gen_folder = os.path.join(output_dir, 'src', 'gen')
include_gen_folder = Path(output_dir) / 'include' / 'gen'
source_gen_folder = Path(output_dir) / 'src' / 'gen'
for _class in classes:
header_filename = os.path.join(include_gen_folder, strip_name(_class["name"]) + ".hpp")
source_filename = os.path.join(source_gen_folder, strip_name(_class["name"]) + ".cpp")
header_filename = include_gen_folder / (strip_name(_class["name"]) + ".hpp")
source_filename = source_gen_folder / (strip_name(_class["name"]) + ".cpp")
if headers:
print(header_filename, end=end)
print(str(header_filename.as_posix()), end=end)
if sources:
print(source_filename, end=end)
icall_header_filename = os.path.join(include_gen_folder, '__icalls.hpp')
register_types_filename = os.path.join(source_gen_folder, '__register_types.cpp')
init_method_bindings_filename = os.path.join(source_gen_folder, '__init_method_bindings.cpp')
print(str(source_filename.as_posix()), end=end)
icall_header_filename = include_gen_folder / '__icalls.hpp'
register_types_filename = source_gen_folder / '__register_types.cpp'
init_method_bindings_filename = source_gen_folder / '__init_method_bindings.cpp'
if headers:
print(icall_header_filename, end=end)
print(str(icall_header_filename.as_posix()), end=end)
if sources:
print(register_types_filename, end=end)
print(init_method_bindings_filename, end=end)
print(str(register_types_filename.as_posix()), end=end)
print(str(init_method_bindings_filename.as_posix()), end=end)


def generate_bindings(api_filepath, use_template_get_node, output_dir="."):
Expand All @@ -44,20 +45,22 @@ def generate_bindings(api_filepath, use_template_get_node, output_dir="."):
classes = json.load(api_file)

icalls = set()
include_gen_folder = os.path.join(output_dir, 'include', 'gen')
source_gen_folder = os.path.join(output_dir, 'src', 'gen')
include_gen_folder = Path(output_dir) / 'include' / 'gen'
source_gen_folder = Path(output_dir) / 'src' / 'gen'

try:
os.makedirs(include_gen_folder)
include_gen_folder.mkdir(parents=True)
except os.error as e:
if e.errno == errno.EEXIST:
print(include_gen_folder + ": " + os.strerror(e.errno))
print(str(source_gen_folder) + ": " + os.strerror(e.errno))
else:
exit(1)

try:
os.makedirs(source_gen_folder)
source_gen_folder.mkdir(parents=True)
except os.error as e:
if e.errno == errno.EEXIST:
print(source_gen_folder + ": " + os.strerror(e.errno))
print(str(source_gen_folder) + ": " + os.strerror(e.errno))
else:
exit(1)

Expand All @@ -71,24 +74,24 @@ def generate_bindings(api_filepath, use_template_get_node, output_dir="."):

impl = generate_class_implementation(icalls, used_classes, c, use_template_get_node)

header_filename = os.path.join(include_gen_folder, strip_name(c["name"]) + ".hpp")
with open(header_filename, "w+") as header_file:
header_filename = include_gen_folder / (strip_name(c["name"]) + ".hpp")
with header_filename.open("w+") as header_file:
header_file.write(header)

source_filename = os.path.join(source_gen_folder, strip_name(c["name"]) + ".cpp")
with open(source_filename, "w+") as source_file:
source_filename = source_gen_folder / (strip_name(c["name"]) + ".cpp")
with source_filename.open("w+") as source_file:
source_file.write(impl)

icall_header_filename = os.path.join(include_gen_folder, '__icalls.hpp')
with open(icall_header_filename, "w+") as icall_header_file:
icall_header_filename = include_gen_folder / '__icalls.hpp'
with icall_header_filename.open("w+") as icall_header_file:
icall_header_file.write(generate_icall_header(icalls))

register_types_filename = os.path.join(source_gen_folder, '__register_types.cpp')
with open(register_types_filename, "w+") as register_types_file:
register_types_filename = source_gen_folder / '__register_types.cpp'
with register_types_filename.open("w+") as register_types_file:
register_types_file.write(generate_type_registry(classes))

init_method_bindings_filename = os.path.join(source_gen_folder, '__init_method_bindings.cpp')
with open(init_method_bindings_filename, "w+") as init_method_bindings_file:
init_method_bindings_filename = source_gen_folder / '__init_method_bindings.cpp'
with init_method_bindings_filename.open("w+") as init_method_bindings_file:
init_method_bindings_file.write(generate_init_method_bindings(classes))


Expand Down