JAVA_RELEASE=25 case "$(uname -s)" in CYGWIN*|MINGW*|MSYS*) SEP=";" ;; *) SEP=":" ;; esac MODULES="api service ui-console ui-desktop" DEPS_api="" DEPS_service="api" DEPS_ui_console="api service" DEPS_ui_desktop="api service" RUNTIME_LIB_DIRS="pico jaxb gson openjfx" EXECUTABLES="ui-console ui-desktop" MAINCLASS_ui_console="market.guess.ui.console.App" MAINCLASS_ui_desktop="market.guess.ui.desktop.Launcher" JAVA_HOME_DIR=$(java -XshowSettings:properties -version 2>&1 | tr -d '\r' | sed -n 's/^ *java\.home = //p') case "$(uname -s)" in CYGWIN*|MINGW*|MSYS*) JAVA_HOME_DIR=$(cygpath -u "$JAVA_HOME_DIR" 2>/dev/null || echo "$JAVA_HOME_DIR") ;; esac JAR="$JAVA_HOME_DIR/bin/jar" [ -x "$JAR" ] || JAR="$JAVA_HOME_DIR/bin/jar.exe" if [ ! -x "$JAR" ]; then echo "Could not locate the 'jar' tool under $JAVA_HOME_DIR" >&2 exit 1 fi is_shippable_jar() { case "$1" in *-sources.jar | *-javadoc.jar | lib/jacoco/*) return 1 ;; *) return 0 ;; esac } LIBCP="" for j in lib/*/*.jar; do is_shippable_jar "$j" || continue LIBCP="$LIBCP${LIBCP:+$SEP}$j" done TMP="${TMPDIR:-/tmp}/gm-build" mkdir -p "$TMP" deps_of() { local v="DEPS_$(echo "$1" | tr '-' '_')" eval "printf '%s' \"\${$v}\"" } mainclass_of() { local v="MAINCLASS_$(echo "$1" | tr '-' '_')" eval "printf '%s' \"\${$v}\"" } # JAR manifest lines are capped at 72 bytes; a raw "Key: value" line trips # `line too long` once enough jars are on the Class-Path (openjfx pushed us # over it). Fold per spec: continuation lines start with a single space. write_manifest_attr() { local file="$1" line="$2: $3" : >"$file" while [ "${#line}" -gt 72 ]; do printf '%s\n' "${line:0:72}" >>"$file" line=" ${line:72}" done printf '%s\n\n' "$line" >>"$file" } module_cp() { local cp="" for d in "$@"; do cp="$cp${cp:+$SEP}build/classes/$d"; done printf '%s' "$cp" }