17db96d56Sopenharmony_ciimport marshal 27db96d56Sopenharmony_ciimport tokenize 37db96d56Sopenharmony_ciimport os.path 47db96d56Sopenharmony_ciimport sys 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciPROGRAM_DIR = os.path.dirname(__file__) 77db96d56Sopenharmony_ciSRC_DIR = os.path.dirname(PROGRAM_DIR) 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_cidef writecode(fp, mod, data): 117db96d56Sopenharmony_ci print('unsigned char M_%s[] = {' % mod, file=fp) 127db96d56Sopenharmony_ci indent = ' ' * 4 137db96d56Sopenharmony_ci for i in range(0, len(data), 16): 147db96d56Sopenharmony_ci print(indent, file=fp, end='') 157db96d56Sopenharmony_ci for c in bytes(data[i:i+16]): 167db96d56Sopenharmony_ci print('%d,' % c, file=fp, end='') 177db96d56Sopenharmony_ci print('', file=fp) 187db96d56Sopenharmony_ci print('};', file=fp) 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_cidef dump(fp, filename, name): 227db96d56Sopenharmony_ci # Strip the directory to get reproducible marshal dump 237db96d56Sopenharmony_ci code_filename = os.path.basename(filename) 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci with tokenize.open(filename) as source_fp: 267db96d56Sopenharmony_ci source = source_fp.read() 277db96d56Sopenharmony_ci code = compile(source, code_filename, 'exec') 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci data = marshal.dumps(code) 307db96d56Sopenharmony_ci writecode(fp, name, data) 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_cidef main(): 347db96d56Sopenharmony_ci if len(sys.argv) < 2: 357db96d56Sopenharmony_ci print(f"usage: {sys.argv[0]} filename") 367db96d56Sopenharmony_ci sys.exit(1) 377db96d56Sopenharmony_ci filename = sys.argv[1] 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci with open(filename, "w") as fp: 407db96d56Sopenharmony_ci print("// Auto-generated by Programs/freeze_test_frozenmain.py", file=fp) 417db96d56Sopenharmony_ci frozenmain = os.path.join(PROGRAM_DIR, 'test_frozenmain.py') 427db96d56Sopenharmony_ci dump(fp, frozenmain, 'test_frozenmain') 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci print(f"{filename} written") 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ciif __name__ == "__main__": 487db96d56Sopenharmony_ci main() 49