Skip to content

Commit a0adf05

Browse files
committed
Harden all-module compilation and path handling
1 parent 8759449 commit a0adf05

1 file changed

Lines changed: 103 additions & 81 deletions

File tree

scripts/compile-all-modules.sh

Lines changed: 103 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,132 @@
1-
#!/bin/bash
2-
# scripts/compile-all-modules.sh — Compile ALL NWE modules (core + external)
3-
# Compiles .java → .class into out/. Does NOT touch databases, configs, or runtime data.
4-
# Safe to run after every git pull.
5-
# Usage: bash scripts/compile-all-modules.sh
6-
set +e
7-
8-
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
9-
source "$ROOT/scripts/print-descriptor.sh" 2>/dev/null || true
1+
#!/usr/bin/env bash
2+
# scripts/compile-all-modules.sh — Compile all NWE modules.
3+
# Location-independent: safe to invoke from any working directory.
4+
set -euo pipefail
5+
6+
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
7+
ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
108
OUT="$ROOT/out"
9+
TMP_ROOT="${TMPDIR:-/tmp}"
10+
11+
[[ -f "$ROOT/scripts/print-descriptor.sh" ]] && source "$ROOT/scripts/print-descriptor.sh" || true
12+
command -v javac >/dev/null 2>&1 || { echo "[FAIL] javac not found. Install/use Java 21." >&2; exit 1; }
13+
1114
mkdir -p "$OUT"
1215

13-
DJL_CP=$(find "$ROOT/jars/djl" -name "*.jar" 2>/dev/null | tr '\n' ':')
14-
JPCAP_CP=$(find "$ROOT/jars/jpcap" -name "*.jar" 2>/dev/null | tr '\n' ':')
15-
CP="$OUT:$ROOT/jars/mysql/mysql-connector-j-9.7.0.jar:${DJL_CP}${JPCAP_CP}$ROOT/jars/lanterna-3.1.5.jar"
16+
CP="$OUT:$ROOT/jars/mysql/mysql-connector-j-9.7.0.jar:$ROOT/jars/lanterna-3.1.5.jar"
17+
if [[ -d "$ROOT/jars/djl" ]]; then
18+
while IFS= read -r -d '' jar; do CP+="${CP:+:}$jar"; done < <(find "$ROOT/jars/djl" -type f -name '*.jar' -print0)
19+
fi
20+
if [[ -d "$ROOT/jars/jpcap" ]]; then
21+
while IFS= read -r -d '' jar; do CP+="${CP:+:}$jar"; done < <(find "$ROOT/jars/jpcap" -type f -name '*.jar' -print0)
22+
fi
23+
24+
SOURCE_PATHS="$ROOT/source"
25+
for module in \
26+
"$ROOT/modules/fbi/source" "$ROOT/modules/cia/source" "$ROOT/modules/nsa/source" \
27+
"$ROOT/modules/duke/source" "$ROOT/modules/library/source" "$ROOT/modules/gray/source" \
28+
"$ROOT/modules/gray.a85/source" "$ROOT/modules/red/Futures/source" "$ROOT/modules/vietnam/source" \
29+
"$ROOT/modules/emeter/source" "$ROOT/modules/spectrum-tandem/source" "$ROOT/modules/chat/source" \
30+
"$ROOT/modules/uncw/source"; do
31+
[[ -d "$module" ]] && SOURCE_PATHS="$SOURCE_PATHS:$module"
32+
done
33+
34+
compile_list() {
35+
local label="$1" list_file="$2" source_path="$3"
36+
if [[ ! -s "$list_file" ]]; then
37+
echo " SKIP (no source found)"
38+
rm -f "$list_file"
39+
return 0
40+
fi
41+
javac --release 21 -d "$OUT" -cp "$CP" -sourcepath "$source_path" "@$list_file"
42+
rm -f "$list_file"
43+
echo " OK"
44+
}
1645

