-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrebuild-jar.py
More file actions
executable file
·90 lines (74 loc) · 3.31 KB
/
Copy pathrebuild-jar.py
File metadata and controls
executable file
·90 lines (74 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/env python3
"""
Single, authoritative way to rebuild and deploy CppMode.jar.
Runs the same sequence that's been typed by hand throughout
development. Looks for the processing4 checkout via the PROCESSING4_DIR
environment variable first; if that isn't set, asks for the path
interactively instead of failing -- so this script works for anyone,
not just on a machine that already has PROCESSING4_DIR exported.
Setup (optional, skips the prompt every time):
export PROCESSING4_DIR=/path/to/your/processing4
(add that line to your ~/.bashrc to make it permanent)
Usage:
rebuild-jar.py
"""
import subprocess
import sys
import os
SKETCHBOOK_JAR_DEST = os.path.expanduser("~/sketchbook/modes/CppMode/mode/CppMode.jar")
TMP_DIR = "/tmp/_cpp"
def run(cmd, cwd=None):
print(f"$ {' '.join(cmd)}")
result = subprocess.run(cmd, cwd=cwd)
if result.returncode != 0:
print(f"FAILED (exit code {result.returncode}): {' '.join(cmd)}")
sys.exit(result.returncode)
def get_processing4_dir():
env_dir = os.environ.get("PROCESSING4_DIR")
if env_dir:
env_dir = os.path.abspath(os.path.expanduser(env_dir))
if os.path.isdir(env_dir):
return env_dir
print(f"WARNING: PROCESSING4_DIR is set to '{env_dir}', but that's not a real directory.")
entered = input("Path to your processing4 checkout: ").strip()
entered = os.path.abspath(os.path.expanduser(entered))
if not os.path.isdir(entered):
print(f"ERROR: '{entered}' is not a directory.")
sys.exit(1)
return entered
def main():
processing4_dir = get_processing4_dir()
cppbuild_java = os.path.join(processing4_dir, "java/src/processing/mode/cpp/CppBuild.java")
java_jar = os.path.join(processing4_dir, "java/build/libs/java.jar")
gradlew = os.path.join(processing4_dir, "gradlew")
if not os.path.exists(cppbuild_java):
print(f"ERROR: expected CppBuild.java not found at {cppbuild_java}")
print("Is this really a processing4 checkout with CppMode's source linked in?")
sys.exit(1)
print(f"Using processing4 at: {processing4_dir}")
os.utime(cppbuild_java, None)
run([gradlew, ":java:compileJava", "--rerun-tasks"], cwd=processing4_dir)
run([gradlew, ":java:jar"], cwd=processing4_dir)
if not os.path.exists(java_jar):
print(f"ERROR: expected jar not found at {java_jar}")
sys.exit(1)
run(["rm", "-rf", TMP_DIR])
run(["mkdir", TMP_DIR])
run(["jar", "xf", java_jar], cwd=TMP_DIR)
os.makedirs(os.path.dirname(SKETCHBOOK_JAR_DEST), exist_ok=True)
run(["jar", "cf", SKETCHBOOK_JAR_DEST, "processing/mode/cpp/"], cwd=TMP_DIR)
size = os.path.getsize(SKETCHBOOK_JAR_DEST)
print()
print(f"Done. Deployed CppMode.jar ({size} bytes) to {SKETCHBOOK_JAR_DEST}")
if __name__ == "__main__":
main()
# Sync to Processing bundled mode dirs so IDE picks up changes immediately
import shutil, pathlib
jar = pathlib.Path("/home/pep/sketchbook/modes/CppMode/mode/CppMode.jar")
for dest in [
"/home/pep/Projects/processing4/app/build/resources-bundled/common/modes/CppMode/mode/CppMode.jar",
"/home/pep/Projects/processing4/app/build/compose/tmp/prepareAppResources/modes/CppMode/mode/CppMode.jar",
]:
pathlib.Path(dest).parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(jar, dest)
print(f"Synced to {dest}")