summaryrefslogtreecommitdiff
path: root/src/js/pbjs_hack.py
diff options
context:
space:
mode:
authorTristan Marion <trismarion@gmail.com>2018-06-22 15:30:35 +0200
committerRyan Dahl <ry@tinyclouds.org>2018-06-22 15:30:35 +0200
commit3b595253a2e9f8badc416f85d0b09bf48f344634 (patch)
tree85939e43b504cf0ff78f69a1912209e90b67ffe5 /src/js/pbjs_hack.py
parent86354a29a40fb97e334f951428239ab8e171e2dd (diff)
Move `deno2` folder to `src` (#277)
Diffstat (limited to 'src/js/pbjs_hack.py')
-rwxr-xr-xsrc/js/pbjs_hack.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/js/pbjs_hack.py b/src/js/pbjs_hack.py
new file mode 100755
index 000000000..e0e1ab06f
--- /dev/null
+++ b/src/js/pbjs_hack.py
@@ -0,0 +1,54 @@
+#!/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)