mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			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()
							 |