0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-10-31 09:14:20 -04:00
denoland-deno/deno2/js/pbjs_hack.py

54 lines
1.4 KiB
Python
Executable file

#!/usr/bin/env python
"""
gn can only run python scripts.
Generates protobufjs code.
"""
import subprocess
import sys
import os
# TODO(ry) Ideally protobufjs output files should be written into
# target_gen_dir, but its difficult to get this working in a way that parcel can
# resolve their location. (Parcel does not support NODE_PATH.) Therefore this
# hack: write the generated msg.pb.js and msg.pb.d.ts outputs into the js/
# folder, and we check them into the repo. Hopefully this hack can be removed at
# some point. If msg.proto is changed, commit changes to the generated JS
# files.
js_path = os.path.dirname(os.path.realpath(__file__))
pbjs_path = os.path.join(js_path, "node_modules", "protobufjs", "bin")
pbjs_bin = os.path.join(pbjs_path, "pbjs")
pbts_bin = os.path.join(pbjs_path, "pbts")
msg_pbjs_out = os.path.join(js_path, "msg.pb.js")
msg_pbts_out = os.path.join(js_path, "msg.pb.d.ts")
assert os.path.exists(pbjs_bin)
assert os.path.exists(pbts_bin)
proto_in = sys.argv[1]
stamp_file = sys.argv[2]
def touch(fname):
if os.path.exists(fname):
os.utime(fname, None)
else:
open(fname, 'a').close()
subprocess.check_call([
"node",
pbjs_bin,
"--target=static-module",
"--wrapper=commonjs",
"--out=" + msg_pbjs_out,
proto_in
])
assert os.path.exists(msg_pbjs_out)
subprocess.check_call([
"node",
pbts_bin,
"--out=" + msg_pbts_out,
msg_pbjs_out
])
assert os.path.exists(msg_pbts_out)
touch(stamp_file)