summaryrefslogtreecommitdiff
path: root/Programs/freeze_test_frozenmain.py
diff options
context:
space:
mode:
Diffstat (limited to 'Programs/freeze_test_frozenmain.py')
-rw-r--r--Programs/freeze_test_frozenmain.py48
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()