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()
Ejemplo n.º 2
0
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')
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
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()
Ejemplo n.º 9
0
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))
Ejemplo n.º 10
0
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()
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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")
Ejemplo n.º 13
0
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")
Ejemplo n.º 14
0
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")
Ejemplo n.º 15
0
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()
Ejemplo n.º 16
0
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")
Ejemplo n.º 17
0
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")
Ejemplo n.º 18
0
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()
Ejemplo n.º 19
0
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')