1746
echo "═══════════════════════════════════════════════════════════════"
1847
echo " NWE — Compile All Modules"
1948
echo "═══════════════════════════════════════════════════════════════"
49+
echo "ROOT: $ROOT"
2050
echo ""
2151

22-
# 1. Core source/ (includes all sourcepaths so Main.java can resolve external modules)
52+
list="$TMP_ROOT/nwe-core.$$.txt"
53+
find "$ROOT/source" -type f -name '*.java' -print > "$list"
2354
echo "[1/8] Core sources (source/)..."
24-
find "$ROOT/source" -name "*.java" > /tmp/nwe-core.txt
25-
javac -d "$OUT" -cp "$CP" \
26-
-sourcepath "$ROOT/source:$ROOT/modules/fbi/source:$ROOT/modules/cia/source:$ROOT/modules/nsa/source:$ROOT/modules/duke/source:$ROOT/modules/library/source:$ROOT/modules/gray/source:$ROOT/modules/gray.a85/source:$ROOT/modules/red/Futures/source:$ROOT/modules/vietnam/source:$ROOT/modules/emeter/source:$ROOT/modules/spectrum-tandem/source:$ROOT/modules/chat/source:$ROOT/modules/uncw/source" \
27-
@/tmp/nwe-core.txt 2>&1 | grep -i error || echo " OK"
28-
rm -f /tmp/nwe-core.txt
29-
30-
# 2. FBI/CIA/NSA, Duke, Library, Vietnam, Emeter, SpectrumTandem
31-
echo "[2/8] FBI/CIA/NSA, Duke, Library, Vietnam, Emeter, SpectrumTandem..."
32-
javac -d "$OUT" -cp "$CP" \
33-
-sourcepath "$ROOT/source:$ROOT/modules/fbi/source:$ROOT/modules/cia/source:$ROOT/modules/nsa/source:$ROOT/modules/duke/source:$ROOT/modules/library/source:$ROOT/modules/vietnam/source:$ROOT/modules/emeter/source:$ROOT/modules/spectrum-tandem/source:$ROOT/modules/chat/source:$ROOT/modules/uncw/source" \
34-
"$ROOT/modules/fbi/source/CaliforniaFBIServer.java" \
35-
"$ROOT/modules/cia/source/CaliforniaCIAServer.java" \
36-
"$ROOT/modules/nsa/source/CaliforniaNSAServer.java" \
37-
"$ROOT/modules/duke/source/DukeUniversityServer.java" \
38-
"$ROOT/modules/library/source/StanfordLibraryServer.java" \
39-
"$ROOT/modules/vietnam/source/VietnamServer.java" \
40-
"$ROOT/modules/emeter/source/EmeterServer.java" \
41-
"$ROOT/modules/spectrum-tandem/source/SpectrumTandemServer.java" \
42-
"$ROOT/modules/spectrum-tandem/source/SpectrumTandemProtocolHandler.java" \
43-
"$ROOT/modules/chat/source/ChatServer.java" \
44-
"$ROOT/modules/chat/source/ChatProtocolHandler.java" \
45-
"$ROOT/modules/uncw/source/UNCWServer.java" 2>&1 | grep -i error || echo " OK"
46-
47-
# 3. Gray registries
55+
compile_list core "$list" "$SOURCE_PATHS"
56+
57+
echo "[2/8] FBI/CIA/NSA, Duke, Library, Vietnam, Emeter, SpectrumTandem, Chat, UNCW..."
58+
for entry in \
59+
"$ROOT/modules/fbi/source/CaliforniaFBIServer.java" \
60+
"$ROOT/modules/cia/source/CaliforniaCIAServer.java" \
61+
"$ROOT/modules/nsa/source/CaliforniaNSAServer.java" \
62+
"$ROOT/modules/duke/source/DukeUniversityServer.java" \
63+
"$ROOT/modules/library/source/StanfordLibraryServer.java" \
64+
"$ROOT/modules/vietnam/source/VietnamServer.java" \
65+
"$ROOT/modules/emeter/source/EmeterServer.java" \
66+
"$ROOT/modules/spectrum-tandem/source/SpectrumTandemServer.java" \
67+
"$ROOT/modules/spectrum-tandem/source/SpectrumTandemProtocolHandler.java" \
68+
"$ROOT/modules/chat/source/ChatServer.java" \
69+
"$ROOT/modules/chat/source/ChatProtocolHandler.java" \
70+
"$ROOT/modules/uncw/source/UNCWServer.java"; do
71+
[[ -f "$entry" ]] || { echo " [SKIP] $entry"; continue; }
72+
javac --release 21 -d "$OUT" -cp "$CP" -sourcepath "$SOURCE_PATHS" "$entry"
73+
done
74+
echo " OK"
75+
4876
echo "[3/8] Gray Port Registry + Gray85..."
49-
javac -d "$OUT" -cp "$CP" \
50-
-sourcepath "$ROOT/source:$ROOT/modules/gray/source:$ROOT/modules/gray.a85/source" \
51-
"$ROOT/modules/gray/source/PortBindingGate.java" \
52-
"$ROOT/modules/gray/source/GrayPortRegistryServer.java" \
53-
"$ROOT/modules/gray.a85/source/PortBindingGate85.java" \
54-
"$ROOT/modules/gray.a85/source/Gray85PortRegistryServer.java" 2>&1 | grep -i error || echo " OK"
55-
56-
# 4. Futures (DemocraticAIServer)
77+
for entry in \
78+
"$ROOT/modules/gray/source/PortBindingGate.java" \
79+
"$ROOT/modules/gray/source/GrayPortRegistryServer.java" \
80+
"$ROOT/modules/gray.a85/source/PortBindingGate85.java" \
81+
"$ROOT/modules/gray.a85/source/Gray85PortRegistryServer.java"; do
82+
[[ -f "$entry" ]] && javac --release 21 -d "$OUT" -cp "$CP" -sourcepath "$SOURCE_PATHS" "$entry"
83+
done
84+
echo " OK"
85+
5786
echo "[4/8] Futures (DemocraticAIServer)..."
58-
find "$ROOT/modules/red/Futures/source" -name "*.java" > /tmp/futures.txt 2>/dev/null
59-
if [ -s /tmp/futures.txt ]; then
60-
javac -d "$OUT" -cp "$CP" -sourcepath "$ROOT/source:$ROOT/modules/red/Futures/source" @/tmp/futures.txt 2>&1 | grep -i error || echo " OK"
61-
else
62-
echo " SKIP (no source found)"
63-
fi
64-
rm -f /tmp/futures.txt
87+
list="$TMP_ROOT/nwe-futures.$$.txt"
88+
find "$ROOT/modules/red/Futures/source" -type f -name '*.java' -print > "$list" 2>/dev/null || true
89+
compile_list futures "$list" "$SOURCE_PATHS:$ROOT/modules/red/Futures/source"
6590

