Mercurial > hg > sonic-visualiser
comparison vext @ 1772:128c4544036d
Update Vext
author | Chris Cannam |
---|---|
date | Fri, 09 Mar 2018 09:00:48 +0000 |
parents | bf4a7015033e |
children |
comparison
equal
deleted
inserted
replaced
1771:bd14a0f69b60 | 1772:128c4544036d |
---|---|
5 # shellcheck disable=SC2002 | 5 # shellcheck disable=SC2002 |
6 | 6 |
7 sml="$VEXT_SML" | 7 sml="$VEXT_SML" |
8 | 8 |
9 set -eu | 9 set -eu |
10 | |
11 # avoid gussying up output | |
12 export HGPLAIN=true | |
10 | 13 |
11 mydir=$(dirname "$0") | 14 mydir=$(dirname "$0") |
12 program="$mydir/vext.sml" | 15 program="$mydir/vext.sml" |
13 | 16 |
14 hasher= | 17 hasher= |
38 | 41 |
39 if [ -x "$gen_out" ]; then | 42 if [ -x "$gen_out" ]; then |
40 exec "$gen_out" "$@" | 43 exec "$gen_out" "$@" |
41 fi | 44 fi |
42 | 45 |
43 # We need one of Poly/ML, SML/NJ, or MLton. Since we're running a | 46 # We need one of Poly/ML, SML/NJ, MLton, or MLKit. Since we're running |
44 # single-file SML program as if it were a script, our order of | 47 # a single-file SML program as if it were a script, our order of |
45 # preference is based on startup speed, except in the local_install | 48 # preference is usually based on startup speed. An exception is the |
46 # case where we retain a persistent binary. | 49 # local_install case, where we retain a persistent binary |
47 | 50 |
48 if [ -z "$sml" ]; then | 51 if [ -z "$sml" ]; then |
49 if [ -n "$local_install" ] && mlton 2>&1 | grep -q 'MLton'; then | 52 if [ -n "$local_install" ] && mlton 2>&1 | grep -q 'MLton'; then |
50 sml="mlton" | 53 sml="mlton" |
51 elif sml -h 2>&1 | grep -q 'Standard ML of New Jersey'; then | 54 elif sml -h 2>&1 | grep -q 'Standard ML of New Jersey'; then |
52 sml="smlnj" | 55 sml="smlnj" |
53 # We would prefer Poly/ML to SML/NJ, except that Poly v5.7 has a | 56 # We would prefer Poly/ML to SML/NJ, except that Poly v5.7 has a |
54 # nasty bug that occasionally causes it to deadlock on startup. | 57 # nasty bug that occasionally causes it to deadlock on startup. |
55 # That appears to be fixed in their repo, so we could promote it | 58 # That is fixed in v5.7.1, so we could promote it up the order |
56 # up the order again at some point in future | 59 # again at some point in future |
57 elif echo | poly -v 2>/dev/null | grep -q 'Poly/ML'; then | 60 elif echo | poly -v 2>/dev/null | grep -q 'Poly/ML'; then |
58 sml="poly" | 61 sml="poly" |
59 elif mlton 2>&1 | grep -q 'MLton'; then | 62 elif mlton 2>&1 | grep -q 'MLton'; then |
60 sml="mlton" | 63 sml="mlton" |
64 # MLKit is at the bottom because it leaves compiled files around | |
65 # in an MLB subdir in the current directory | |
66 elif mlkit 2>&1 | grep -q 'MLKit'; then | |
67 sml="mlkit" | |
61 else cat 1>&2 <<EOF | 68 else cat 1>&2 <<EOF |
62 | 69 |
63 ERROR: No supported SML compiler or interpreter found | 70 ERROR: No supported SML compiler or interpreter found |
64 EOF | 71 EOF |
65 cat 1>&2 <<EOF | 72 cat 1>&2 <<EOF |
69 | 76 |
70 Please ensure you have one of the following SML implementations | 77 Please ensure you have one of the following SML implementations |
71 installed and present in your PATH, and try again. | 78 installed and present in your PATH, and try again. |
72 | 79 |
73 1. Standard ML of New Jersey | 80 1. Standard ML of New Jersey |
74 - often found in a distribution package called: smlnj | 81 - may be found in a distribution package called: smlnj |
75 - executable name: sml | 82 - executable name: sml |
76 | 83 |
77 2. Poly/ML | 84 2. Poly/ML |
78 - often found in a distribution package called: polyml | 85 - may be found in a distribution package called: polyml |
79 - executable name: poly | 86 - executable name: poly |
80 | 87 |
81 3. MLton | 88 3. MLton |
82 - often found in a distribution package called: mlton | 89 - may be found in a distribution package called: mlton |
83 - executable name: mlton | 90 - executable name: mlton |
91 | |
92 4. MLKit | |
93 - may be found in a distribution package called: mlkit | |
94 - executable name: mlkit | |
84 | 95 |
85 EOF | 96 EOF |
86 exit 2 | 97 exit 2 |
87 fi | 98 fi |
88 fi | 99 fi |
113 echo "[Precompiling Vext binary...]" 1>&2 | 124 echo "[Precompiling Vext binary...]" 1>&2 |
114 echo "val _ = main ()" | cat "$program" - > "$gen_sml" | 125 echo "val _ = main ()" | cat "$program" - > "$gen_sml" |
115 mlton -output "$gen_out" "$gen_sml" | 126 mlton -output "$gen_out" "$gen_sml" |
116 fi | 127 fi |
117 "$gen_out" "$@" ;; | 128 "$gen_out" "$@" ;; |
129 mlkit) | |
130 if [ ! -x "$gen_out" ]; then | |
131 echo "[Precompiling Vext binary...]" 1>&2 | |
132 echo "val _ = main ()" | cat "$program" - > "$gen_sml" | |
133 mlkit -output "$gen_out" "$gen_sml" | |
134 fi | |
135 "$gen_out" "$@" ;; | |
118 smlnj) | 136 smlnj) |
119 cat "$program" | ( | 137 cat "$program" | ( |
120 cat <<EOF | 138 cat <<EOF |
121 val smlrun__cp = | 139 val smlrun__cp = |
122 let val x = !Control.Print.out in | 140 let val x = !Control.Print.out in |