mirror of https://github.com/python/cpython.git
49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
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()
|