66-
# 5. StrernaryDirectory
6791
echo "[5/8] StrernaryDirectory (port 2000)..."
68-
javac -d "$OUT" -cp "$CP" -sourcepath "$ROOT/source" \
69-
"$ROOT/source/strernary/StrernaryDirectoryServer.java" 2>&1 | grep -i error || echo " OK"
92+
if [[ -f "$ROOT/source/strernary/StrernaryDirectoryServer.java" ]]; then
93+
javac --release 21 -d "$OUT" -cp "$CP" -sourcepath "$SOURCE_PATHS" "$ROOT/source/strernary/StrernaryDirectoryServer.java"
94+
echo " OK"
95+
else
96+
echo " SKIP (source not found)"
97+
fi
7098

71-
# 6. AE6E66
7299
echo "[6/8] AE6E66 (UK Parliament)..."
73-
find "$ROOT/modules/AE6E66/source" -name "*.java" > /tmp/ae6e66.txt 2>/dev/null
74-
if [ -s /tmp/ae6e66.txt ]; then
75-
javac -d "$OUT" -cp "$CP" -sourcepath "$ROOT/source:$ROOT/modules/AE6E66/source" @/tmp/ae6e66.txt 2>&1 | grep -i error || echo " OK"
76-
fi
77-
rm -f /tmp/ae6e66.txt
100+
list="$TMP_ROOT/nwe-ae6e66.$$.txt"
101+
find "$ROOT/modules/AE6E66/source" -type f -name '*.java' -print > "$list" 2>/dev/null || true
102+
compile_list ae6e66 "$list" "$SOURCE_PATHS:$ROOT/modules/AE6E66/source"
78103

