summaryrefslogtreecommitdiffstats
path: root/tools/_util.sh
blob: d6e8db52da558a514685a5598ae3f2e91d282bb3 (plain)
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
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"
}