150 lines
5.6 KiB
Bash
Executable File
150 lines
5.6 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
echo "=== Building j3270 Terminal Emulator ==="
|
|
|
|
# 1. Locate Java toolchain
|
|
JAVAC_BIN=""
|
|
JAR_BIN=""
|
|
|
|
if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/javac" ] && [ -x "$JAVA_HOME/bin/jar" ]; then
|
|
JAVAC_BIN="$JAVA_HOME/bin/javac"
|
|
JAR_BIN="$JAVA_HOME/bin/jar"
|
|
elif command -v javac >/dev/null 2>&1 && command -v jar >/dev/null 2>&1; then
|
|
JAVAC_BIN="$(command -v javac)"
|
|
JAR_BIN="$(command -v jar)"
|
|
else
|
|
# Check common SDKMAN / macOS / Linux JDK locations
|
|
for h in "$HOME/.sdkman/candidates/java/current" \
|
|
/usr/lib/jvm/java-21-openjdk* \
|
|
/usr/lib/jvm/java-17-openjdk* \
|
|
/usr/lib/jvm/java-11-openjdk* \
|
|
/usr/lib/jvm/default-java \
|
|
/Library/Java/JavaVirtualMachines/*/Contents/Home; do
|
|
if [ -d "$h" ] && [ -x "$h/bin/javac" ] && [ -x "$h/bin/jar" ]; then
|
|
export JAVA_HOME="$h"
|
|
JAVAC_BIN="$JAVA_HOME/bin/javac"
|
|
JAR_BIN="$JAVA_HOME/bin/jar"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -z "$JAVAC_BIN" ] || [ -z "$JAR_BIN" ]; then
|
|
echo "ERROR: Java development tools (javac, jar) could not be found."
|
|
echo "Please install JDK 11+ or set JAVA_HOME."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using Java compiler: $JAVAC_BIN"
|
|
echo "Using JAR utility: $JAR_BIN"
|
|
|
|
BUILD_DIR="$SCRIPT_DIR/build"
|
|
rm -rf "$BUILD_DIR/lib3270j" "$BUILD_DIR/j3270" "$BUILD_DIR/MANIFEST.MF"
|
|
mkdir -p "$BUILD_DIR/lib3270j" "$BUILD_DIR/j3270"
|
|
|
|
# 2. Compile lib3270j
|
|
echo "Compiling lib3270j..."
|
|
find "$SCRIPT_DIR/lib3270j/src/main/java" -name "*.java" > "$BUILD_DIR/lib_sources.txt"
|
|
if [ ! -s "$BUILD_DIR/lib_sources.txt" ]; then
|
|
echo "ERROR: No sources found in lib3270j/src/main/java"
|
|
exit 1
|
|
fi
|
|
"$JAVAC_BIN" -d "$BUILD_DIR/lib3270j" @"$BUILD_DIR/lib_sources.txt"
|
|
|
|
# 3. Compile j3270
|
|
echo "Compiling j3270 application..."
|
|
find "$SCRIPT_DIR/j3270/src/main/java" -name "*.java" > "$BUILD_DIR/app_sources.txt"
|
|
if [ ! -s "$BUILD_DIR/app_sources.txt" ]; then
|
|
echo "ERROR: No sources found in j3270/src/main/java"
|
|
exit 1
|
|
fi
|
|
"$JAVAC_BIN" -cp "$BUILD_DIR/lib3270j" -d "$BUILD_DIR/j3270" @"$BUILD_DIR/app_sources.txt"
|
|
|
|
# Clean up temporary source lists
|
|
rm -f "$BUILD_DIR/lib_sources.txt" "$BUILD_DIR/app_sources.txt"
|
|
|
|
# Copy any resources if present
|
|
if [ -d "$SCRIPT_DIR/j3270/src/main/resources" ]; then
|
|
cp -r "$SCRIPT_DIR/j3270/src/main/resources/"* "$BUILD_DIR/j3270/" 2>/dev/null || true
|
|
fi
|
|
if [ -d "$SCRIPT_DIR/lib3270j/src/main/resources" ]; then
|
|
cp -r "$SCRIPT_DIR/lib3270j/src/main/resources/"* "$BUILD_DIR/lib3270j/" 2>/dev/null || true
|
|
fi
|
|
|
|
# 4. Package executable JAR
|
|
echo "Packaging j3270.jar..."
|
|
printf "Manifest-Version: 1.0\nMain-Class: haus.nightmare.j3270.J3270App\nImplementation-Title: j3270\nImplementation-Version: 0.1.0\nCreated-By: j3270 build_all.sh\n\n" > "$BUILD_DIR/MANIFEST.MF"
|
|
|
|
"$JAR_BIN" cvfm "$BUILD_DIR/j3270.jar" "$BUILD_DIR/MANIFEST.MF" \
|
|
-C "$BUILD_DIR/lib3270j" . \
|
|
-C "$BUILD_DIR/j3270" . > /dev/null
|
|
|
|
echo "=== Build Complete ==="
|
|
echo "Executable JAR created: $BUILD_DIR/j3270.jar"
|
|
ls -lh "$BUILD_DIR/j3270.jar"
|
|
|
|
# 5. Compile and run tests if requested
|
|
if [ "$1" = "test" ] || [ "$1" = "check" ]; then
|
|
echo "=== Running Tests ==="
|
|
TEST_BUILD_DIR="$BUILD_DIR/test-classes"
|
|
mkdir -p "$TEST_BUILD_DIR"
|
|
JUNIT_CP=$(find "$HOME/.gradle/caches/modules-2/files-2.1/" -name "*.jar" 2>/dev/null | grep -E "junit|opentest|apiguardian" | tr "\n" ":" || true)
|
|
FULL_CP="$BUILD_DIR/lib3270j:$BUILD_DIR/j3270:$JUNIT_CP"
|
|
|
|
find "$SCRIPT_DIR/lib3270j/src/test/java" -name "*.java" > "$BUILD_DIR/test_sources.txt" 2>/dev/null || true
|
|
if [ -d "$SCRIPT_DIR/j3270/src/test/java" ]; then
|
|
find "$SCRIPT_DIR/j3270/src/test/java" -name "*.java" >> "$BUILD_DIR/test_sources.txt" 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -s "$BUILD_DIR/test_sources.txt" ] && [ -n "$JUNIT_CP" ]; then
|
|
echo "Compiling tests..."
|
|
"$JAVAC_BIN" -cp "$FULL_CP" -d "$TEST_BUILD_DIR" @"$BUILD_DIR/test_sources.txt"
|
|
rm -f "$BUILD_DIR/test_sources.txt"
|
|
|
|
echo "Executing tests with JUnit Platform..."
|
|
cat << 'EOF' > "$BUILD_DIR/TestRunner.java"
|
|
import org.junit.platform.launcher.*;
|
|
import org.junit.platform.launcher.core.*;
|
|
import org.junit.platform.launcher.listeners.*;
|
|
import org.junit.platform.engine.discovery.*;
|
|
import static org.junit.platform.engine.discovery.DiscoverySelectors.*;
|
|
import java.io.PrintWriter;
|
|
|
|
public class TestRunner {
|
|
public static void main(String[] args) {
|
|
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
|
|
.selectors(
|
|
selectPackage("haus.nightmare.lib3270j.graphics"),
|
|
selectPackage("haus.nightmare.lib3270j.datastream"),
|
|
selectPackage("haus.nightmare.lib3270j.screen"),
|
|
selectPackage("haus.nightmare.lib3270j.protocol")
|
|
)
|
|
.build();
|
|
|
|
Launcher launcher = LauncherFactory.create();
|
|
SummaryGeneratingListener listener = new SummaryGeneratingListener();
|
|
launcher.registerTestExecutionListeners(listener);
|
|
launcher.execute(request);
|
|
|
|
TestExecutionSummary summary = listener.getSummary();
|
|
summary.printTo(new PrintWriter(System.out));
|
|
summary.printFailuresTo(new PrintWriter(System.err));
|
|
|
|
if (summary.getTotalFailureCount() > 0) {
|
|
System.exit(1);
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
"$JAVAC_BIN" -cp "$FULL_CP:$TEST_BUILD_DIR" -d "$BUILD_DIR" "$BUILD_DIR/TestRunner.java"
|
|
JAVA_BIN_EXEC="${JAVA_HOME:+$JAVA_HOME/bin/java}"
|
|
JAVA_BIN_EXEC="${JAVA_BIN_EXEC:-java}"
|
|
"$JAVA_BIN_EXEC" -cp "$FULL_CP:$TEST_BUILD_DIR:$BUILD_DIR" TestRunner
|
|
fi
|
|
fi
|
|
|