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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#! /bin/bash
set -euo pipefail
doit() {
echo "@@@@ $@"
"$@"
}
if [ $# -gt 0 ]; then
if [ "x$1" == "xtest" ]; then
: # nothing
elif [ "x$1" == "xremote" ]; then
if [ "$#" -lt 2 ]; then
echo "usage: $0 remote HOST [COMMAND]" >&2
exit 1
fi
HOST=$2
shift 2
echo "========================================================================="
echo "Pushing code to $HOST..."
echo "========================================================================="
ssh $HOST 'rm -rf tmp-test-capnp && mkdir tmp-test-capnp && git init tmp-test-capnp'
git push ssh://$HOST/~/tmp-test-capnp master:test
ssh $HOST "cd tmp-test-capnp && git checkout test && ./super-test.sh $@ && cd .. && rm -rf tmp-test-capnp"
exit 0
elif [ "x$1" == "xclang" ]; then
export CXX=clang++
elif [ "x$1" == "xkenton" ]; then
cat << __EOF__
=========================================================================
*************************************************************************
_ _ ____ ____ ____
| | (_)_ __ _ ___ __ / ___|/ ___/ ___|
| | | | '_ \| | | \ \/ /____| | _| | | |
| |___| | | | | |_| |> <_____| |_| | |__| |___
|_____|_|_| |_|\__,_/_/\_\ \____|\____\____|
*************************************************************************
=========================================================================
__EOF__
$0 test
$0 clean
cat << __EOF__
=========================================================================
*************************************************************************
_ _ ____ _
| | (_)_ __ _ ___ __ / ___| | __ _ _ __ __ _
| | | | '_ \| | | \ \/ /____| | | |/ _` | '_ \ / _` |
| |___| | | | | |_| |> <_____| |___| | (_| | | | | (_| |
|_____|_|_| |_|\__,_/_/\_\ \____|_|\__,_|_| |_|\__, |
|___/
*************************************************************************
=========================================================================
__EOF__
$0 clang
$0 clean
cat << __EOF__
=========================================================================
*************************************************************************
___ ______ __ ____ _
/ _ \/ ___\ \/ / / ___| | __ _ _ __ __ _
| | | \___ \\ /_____| | | |/ _` | '_ \ / _` |
| |_| |___) / \_____| |___| | (_| | | | | (_| |
\___/|____/_/\_\ \____|_|\__,_|_| |_|\__, |
|___/
*************************************************************************
=========================================================================
__EOF__
$0 remote beat
cat << __EOF__
=========================================================================
*************************************************************************
____ _ _ ___ ____ ___ _____
/ ___|| | | |_ _| _ \ |_ _|_ _|
\___ \| |_| || || |_) | | | | |
___) | _ || || __/ | | | |
|____/|_| |_|___|_| |___| |_|
*************************************************************************
=========================================================================
__EOF__
exit 0
elif [ "x$1" == "xclean" ]; then
rm -rf tmp-staging
cd compiler
doit cabal clean
cd ../c++
if [ -e Makefile ]; then
doit make maintainer-clean
fi
rm -f capnproto-*.tar.gz samples/addressbook samples/addressbook.capnp.c++ \
samples/addressbook.capnp.h
rm -rf gtest
exit 0
elif [ "x$1" == "xhelp" ]; then
echo "usage: $0 [COMMAND]"
echo "commands:"
echo " test Runs tests (the default)."
echo " clang Runs tests using Clang compiler."
echo " remote HOST Runs tests on HOST via SSH."
echo " kenton Kenton's meta-test (uses hosts on Kenton's network)."
echo " clean Delete temporary files that may be left after failure."
echo " help Prints this help text."
exit 0
else
echo "unknown command: $1" >&2
echo "try: $0 help" >&2
exit 1
fi
fi
rm -rf tmp-staging
mkdir tmp-staging
STAGING=$PWD/tmp-staging
mkdir $STAGING/bin
mkdir $STAGING/lib
export PATH=$STAGING/bin:$PATH
export LD_LIBRARY_PATH=$STAGING/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
echo "========================================================================="
echo "Building compiler"
echo "========================================================================="
cd compiler
doit cabal install --bindir="$STAGING/bin" --libdir="$STAGING/lib" capnproto-compiler.cabal
doit cabal clean
cd ..
echo "========================================================================="
echo "Building c++"
echo "========================================================================="
if [ "x`uname`" == xDarwin ]; then
if [ ! -e ~/clang-3.2/bin/clang++ ]; then
echo "You need to put the clang-3.2 binaries in ~/clang-3.2." >&2
exit 1
fi
export CXX=~/clang-3.2/bin/clang++
SAMPLE_CXXFLAGS=-stdlib=libc++
else
SAMPLE_CXXFLAGS=
fi
cd c++
doit ./setup-autotools.sh | tr = -
doit autoreconf -i
doit ./configure --prefix="$STAGING"
doit make -j6 check
echo "========================================================================="
echo "Testing c++ install"
echo "========================================================================="
doit make install
cd samples
doit capnpc -oc++ addressbook.capnp -I"$STAGING"/include
doit ${CXX:-g++} -std=c++11 $SAMPLE_CXXFLAGS -I"$STAGING"/include -L"$STAGING"/lib \
addressbook.c++ addressbook.capnp.c++ -lcapnp -pthread -o addressbook
echo "@@@@ ./addressbook (in various configurations)"
./addressbook write | ./addressbook read
./addressbook dwrite | ./addressbook dread
rm addressbook addressbook.capnp.c++ addressbook.capnp.h
cd ..
doit make uninstall
echo "========================================================================="
echo "Testing c++ dist"
echo "========================================================================="
doit make distcheck
doit make distclean
rm capnproto-*.tar.gz
echo "========================================================================="
echo "Testing with -fno-rtti and -fno-exceptions"
echo "========================================================================="
doit ./configure CXXFLAGS=-fno-rtti
doit make -j6 check
doit make distclean
doit ./configure CXXFLAGS=-fno-exceptions
doit make -j6 check
doit make distclean
doit ./configure CXXFLAGS="-fno-rtti -fno-exceptions"
doit make -j6 check
doit make maintainer-clean
rm -rf "$STAGING"