JAL-3830 add the windows bash script to getdown files and install4j installers
[jalview.git] / utils / getdown / jalviewc-windows
1 #!/usr/bin/env bash
2
3 ARG1=$1
4 DIR="$(dirname "$(readlink -f "$0")")"
5
6 # check to see if $1 is set and is not start of other cli set args
7 OPEN=""
8 if [ -n "${ARG1}" -a "${ARG1}" = "${ARG1#-}" -a "${ARG1}" != "open" ]; then
9  # first argument exists and does not start with a "-" and is not "open"
10  OPEN="-open"
11 fi
12
13 APPDIR="${DIR}"
14 JAVA="${APPDIR}/jre/bin/java"
15 GETDOWNTXT="${APPDIR}/getdown.txt"
16 CLASSPATH=""
17 if [ -e "${GETDOWNTXT}" ]; then
18   for JAR in $(grep -e '^code\s*=\s*' "${GETDOWNTXT}" | sed -e 's/^code\s*=\s*//;'); do
19     [ -n "${CLASSPATH}" ] && CLASSPATH="${CLASSPATH}:"
20     CLASSPATH="${CLASSPATH}${APPDIR}/${JAR}"
21   done
22 else
23   echo "Cannot find getdown.txt" >&2
24   exit 3
25 fi
26
27 if [ \! -e "${JAVA}" ]; then
28   echo "Cannot find bundled java, using system and hoping for the best!" >&2
29   JAVA=java
30 fi
31
32 declare -a ARGS=("${@}")
33
34 # change paths for Cygwin or Windows Subsystem for Linux (WSL)
35 if [ "$(uname -o)" = "Cygwin" ]; then
36   echo "When using relative paths in args within Cygwin, please start with './' or '../'" >&2
37   CLASSPATH=$(cygpath -pw "${CLASSPATH}")
38   # now for some arg paths fun. only translating paths starting with './', '../' or '/'
39   ARGS=()
40   for ARG in "${@}"; do
41     if [ "${ARG}" != "${ARG#./}" -o "${ARG}" != "${ARG#/}" -o "${ARG}" != "${ARG#../}" ]; then
42       ARGS=( "${ARGS[@]}" "$(cygpath -aw "${ARG}")" )
43     else
44       ARGS=( "${ARGS[@]}" "${ARG}" )
45     fi
46   done
47   JAVA="${JAVA}.exe"
48 elif uname -r | grep Microsoft >/dev/null; then
49   echo "When using relative paths in args within WSL. please start with './' or '../'" >&2
50   WCLASSPATH=""
51   OLD_IFS="${IFS}"
52   IFS=":"
53   for JAR in $CLASSPATH; do
54     [ -n "${WCLASSPATH}" ] && WCLASSPATH="${WCLASSPATH};"
55     WCLASSPATH="${WCLASSPATH}$(wslpath -aw "${JAR}")"
56   done
57   CLASSPATH="${WCLASSPATH}"
58   IFS="${OLD_IFS}"
59   ARGS=()
60   for ARG in "${@}"; do
61     if [ "${ARG}" != "${ARG#./}" -o "${ARG}" != "${ARG#/}" -o "${ARG}" != "${ARG#../}" ]; then
62       # annoyingly wslpath does not work if the file doesn't exist!
63       ARGBASENAME="$(basename "${ARG}")"
64       ARGDIRNAME="$(dirname "${ARG}")"
65       ARGS=( "${ARGS[@]}" "$(wslpath -aw "${ARGDIRNAME}")\\${ARGBASENAME}" )
66     else
67       ARGS=( "${ARGS[@]}" "${ARG}" )
68     fi
69   done
70   JAVA="${JAVA}.exe"
71 fi
72
73 # don't quote $OPEN
74 "${JAVA}" -cp "${CLASSPATH}" jalview.bin.Launcher ${OPEN} "${ARGS[@]}"