def make_certs_header(target, source, env): src = source[0] dst = target[0] f = open(src, "rb") g = open_utf8(dst, "w") buf = f.read() decomp_size = len(buf) import zlib buf = zlib.compress(buf) g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _CERTS_RAW_H\n") g.write("#define _CERTS_RAW_H\n") # System certs path. Editor will use them if defined. (for package maintainers) path = env["system_certs_path"] g.write('#define _SYSTEM_CERTS_PATH "%s"\n' % str(path)) if env["builtin_certs"]: # Defined here and not in env so changing it does not trigger a full rebuild. g.write("#define BUILTIN_CERTS_ENABLED\n") g.write("static const int _certs_compressed_size = " + str(len(buf)) + ";\n") g.write("static const int _certs_uncompressed_size = " + str(decomp_size) + ";\n") g.write("static const unsigned char _certs_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif") g.close() f.close()
def generate_header(src, dst, version_dst): from compat import byte_to_str with open(dst, 'w') as header: header.write('/* THIS FILE IS GENERATED DO NOT EDIT */\n') header.write('#ifndef CS_COMPRESSED_H\n') header.write('#define CS_COMPRESSED_H\n\n') header.write('#ifdef TOOLS_ENABLED\n\n') header.write('#include "core/map.h"\n') header.write('#include "core/ustring.h"\n') inserted_files = '' import os latest_mtime = 0 cs_file_count = 0 for root, _, files in os.walk(src): files = [f for f in files if f.endswith('.cs')] for file in files: cs_file_count += 1 filepath = os.path.join(root, file) filepath_src_rel = os.path.relpath(filepath, src) mtime = os.path.getmtime(filepath) latest_mtime = mtime if mtime > latest_mtime else latest_mtime with open(filepath, 'rb') as f: buf = f.read() decomp_size = len(buf) import zlib buf = zlib.compress(buf) name = str(cs_file_count) header.write('\n') header.write('// ' + filepath_src_rel + '\n') header.write('static const int _cs_' + name + '_compressed_size = ' + str(len(buf)) + ';\n') header.write('static const int _cs_' + name + '_uncompressed_size = ' + str(decomp_size) + ';\n') header.write('static const unsigned char _cs_' + name + '_compressed[] = { ') for i, buf_idx in enumerate(range(len(buf))): if i > 0: header.write(', ') header.write(byte_to_str(buf[buf_idx])) inserted_files += '\tr_files.insert("' + filepath_src_rel.replace('\\', '\\\\') + '", ' \ 'CompressedFile(_cs_' + name + '_compressed_size, ' \ '_cs_' + name + '_uncompressed_size, ' \ '_cs_' + name + '_compressed));\n' header.write(' };\n') header.write('\nstruct CompressedFile\n' '{\n' '\tint compressed_size;\n' '\tint uncompressed_size;\n' '\tconst unsigned char* data;\n' '\n\tCompressedFile(int p_comp_size, int p_uncomp_size, const unsigned char* p_data)\n' '\t{\n' '\t\tcompressed_size = p_comp_size;\n' '\t\tuncompressed_size = p_uncomp_size;\n' '\t\tdata = p_data;\n' '\t}\n' '\n\tCompressedFile() {}\n' '};\n' '\nvoid get_compressed_files(Map<String, CompressedFile>& r_files)\n' '{\n' + inserted_files + '}\n' ) header.write('\n#endif // TOOLS_ENABLED\n') header.write('\n#endif // CS_COMPRESSED_H\n') glue_version = int(latest_mtime) # The latest modified time will do for now with open(version_dst, 'w') as version_header: version_header.write('/* THIS FILE IS GENERATED DO NOT EDIT */\n') version_header.write('#ifndef CS_GLUE_VERSION_H\n') version_header.write('#define CS_GLUE_VERSION_H\n\n') version_header.write('#define CS_GLUE_VERSION UINT32_C(' + str(glue_version) + ')\n') version_header.write('\n#endif // CS_GLUE_VERSION_H\n')
def make_fonts_header(target, source, env): dst = target[0] g = open_utf8(dst, "w") g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _EDITOR_FONTS_H\n") g.write("#define _EDITOR_FONTS_H\n") # saving uncompressed, since freetype will reference from memory pointer xl_names = [] for i in range(len(source)): with open(source[i], "rb")as f: buf = f.read() name = os.path.splitext(os.path.basename(source[i]))[0] g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n") g.write("static const unsigned char _font_" + name + "[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif") g.close()
def make_fonts_header(target, source, env): dst = target[0] g = open_utf8(dst, "w") g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _EDITOR_FONTS_H\n") g.write("#define _EDITOR_FONTS_H\n") # saving uncompressed, since freetype will reference from memory pointer xl_names = [] for i in range(len(source)): with open(source[i], "rb") as f: buf = f.read() name = os.path.splitext(os.path.basename(source[i]))[0] g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n") g.write("static const unsigned char _font_" + name + "[] = {\n") for j in range(len(buf)): g.write("\t" + byte_to_str(buf[j]) + ",\n") g.write("};\n") g.write("#endif") g.close()
def make_doc_header(target, source, env): dst = target[0] g = open_utf8(dst, "w") buf = "" docbegin = "" docend = "" for src in source: if not src.endswith(".xml"): continue with open_utf8(src, "r") as f: content = f.read() buf += content buf = encode_utf8(docbegin + buf + docend) decomp_size = len(buf) import zlib buf = zlib.compress(buf) g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _DOC_DATA_RAW_H\n") g.write("#define _DOC_DATA_RAW_H\n") g.write("static const int _doc_data_compressed_size = " + str(len(buf)) + ";\n") g.write("static const int _doc_data_uncompressed_size = " + str(decomp_size) + ";\n") g.write("static const unsigned char _doc_data_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif") g.close()
def make_certs_header(target, source, env): src = source[0] dst = target[0] f = open(src, "rb") g = open_utf8(dst, "w") buf = f.read() decomp_size = len(buf) import zlib buf = zlib.compress(buf) g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _CERTS_RAW_H\n") g.write("#define _CERTS_RAW_H\n") g.write("static const int _certs_compressed_size = " + str(len(buf)) + ";\n") g.write("static const int _certs_uncompressed_size = " + str(decomp_size) + ";\n") g.write("static const unsigned char _certs_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif") g.close() f.close()
def make_certs_header(target, source, env): src = source[0] dst = target[0] f = open(src, "rb") g = open_utf8(dst, "w") buf = f.read() decomp_size = len(buf) import zlib buf = zlib.compress(buf) g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _CERTS_RAW_H\n") g.write("#define _CERTS_RAW_H\n") # System certs path. Editor will use them if defined. (for package maintainers) path = env['system_certs_path'] g.write("#define _SYSTEM_CERTS_PATH \"%s\"\n" % str(path)) if env['builtin_certs']: # Defined here and not in env so changing it does not trigger a full rebuild. g.write("#define BUILTIN_CERTS_ENABLED\n") g.write("static const int _certs_compressed_size = " + str(len(buf)) + ";\n") g.write("static const int _certs_uncompressed_size = " + str(decomp_size) + ";\n") g.write("static const unsigned char _certs_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif") g.close() f.close()
def generate_compressed_config(config_src, output_dir): import os.path from compat import byte_to_str # Source file with open(os.path.join(output_dir, "android_mono_config.gen.cpp"), "w") as cpp: with open(config_src, "rb") as f: buf = f.read() decompr_size = len(buf) import zlib buf = zlib.compress(buf) compr_size = len(buf) bytes_seq_str = "" for i, buf_idx in enumerate(range(compr_size)): if i > 0: bytes_seq_str += ", " bytes_seq_str += byte_to_str(buf[buf_idx]) cpp.write("""/* THIS FILE IS GENERATED DO NOT EDIT */ #include "android_mono_config.h" #ifdef ANDROID_ENABLED #include "core/io/compression.h" #include "core/pool_vector.h" namespace { // config static const int config_compressed_size = %d; static const int config_uncompressed_size = %d; static const unsigned char config_compressed_data[] = { %s }; } // namespace String get_godot_android_mono_config() { PoolVector<uint8_t> data; data.resize(config_uncompressed_size); PoolVector<uint8_t>::Write w = data.write(); Compression::decompress(w.ptr(), config_uncompressed_size, config_compressed_data, config_compressed_size, Compression::MODE_DEFLATE); String s; if (s.parse_utf8((const char *)w.ptr(), data.size())) { ERR_FAIL_V(String()); } return s; } #endif // ANDROID_ENABLED """ % (compr_size, decompr_size, bytes_seq_str))
def make_translations_header(target, source, env, category): dst = target[0] g = open_utf8(dst, "w") g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _{}_TRANSLATIONS_H\n".format(category.upper())) g.write("#define _{}_TRANSLATIONS_H\n".format(category.upper())) import zlib import os.path sorted_paths = sorted( source, key=lambda path: os.path.splitext(os.path.basename(path))[0]) xl_names = [] for i in range(len(sorted_paths)): with open(sorted_paths[i], "rb") as f: buf = f.read() decomp_size = len(buf) buf = zlib.compress(buf) name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] g.write( "static const unsigned char _{}_translation_{}_compressed[] = {{\n" .format(category, name)) for j in range(len(buf)): g.write("\t" + byte_to_str(buf[j]) + ",\n") g.write("};\n") xl_names.append([name, len(buf), str(decomp_size)]) g.write("struct {}TranslationList {{\n".format(category.capitalize())) g.write("\tconst char* lang;\n") g.write("\tint comp_size;\n") g.write("\tint uncomp_size;\n") g.write("\tconst unsigned char* data;\n") g.write("};\n\n") g.write("static {}TranslationList _{}_translations[] = {{\n".format( category.capitalize(), category)) for x in xl_names: g.write( "\t{{ \"{}\", {}, {}, _{}_translation_{}_compressed }},\n".format( x[0], str(x[1]), str(x[2]), category, x[0])) g.write("\t{NULL, 0, 0, NULL}\n") g.write("};\n") g.write("#endif") g.close()
def make_translations_header(target, source, env): dst = target[0] g = open_utf8(dst, "w") g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _EDITOR_TRANSLATIONS_H\n") g.write("#define _EDITOR_TRANSLATIONS_H\n") import zlib import os.path sorted_paths = sorted( source, key=lambda path: os.path.splitext(os.path.basename(path))[0]) xl_names = [] for i in range(len(sorted_paths)): with open(sorted_paths[i], "rb") as f: buf = f.read() decomp_size = len(buf) buf = zlib.compress(buf) name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] g.write("static const unsigned char _translation_" + name + "_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") xl_names.append([name, len(buf), str(decomp_size)]) g.write("struct EditorTranslationList {\n") g.write("\tconst char* lang;\n") g.write("\tint comp_size;\n") g.write("\tint uncomp_size;\n") g.write("\tconst unsigned char* data;\n") g.write("};\n\n") g.write("static EditorTranslationList _editor_translations[] = {\n") for x in xl_names: g.write("\t{ \"" + x[0] + "\", " + str(x[1]) + ", " + str(x[2]) + ", _translation_" + x[0] + "_compressed},\n") g.write("\t{NULL, 0, 0, NULL}\n") g.write("};\n") g.write("#endif") g.close()
def make_app_icon(target, source, env): src = source[0] dst = target[0] with open(src, "rb") as f: buf = f.read() with open(dst, "w") as g: g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef APP_ICON_H\n") g.write("#define APP_ICON_H\n") g.write("static const unsigned char app_icon_png[] = {\n") for i in range(len(buf)): g.write(byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif")
def make_splash_editor(target, source, env): src = source[0] dst = target[0] with open(src, "rb") as f: buf = f.read() with open(dst, "w") as g: g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef BOOT_SPLASH_EDITOR_H\n") g.write("#define BOOT_SPLASH_EDITOR_H\n") g.write('static const Color boot_splash_editor_bg_color = Color::html("#232323");\n') g.write("static const unsigned char boot_splash_editor_png[] = {\n") for i in range(len(buf)): g.write(byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif")
def make_translations_header(target, source, env): dst = target[0] g = open_utf8(dst, "w") g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef _EDITOR_TRANSLATIONS_H\n") g.write("#define _EDITOR_TRANSLATIONS_H\n") import zlib import os.path sorted_paths = sorted(source, key=lambda path: os.path.splitext(os.path.basename(path))[0]) xl_names = [] for i in range(len(sorted_paths)): with open(sorted_paths[i], "rb") as f: buf = f.read() decomp_size = len(buf) buf = zlib.compress(buf) name = os.path.splitext(os.path.basename(sorted_paths[i]))[0] g.write("static const unsigned char _translation_" + name + "_compressed[] = {\n") for i in range(len(buf)): g.write("\t" + byte_to_str(buf[i]) + ",\n") g.write("};\n") xl_names.append([name, len(buf), str(decomp_size)]) g.write("struct EditorTranslationList {\n") g.write("\tconst char* lang;\n") g.write("\tint comp_size;\n") g.write("\tint uncomp_size;\n") g.write("\tconst unsigned char* data;\n") g.write("};\n\n") g.write("static EditorTranslationList _editor_translations[] = {\n") for x in xl_names: g.write("\t{ \"" + x[0] + "\", " + str(x[1]) + ", " + str(x[2]) + ", _translation_" + x[0] + "_compressed},\n") g.write("\t{NULL, 0, 0, NULL}\n") g.write("};\n") g.write("#endif") g.close()
def make_splash(target, source, env): src = source[0] dst = target[0] with open(src, "rb") as f: buf = f.read() with open(dst, "w") as g: g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef BOOT_SPLASH_H\n") g.write("#define BOOT_SPLASH_H\n") # Use a neutral gray color to better fit various kinds of projects. g.write( "static const Color boot_splash_bg_color = Color(0.14, 0.14, 0.14);\n" ) g.write("static const unsigned char boot_splash_png[] = {\n") for i in range(len(buf)): g.write(byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif")
def make_splash_editor(target, source, env): src = source[0] dst = target[0] with open(src, "rb") as f: buf = f.read() with open(dst, "w") as g: g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n") g.write("#ifndef BOOT_SPLASH_EDITOR_H\n") g.write("#define BOOT_SPLASH_EDITOR_H\n") # The editor splash background color is taken from the default editor theme's background color. # This helps achieve a visually "smoother" transition between the splash screen and the editor. g.write( "static const Color boot_splash_editor_bg_color = Color(0.125, 0.145, 0.192);\n" ) g.write("static const unsigned char boot_splash_editor_png[] = {\n") for i in range(len(buf)): g.write(byte_to_str(buf[i]) + ",\n") g.write("};\n") g.write("#endif")
def generate_header(src, dst, version_dst): from compat import byte_to_str with open(dst, 'w') as header: header.write('/* THIS FILE IS GENERATED DO NOT EDIT */\n') header.write('#ifndef CS_COMPRESSED_H\n') header.write('#define CS_COMPRESSED_H\n\n') header.write('#ifdef TOOLS_ENABLED\n\n') header.write('#include "core/map.h"\n') header.write('#include "core/ustring.h"\n') inserted_files = '' import os latest_mtime = 0 cs_file_count = 0 for root, _, files in os.walk(src): files = [f for f in files if f.endswith('.cs')] for file in files: cs_file_count += 1 filepath = os.path.join(root, file) filepath_src_rel = os.path.relpath(filepath, src) mtime = os.path.getmtime(filepath) latest_mtime = mtime if mtime > latest_mtime else latest_mtime with open(filepath, 'rb') as f: buf = f.read() decomp_size = len(buf) import zlib buf = zlib.compress(buf) name = str(cs_file_count) header.write('\n') header.write('// ' + filepath_src_rel + '\n') header.write('static const int _cs_' + name + '_compressed_size = ' + str(len(buf)) + ';\n') header.write('static const int _cs_' + name + '_uncompressed_size = ' + str(decomp_size) + ';\n') header.write('static const unsigned char _cs_' + name + '_compressed[] = { ') for i, buf_idx in enumerate(range(len(buf))): if i > 0: header.write(', ') header.write(byte_to_str(buf[buf_idx])) inserted_files += '\tr_files.insert("' + filepath_src_rel.replace('\\', '\\\\') + '", ' \ 'CompressedFile(_cs_' + name + '_compressed_size, ' \ '_cs_' + name + '_uncompressed_size, ' \ '_cs_' + name + '_compressed));\n' header.write(' };\n') header.write( '\nstruct CompressedFile\n' '{\n' '\tint compressed_size;\n' '\tint uncompressed_size;\n' '\tconst unsigned char* data;\n' '\n\tCompressedFile(int p_comp_size, int p_uncomp_size, const unsigned char* p_data)\n' '\t{\n' '\t\tcompressed_size = p_comp_size;\n' '\t\tuncompressed_size = p_uncomp_size;\n' '\t\tdata = p_data;\n' '\t}\n' '\n\tCompressedFile() {}\n' '};\n' '\nvoid get_compressed_files(Map<String, CompressedFile>& r_files)\n' '{\n' + inserted_files + '}\n') header.write('\n#endif // TOOLS_ENABLED\n') header.write('\n#endif // CS_COMPRESSED_H\n') glue_version = int( latest_mtime) # The latest modified time will do for now with open(version_dst, 'w') as version_header: version_header.write('/* THIS FILE IS GENERATED DO NOT EDIT */\n') version_header.write('#ifndef CS_GLUE_VERSION_H\n') version_header.write('#define CS_GLUE_VERSION_H\n\n') version_header.write('#define CS_GLUE_VERSION UINT32_C(' + str(glue_version) + ')\n') version_header.write('\n#endif // CS_GLUE_VERSION_H\n')