79-
# 7. Green.Durham.Grass.and.Herb (GDGH)
80104
echo "[7/8] Green.Durham.Grass.and.Herb (GDGH)..."
81-
find "$ROOT/modules/Green.Durham.Grass.and.Herb/source" -name "*.java" > /tmp/gdgh.txt 2>/dev/null
82-
if [ -s /tmp/gdgh.txt ]; then
83-
javac -d "$OUT" -cp "$CP" -sourcepath "$ROOT/source:$ROOT/modules/Green.Durham.Grass.and.Herb/source" @/tmp/gdgh.txt 2>&1 | grep -i error || echo " OK"
84-
fi
85-
rm -f /tmp/gdgh.txt
105+
list="$TMP_ROOT/nwe-gdgh.$$.txt"
106+
find "$ROOT/modules/Green.Durham.Grass.and.Herb/source" -type f -name '*.java' -print > "$list" 2>/dev/null || true
107+
compile_list gdgh "$list" "$SOURCE_PATHS:$ROOT/modules/Green.Durham.Grass.and.Herb/source"
86108

87-
# 8. Verify key classes exist
88-
echo "[8/8] Verifying..."
109+
echo "[8/8] Verifying key classes..."
89110
MISSING=0
90-
for cls in Main.class source/CaliforniaFBIServer.class source/CaliforniaCIAServer.class \
91-
source/CaliforniaNSAServer.class source/DukeUniversityServer.class \
92-
source/StanfordLibraryServer.class modules/gray/source/GrayPortRegistryServer.class \
93-
modules/gray/a85/source/Gray85PortRegistryServer.class \
94-
source/AE6E66Main.class \
95-
strernary/StrernaryDirectoryServer.class; do
96-
if [ ! -f "$OUT/$cls" ]; then
111+
for cls in \
112+
Main.class source/CaliforniaFBIServer.class source/CaliforniaCIAServer.class \
113+
source/CaliforniaNSAServer.class source/DukeUniversityServer.class \
114+
source/StanfordLibraryServer.class modules/gray/source/GrayPortRegistryServer.class \
115+
modules/gray/a85/source/Gray85PortRegistryServer.class source/AE6E66Main.class \
116+
strernary/StrernaryDirectoryServer.class; do
117+
if [[ ! -f "$OUT/$cls" ]]; then
97118
echo " [MISSING] $cls"
98119
MISSING=$((MISSING + 1))
99120
fi
100121
done
101-
if [ $MISSING -eq 0 ]; then
102-
echo " All key classes present."
122+
123+
if (( MISSING != 0 )); then
124+
echo "[FAIL] $MISSING key compiled classes are missing." >&2
125+
exit 1
103126
fi
104127

128+
echo " All key classes present."
105129
echo ""
106130
echo "═══════════════════════════════════════════════════════════════"
107-
echo " Compilation complete. Restart with:"
108-
echo " bash scripts/start-backend-modules.sh --stop"
109-
echo " bash scripts/start-backend-modules.sh"
131+
echo " Compilation complete."
110132
echo "═══════════════════════════════════════════════════════════════"

0 commit comments

Comments
 (0)