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