diff options
Diffstat (limited to 'binding_generator.py')
-rw-r--r-- | binding_generator.py | 81 |
1 files changed, 63 insertions, 18 deletions
diff --git a/binding_generator.py b/binding_generator.py index 410f8ff..491acbe 100644 --- a/binding_generator.py +++ b/binding_generator.py @@ -1,8 +1,8 @@ #!/usr/bin/env python - +from __future__ import print_function import json - -# comment. +import os +import errno # Convenience function for using template get_node def correct_method_name(method_list): @@ -13,15 +13,56 @@ def correct_method_name(method_list): classes = [] -def generate_bindings(path, use_template_get_node): +def print_file_list(api_filepath, output_dir, headers=False, sources=False): global classes - classes = json.load(open(path)) + 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') + 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") + if headers: + print(header_filename, 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') + if headers: + print(icall_header_filename, end=end) + if sources: + print(register_types_filename, end=end) + print(init_method_bindings_filename, end=end) + + +def generate_bindings(api_filepath, use_template_get_node, output_dir="."): + global classes + with open(api_filepath) as api_file: + 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') + try: + os.makedirs(include_gen_folder) + except os.error as e: + if e.errno == errno.EEXIST: + print(include_gen_folder + ": " + os.strerror(e.errno)) + else: + exit(1) + try: + os.makedirs(source_gen_folder) + except os.error as e: + if e.errno == errno.EEXIST: + print(source_gen_folder + ": " + os.strerror(e.errno)) + else: + exit(1) for c in classes: - # print c['name'] + # print(c['name']) used_classes = get_used_classes(c) if use_template_get_node and c["name"] == "Node": correct_method_name(c["methods"]) @@ -30,21 +71,25 @@ def generate_bindings(path, use_template_get_node): impl = generate_class_implementation(icalls, used_classes, c, use_template_get_node) - header_file = open("include/gen/" + strip_name(c["name"]) + ".hpp", "w+") - header_file.write(header) - - source_file = open("src/gen/" + strip_name(c["name"]) + ".cpp", "w+") - source_file.write(impl) + header_filename = os.path.join(include_gen_folder, strip_name(c["name"]) + ".hpp") + with open(header_filename, "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_file.write(impl) - icall_header_file = open("include/gen/__icalls.hpp", "w+") - icall_header_file.write(generate_icall_header(icalls)) + icall_header_filename = os.path.join(include_gen_folder, '__icalls.hpp') + with open(icall_header_filename, "w+") as icall_header_file: + icall_header_file.write(generate_icall_header(icalls)) - register_types_file = open("src/gen/__register_types.cpp", "w+") - register_types_file.write(generate_type_registry(classes)) + register_types_filename = os.path.join(source_gen_folder, '__register_types.cpp') + with open(register_types_filename, "w+") as register_types_file: + register_types_file.write(generate_type_registry(classes)) - init_method_bindings_file = open("src/gen/__init_method_bindings.cpp", "w+") - init_method_bindings_file.write(generate_init_method_bindings(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_file.write(generate_init_method_bindings(classes)) def is_reference_type(t): @@ -80,7 +125,7 @@ def generate_class_header(used_classes, c, use_template_get_node): source.append("") source.append("#include <gdnative_api_struct.gen.h>") - source.append("#include <stdint.h>") + source.append("#include <cstdint>") source.append("") |