forked from GaloisInc/cryptol
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cry
executable file
·121 lines (98 loc) · 3.37 KB
/
cry
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env bash
set -e
BIN=bin
QUICKTESTS="tests/issues tests/modsys tests/mono-binds tests/parser tests/regression tests/renamer"
function setup_external_tools() {
[[ -x "$BIN/test-runner" || -x "$BIN/test-runner.exe" ]] && return
cabal v2-install --install-method=copy --installdir="$BIN" test-lib
}
function show_usage() {
cat << EOM
Usage: $0 COMMAND COMMAND_OPTIONS
Available commands:
run Run Cryptol
build Build Cryptol
haddock Generate Haddock documentation
test Run some tests (may take a while)
quick-test Like "test" but run fewer tests by default
rpc-test Run RPC server tests
rpc-docs Check that the RPC documentation is up-to-date
exe-path Print the location of the local executable
check-docs Check the exercises embedded in the documentation
EOM
}
if [ "$#" == "0" ]; then
show_usage
exit 1
fi
COMMAND=$1
shift
case $COMMAND in
run) cabal v2-exec cryptol -- $* ;;
build)
echo Building Cryptol
# XXX: This is a workaround the fact that currently Cabal
# will not rebuild this file, even though it has TH code, that
# depends on the environment. For now, we temporarily modify the
# file, then build, then revert it back after build.
dirty_string="-- Last build $(date)"
echo "$dirty_string" >> src/GitRev.hs
if [[ -n "$RELEASE" ]]; then
sed -i.bak -e 's/^commitShortHash = .*$/commitShortHash = "UNKNOWN"/' \
-e 's/^commitHash = .*$/commitHash = "UNKNOWN"/' \
-e 's/^commitBranch = .*$/commitBranch = "UNKNOWN"/' \
-e 's/^commitDirty = .*$/commitDirty = False/' \
-e '/import qualified GitRev/d' \
src/Cryptol/Version.hs
rm -f src/Cryptol/Version.hs.bak
fi
cabal v2-build "$@" exe:cryptol
sed -i.bak "/^-- Last build/d" src/GitRev.hs
rm -f src/GitRev.hs.bak
;;
haddock) echo Building Haddock documentation && cabal v2-haddock ;;
quick-test)
echo Running quick tests
setup_external_tools
$BIN/test-runner --ext=.icry \
--exe=cabal \
-F v2-run -F -v0 -F exe:cryptol -F -- -F -b \
$QUICKTESTS
;;
test)
echo Running tests
setup_external_tools
if [ "$#" == "0" ]; then
if cabal v2-exec cryptol -- -v | grep -q 'FFI enabled'; then
TESTS=(tests/*)
else
GLOBIGNORE="tests/ffi"
TESTS=(tests/*)
unset GLOBIGNORE
fi
else
TESTS=("$*")
fi
$BIN/test-runner --ext=.icry \
--exe=cabal \
-F v2-run -F -v0 -F exe:cryptol -F -- -F -b \
"${TESTS[@]}"
;;
rpc-test)
echo Running RPC server tests
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
$DIR/cryptol-remote-api/run_rpc_tests.sh
;;
rpc-docs)
echo "Checking cryptol-remote-api docs (Cryptol.rst) are up-to-date with server"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
$DIR/cryptol-remote-api/check_docs.sh
;;
check-docs)
cabal v2-build exe:check-exercises
find ./docs/ProgrammingCryptol -name '*.tex' -print0 | xargs -0 -n1 cabal v2-exec check-exercises
;;
help) show_usage && exit 0 ;;
exe-path) cabal v2-exec which cryptol ;;
*) echo "Unrecognized command: $COMMAND" && show_usage && exit 1 ;;
esac