diff options
Diffstat (limited to 'Programs/freeze_test_frozenmain.py')
-rw-r--r-- | Programs/freeze_test_frozenmain.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Programs/freeze_test_frozenmain.py b/Programs/freeze_test_frozenmain.py new file mode 100644 index 0000000000..848fc31b3d --- /dev/null +++ b/Programs/freeze_test_frozenmain.py @@ -0,0 +1,48 @@ +import marshal +import tokenize +import os.path +import sys + +PROGRAM_DIR = os.path.dirname(__file__) +SRC_DIR = os.path.dirname(PROGRAM_DIR) + + +def writecode(fp, mod, data): + print('unsigned char M_%s[] = {' % mod, file=fp) + indent = ' ' * 4 + for i in range(0, len(data), 16): + print(indent, file=fp, end='') + for c in bytes(data[i:i+16]): + print('%d,' % c, file=fp, end='') + print('', file=fp) + print('};', file=fp) + + +def dump(fp, filename, name): + # Strip the directory to get reproducible marshal dump + code_filename = os.path.basename(filename) + + with tokenize.open(filename) as source_fp: + source = source_fp.read() + code = compile(source, code_filename, 'exec') + + data = marshal.dumps(code) + writecode(fp, name, data) + + +def main(): + if len(sys.argv) < 2: + print(f"usage: {sys.argv[0]} filename") + sys.exit(1) + filename = sys.argv[1] + + with open(filename, "w") as fp: + print("// Auto-generated by Programs/freeze_test_frozenmain.py", file=fp) + frozenmain = os.path.join(PROGRAM_DIR, 'test_frozenmain.py') + dump(fp, frozenmain, 'test_frozenmain') + + print(f"{filename} written") + + +if __name__ == "__main__": + main() |