looper/gen_ui_backend_inc.py
2024-09-06 10:06:32 -07:00

63 lines
No EOL
2.3 KiB
Python
Executable file

#!/usr/bin/python3
import os
import os.path as path
import sys
from glob import glob
import json
olddir = os.curdir
scriptdir = path.realpath(path.dirname(__file__))
os.chdir(scriptdir)
outpath = path.join(sys.argv[1], "backend_glue.cpp")
ui_backend_dir = path.join(scriptdir, "backends", "ui")
ui_backend_metafiles = []
playback_backend_dir = path.join(scriptdir, "backends", "playback")
playback_backend_metafiles = []
adding_uis = True
for backend in sys.argv[2:]:
if backend == "--ui":
adding_uis = True
continue
elif backend == "--playback":
adding_uis = False
continue
if adding_uis:
ui_backend_metafiles += [ui_backend_dir + "/" + backend + "/ui.json"]
else:
playback_backend_metafiles += [playback_backend_dir + "/" + backend + "/backend.json"]
ui_backends = []
playback_backends = []
for metafile_path in ui_backend_metafiles:
with open(metafile_path, "rt") as metafile:
metajson = json.load(metafile)
incpath = path.join(path.dirname(metafile_path), metajson["include_path"])
incpath = path.relpath(incpath, scriptdir)
ui_backend = {"class_name": metajson["class_name"], "include_path": incpath}
ui_backends.append(ui_backend)
for metafile_path in playback_backend_metafiles:
with open(metafile_path, "rt") as metafile:
metajson = json.load(metafile)
incpath = path.join(path.dirname(metafile_path), metajson["include_path"])
incpath = path.relpath(incpath, scriptdir)
playback_backend = {"class_name": metajson["class_name"], "include_path": incpath}
playback_backends.append(playback_backend)
with open(outpath, "wt+") as of:
of.write("#include \"playback_backend.hpp\"\n")
of.write("#include \"backend.hpp\"\n")
for ui_backend in ui_backends:
of.write("#include \"%s\"\n" % ui_backend["include_path"])
for playback_backend in playback_backends:
of.write("#include \"%s\"\n" % playback_backend["include_path"])
of.write("""
void init_backends() {
""")
for ui_backend in ui_backends:
of.write("\tUIBackend::register_backend<%s>();\n" % ui_backend["class_name"])
of.write("}\n")
of.write("""
void init_playback_backends() {
""")
for playback_backend in playback_backends:
of.write("\tPlaybackBackend::register_backend<%s>();\n" % playback_backend["class_name"])
of.write("}\n")
os.chdir(olddir)