cannam@147
|
1 #! /usr/bin/env bash
|
cannam@147
|
2
|
cannam@147
|
3 set -euo pipefail
|
cannam@147
|
4
|
cannam@147
|
5 doit() {
|
cannam@147
|
6 echo "@@@@ $@"
|
cannam@147
|
7 "$@"
|
cannam@147
|
8 }
|
cannam@147
|
9
|
cannam@147
|
10 QUICK=
|
cannam@147
|
11
|
cannam@147
|
12 PARALLEL=$(nproc 2>/dev/null || echo 1)
|
cannam@147
|
13
|
cannam@147
|
14 while [ $# -gt 0 ]; do
|
cannam@147
|
15 case "$1" in
|
cannam@147
|
16 -j* )
|
cannam@147
|
17 PARALLEL=${1#-j}
|
cannam@147
|
18 ;;
|
cannam@147
|
19 test )
|
cannam@147
|
20 ;; # nothing
|
cannam@147
|
21 quick )
|
cannam@147
|
22 QUICK=quick
|
cannam@147
|
23 ;;
|
cannam@147
|
24 caffeinate )
|
cannam@147
|
25 # Re-run preventing sleep.
|
cannam@147
|
26 shift
|
cannam@147
|
27 exec caffeinate -ims $0 $@
|
cannam@147
|
28 ;;
|
cannam@147
|
29 tmpdir )
|
cannam@147
|
30 # Clone to a temp directory.
|
cannam@147
|
31 if [ "$#" -lt 2 ]; then
|
cannam@147
|
32 echo "usage: $0 tmpdir NAME [COMMAND]" >&2
|
cannam@147
|
33 exit 1
|
cannam@147
|
34 fi
|
cannam@147
|
35 DIR=/tmp/$2
|
cannam@147
|
36 shift 2
|
cannam@147
|
37 if [ -e $DIR ]; then
|
cannam@147
|
38 if [ "${DIR/*..*}" = "" ]; then
|
cannam@147
|
39 echo "NO DO NOT PUT .. IN THERE IT'S GOING TO GO IN /tmp AND I'M GONNA DELETE IT" >&2
|
cannam@147
|
40 exit 1
|
cannam@147
|
41 fi
|
cannam@147
|
42 if [ ! -e "$DIR/super-test.sh" ]; then
|
cannam@147
|
43 echo "$DIR exists and it doesn't look like one of mine." >&2
|
cannam@147
|
44 exit 1
|
cannam@147
|
45 fi
|
cannam@147
|
46 # make distcheck leaves non-writable files when it fails, so we need to chmod to be safe.
|
cannam@147
|
47 chmod -R +w $DIR
|
cannam@147
|
48 rm -rf $DIR
|
cannam@147
|
49 fi
|
cannam@147
|
50 git clone . $DIR
|
cannam@147
|
51 cd $DIR
|
cannam@147
|
52 exec ./super-test.sh "$@"
|
cannam@147
|
53 ;;
|
cannam@147
|
54 remote )
|
cannam@147
|
55 if [ "$#" -lt 2 ]; then
|
cannam@147
|
56 echo "usage: $0 remote HOST [COMMAND]" >&2
|
cannam@147
|
57 exit 1
|
cannam@147
|
58 fi
|
cannam@147
|
59 HOST=$2
|
cannam@147
|
60 shift 2
|
cannam@147
|
61 echo "========================================================================="
|
cannam@147
|
62 echo "Pushing code to $HOST..."
|
cannam@147
|
63 echo "========================================================================="
|
cannam@147
|
64 BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
cannam@147
|
65 ssh $HOST '(chmod -fR +w tmp-test-capnp || true) && rm -rf tmp-test-capnp && mkdir tmp-test-capnp && git init tmp-test-capnp'
|
cannam@147
|
66 git push ssh://$HOST/~/tmp-test-capnp "$BRANCH:test"
|
cannam@147
|
67 ssh $HOST "cd tmp-test-capnp && git checkout test"
|
cannam@147
|
68 exec ssh $HOST "cd tmp-test-capnp && ./super-test.sh $@ && cd .. && rm -rf tmp-test-capnp"
|
cannam@147
|
69 ;;
|
cannam@147
|
70 compiler )
|
cannam@147
|
71 if [ "$#" -lt 2 ]; then
|
cannam@147
|
72 echo "usage: $0 compiler CXX_NAME" >&2
|
cannam@147
|
73 exit 1
|
cannam@147
|
74 fi
|
cannam@147
|
75 export CXX="$2"
|
cannam@147
|
76 shift
|
cannam@147
|
77 ;;
|
cannam@147
|
78 clang )
|
cannam@147
|
79 export CXX=clang++
|
cannam@147
|
80 ;;
|
cannam@147
|
81 gcc-4.9 )
|
cannam@147
|
82 export CXX=g++-4.9
|
cannam@147
|
83 ;;
|
cannam@147
|
84 gcc-4.8 )
|
cannam@147
|
85 export CXX=g++-4.8
|
cannam@147
|
86 ;;
|
cannam@147
|
87 gcc-4.7 )
|
cannam@147
|
88 export CXX=g++-4.7
|
cannam@147
|
89 ;;
|
cannam@147
|
90 mingw )
|
cannam@147
|
91 if [ "$#" -ne 2 ]; then
|
cannam@147
|
92 echo "usage: $0 mingw CROSS_HOST" >&2
|
cannam@147
|
93 exit 1
|
cannam@147
|
94 fi
|
cannam@147
|
95 CROSS_HOST=$2
|
cannam@147
|
96
|
cannam@147
|
97 cd c++
|
cannam@147
|
98 test -e configure || doit autoreconf -i
|
cannam@147
|
99 test ! -e Makefile || (echo "ERROR: Directory unclean!" >&2 && false)
|
cannam@147
|
100
|
cannam@147
|
101 export WINEPATH='Z:\usr\'"$CROSS_HOST"'\lib;Z:\usr\lib\gcc\'"$CROSS_HOST"'\6.3-win32;Z:'"$PWD"'\.libs'
|
cannam@147
|
102
|
cannam@147
|
103 doit ./configure --host="$CROSS_HOST" --disable-shared CXXFLAGS='-static-libgcc -static-libstdc++'
|
cannam@147
|
104
|
cannam@147
|
105 doit make -j$PARALLEL check
|
cannam@147
|
106 doit make distclean
|
cannam@147
|
107 rm -f *-mingw.exe
|
cannam@147
|
108 exit 0
|
cannam@147
|
109 ;;
|
cannam@147
|
110 android )
|
cannam@147
|
111 # To install Android SDK:
|
cannam@147
|
112 # - Download command-line tools: https://developer.android.com/studio/index.html#command-tools
|
cannam@147
|
113 # - Run $SDK_HOME/tools/bin/sdkmanager platform-tools 'platforms;android-25' 'system-images;android-25;google_apis;armeabi-v7a' emulator 'build-tools;25.0.2' ndk-bundle
|
cannam@147
|
114 # - Run $SDK_HOME/tools/bin/avdmanager create avd -n capnp -k 'system-images;android-25;google_apis;armeabi-v7a' -b google_apis/armeabi-v7a
|
cannam@147
|
115 # - Run $SDK_HOME/ndk-bundle/build/tools/make_standalone_toolchain.py --arch arm --api 24 --install-dir $TOOLCHAIN_HOME
|
cannam@147
|
116 if [ "$#" -ne 4 ]; then
|
cannam@147
|
117 echo "usage: $0 android SDK_HOME TOOLCHAIN_HOME CROSS_HOST" >&2
|
cannam@147
|
118 exit 1
|
cannam@147
|
119 fi
|
cannam@147
|
120 SDK_HOME=$2
|
cannam@147
|
121 TOOLCHAIN_HOME=$3
|
cannam@147
|
122 CROSS_HOST=$4
|
cannam@147
|
123
|
cannam@147
|
124 cd c++
|
cannam@147
|
125 test -e configure || doit autoreconf -i
|
cannam@147
|
126 test ! -e Makefile || (echo "ERROR: Directory unclean!" >&2 && false)
|
cannam@147
|
127 doit ./configure --disable-shared
|
cannam@147
|
128 doit make -j$PARALLEL capnp capnpc-c++
|
cannam@147
|
129
|
cannam@147
|
130 cp capnp capnp-host
|
cannam@147
|
131 cp capnpc-c++ capnpc-c++-host
|
cannam@147
|
132
|
cannam@147
|
133 export PATH="$TOOLCHAIN_HOME/bin:$PATH"
|
cannam@147
|
134 doit make distclean
|
cannam@147
|
135 doit ./configure --host="$CROSS_HOST" --with-external-capnp --disable-shared CXXFLAGS='-pie -fPIE' CAPNP=./capnp-host CAPNPC_CXX=./capnpc-c++-host
|
cannam@147
|
136
|
cannam@147
|
137 doit make -j$PARALLEL
|
cannam@147
|
138 doit make -j$PARALLEL capnp-test
|
cannam@147
|
139
|
cannam@147
|
140 echo "Starting emulator..."
|
cannam@147
|
141 trap 'kill $(jobs -p)' EXIT
|
cannam@147
|
142 # TODO(someday): Speed up with KVM? Then maybe we won't have to skip fuzz tests?
|
cannam@147
|
143 $SDK_HOME/emulator/emulator -avd capnp -no-window &
|
cannam@147
|
144 $SDK_HOME/platform-tools/adb 'wait-for-device'
|
cannam@147
|
145 echo "Waiting for localhost to be resolvable..."
|
cannam@147
|
146 doit $SDK_HOME/platform-tools/adb shell 'while ! ping -c 1 localhost > /dev/null 2>&1; do sleep 1; done'
|
cannam@147
|
147 # TODO(cleanup): With 'adb shell' I find I cannot put files anywhere, so I'm using 'su' a
|
cannam@147
|
148 # lot here. There is probably a better way.
|
cannam@147
|
149 doit $SDK_HOME/platform-tools/adb shell 'su 0 tee /data/capnp-test > /dev/null' < capnp-test
|
cannam@147
|
150 doit $SDK_HOME/platform-tools/adb shell 'su 0 chmod a+rx /data/capnp-test'
|
cannam@147
|
151 doit $SDK_HOME/platform-tools/adb shell 'cd /data && CAPNP_SKIP_FUZZ_TEST=1 su 0 /data/capnp-test && echo ANDROID_""TESTS_PASSED' | tee android-test.log
|
cannam@147
|
152 grep -q ANDROID_TESTS_PASSED android-test.log
|
cannam@147
|
153
|
cannam@147
|
154 doit make distclean
|
cannam@147
|
155 rm -f capnp-host capnpc-c++-host
|
cannam@147
|
156 exit 0
|
cannam@147
|
157 ;;
|
cannam@147
|
158 cmake )
|
cannam@147
|
159 cd c++
|
cannam@147
|
160 rm -rf cmake-build
|
cannam@147
|
161 mkdir cmake-build
|
cannam@147
|
162 cd cmake-build
|
cannam@147
|
163 doit cmake -G "Unix Makefiles" ..
|
cannam@147
|
164 doit make -j$PARALLEL check
|
cannam@147
|
165 exit 0
|
cannam@147
|
166 ;;
|
cannam@147
|
167 exotic )
|
cannam@147
|
168 echo "========================================================================="
|
cannam@147
|
169 echo "MinGW 64-bit"
|
cannam@147
|
170 echo "========================================================================="
|
cannam@147
|
171 "$0" mingw x86_64-w64-mingw32
|
cannam@147
|
172 echo "========================================================================="
|
cannam@147
|
173 echo "MinGW 32-bit"
|
cannam@147
|
174 echo "========================================================================="
|
cannam@147
|
175 "$0" mingw i686-w64-mingw32
|
cannam@147
|
176 echo "========================================================================="
|
cannam@147
|
177 echo "Android"
|
cannam@147
|
178 echo "========================================================================="
|
cannam@147
|
179 "$0" android /home/kenton/android-sdk-linux /home/kenton/android-24 arm-linux-androideabi
|
cannam@147
|
180 echo "========================================================================="
|
cannam@147
|
181 echo "CMake"
|
cannam@147
|
182 echo "========================================================================="
|
cannam@147
|
183 "$0" cmake
|
cannam@147
|
184 exit 0
|
cannam@147
|
185 ;;
|
cannam@147
|
186 clean )
|
cannam@147
|
187 rm -rf tmp-staging
|
cannam@147
|
188 cd c++
|
cannam@147
|
189 if [ -e Makefile ]; then
|
cannam@147
|
190 doit make maintainer-clean
|
cannam@147
|
191 fi
|
cannam@147
|
192 rm -f capnproto-*.tar.gz samples/addressbook samples/addressbook.capnp.c++ \
|
cannam@147
|
193 samples/addressbook.capnp.h
|
cannam@147
|
194 exit 0
|
cannam@147
|
195 ;;
|
cannam@147
|
196 help )
|
cannam@147
|
197 echo "usage: $0 [COMMAND]"
|
cannam@147
|
198 echo "commands:"
|
cannam@147
|
199 echo " test Runs tests (the default)."
|
cannam@147
|
200 echo " clang Runs tests using Clang compiler."
|
cannam@147
|
201 echo " gcc-4.7 Runs tests using gcc-4.7."
|
cannam@147
|
202 echo " gcc-4.8 Runs tests using gcc-4.8."
|
cannam@147
|
203 echo " gcc-4.9 Runs tests using gcc-4.9."
|
cannam@147
|
204 echo " remote HOST Runs tests on HOST via SSH."
|
cannam@147
|
205 echo " mingw Cross-compiles to MinGW and runs tests using WINE."
|
cannam@147
|
206 echo " android Cross-compiles to Android and runs tests using emulator."
|
cannam@147
|
207 echo " clean Delete temporary files that may be left after failure."
|
cannam@147
|
208 echo " help Prints this help text."
|
cannam@147
|
209 exit 0
|
cannam@147
|
210 ;;
|
cannam@147
|
211 * )
|
cannam@147
|
212 echo "unknown command: $1" >&2
|
cannam@147
|
213 echo "try: $0 help" >&2
|
cannam@147
|
214 exit 1
|
cannam@147
|
215 ;;
|
cannam@147
|
216 esac
|
cannam@147
|
217 shift
|
cannam@147
|
218 done
|
cannam@147
|
219
|
cannam@147
|
220 # Build optimized builds because they catch more problems, but also enable debugging macros.
|
cannam@147
|
221 # Enable lots of warnings and make sure the build breaks if they fire. Disable strict-aliasing
|
cannam@147
|
222 # because GCC warns about code that I know is OK. Disable sign-compare because I've fixed more
|
cannam@147
|
223 # sign-compare warnings than probably all other warnings combined and I've never seen it flag a
|
cannam@147
|
224 # real problem. Disable unused parameters because it's stupidly noisy and never a real problem.
|
cannam@147
|
225 # Enable expensive release-gating tests.
|
cannam@147
|
226 export CXXFLAGS="-O2 -DDEBUG -Wall -Wextra -Werror -Wno-strict-aliasing -Wno-sign-compare -Wno-unused-parameter -DCAPNP_EXPENSIVE_TESTS=1"
|
cannam@147
|
227
|
cannam@147
|
228 STAGING=$PWD/tmp-staging
|
cannam@147
|
229
|
cannam@147
|
230 rm -rf "$STAGING"
|
cannam@147
|
231 mkdir "$STAGING"
|
cannam@147
|
232 mkdir "$STAGING/bin"
|
cannam@147
|
233 mkdir "$STAGING/lib"
|
cannam@147
|
234 export PATH=$STAGING/bin:$PATH
|
cannam@147
|
235 export LD_LIBRARY_PATH=$STAGING/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
cannam@147
|
236 export PKG_CONFIG_PATH=$STAGING/lib/pkgconfig
|
cannam@147
|
237
|
cannam@147
|
238 if [ "$QUICK" = quick ]; then
|
cannam@147
|
239 echo "************************** QUICK TEST ***********************************"
|
cannam@147
|
240 fi
|
cannam@147
|
241
|
cannam@147
|
242 echo "========================================================================="
|
cannam@147
|
243 echo "Building c++"
|
cannam@147
|
244 echo "========================================================================="
|
cannam@147
|
245
|
cannam@147
|
246 # Apple now aliases gcc to clang, so probe to find out what compiler we're really using.
|
cannam@147
|
247 if (${CXX:-g++} -dM -E -x c++ /dev/null 2>&1 | grep -q '__clang__'); then
|
cannam@147
|
248 IS_CLANG=yes
|
cannam@147
|
249 DISABLE_OPTIMIZATION_IF_GCC=
|
cannam@147
|
250 else
|
cannam@147
|
251 IS_CLANG=no
|
cannam@147
|
252 DISABLE_OPTIMIZATION_IF_GCC=-O0
|
cannam@147
|
253 fi
|
cannam@147
|
254
|
cannam@147
|
255 if [ $IS_CLANG = yes ]; then
|
cannam@147
|
256 # Don't fail out on this ridiculous "argument unused during compilation" warning.
|
cannam@147
|
257 export CXXFLAGS="$CXXFLAGS -Wno-error=unused-command-line-argument"
|
cannam@147
|
258 else
|
cannam@147
|
259 # GCC emits uninitialized warnings all over and they seem bogus. We use valgrind to test for
|
cannam@147
|
260 # uninitialized memory usage later on. GCC 4 also emits strange bogus warnings with
|
cannam@147
|
261 # -Wstrict-overflow, so we disable it.
|
cannam@147
|
262 CXXFLAGS="$CXXFLAGS -Wno-maybe-uninitialized -Wno-strict-overflow"
|
cannam@147
|
263 fi
|
cannam@147
|
264
|
cannam@147
|
265 cd c++
|
cannam@147
|
266 doit autoreconf -i
|
cannam@147
|
267 doit ./configure --prefix="$STAGING"
|
cannam@147
|
268 doit make -j$PARALLEL check
|
cannam@147
|
269
|
cannam@147
|
270 if [ $IS_CLANG = no ]; then
|
cannam@147
|
271 # Verify that generated code compiles with pedantic warnings. Make sure to treat capnp headers
|
cannam@147
|
272 # as system headers so warnings in them are ignored.
|
cannam@147
|
273 doit ${CXX:-g++} -isystem src -std=c++11 -fno-permissive -pedantic -Wall -Wextra -Werror \
|
cannam@147
|
274 -c src/capnp/test.capnp.c++ -o /dev/null
|
cannam@147
|
275 fi
|
cannam@147
|
276
|
cannam@147
|
277 echo "========================================================================="
|
cannam@147
|
278 echo "Testing c++ install"
|
cannam@147
|
279 echo "========================================================================="
|
cannam@147
|
280
|
cannam@147
|
281 doit make install
|
cannam@147
|
282
|
cannam@147
|
283 test "x$(which capnp)" = "x$STAGING/bin/capnp"
|
cannam@147
|
284 test "x$(which capnpc-c++)" = "x$STAGING/bin/capnpc-c++"
|
cannam@147
|
285
|
cannam@147
|
286 cd samples
|
cannam@147
|
287
|
cannam@147
|
288 doit capnp compile -oc++ addressbook.capnp -I"$STAGING"/include --no-standard-import
|
cannam@147
|
289 doit ${CXX:-g++} -std=c++11 addressbook.c++ addressbook.capnp.c++ -o addressbook \
|
cannam@147
|
290 $CXXFLAGS $(pkg-config --cflags --libs capnp)
|
cannam@147
|
291 echo "@@@@ ./addressbook (in various configurations)"
|
cannam@147
|
292 ./addressbook write | ./addressbook read
|
cannam@147
|
293 ./addressbook dwrite | ./addressbook dread
|
cannam@147
|
294 rm addressbook addressbook.capnp.c++ addressbook.capnp.h
|
cannam@147
|
295
|
cannam@147
|
296 doit capnp compile -oc++ calculator.capnp -I"$STAGING"/include --no-standard-import
|
cannam@147
|
297 doit ${CXX:-g++} -std=c++11 calculator-client.c++ calculator.capnp.c++ -o calculator-client \
|
cannam@147
|
298 $CXXFLAGS $(pkg-config --cflags --libs capnp-rpc)
|
cannam@147
|
299 doit ${CXX:-g++} -std=c++11 calculator-server.c++ calculator.capnp.c++ -o calculator-server \
|
cannam@147
|
300 $CXXFLAGS $(pkg-config --cflags --libs capnp-rpc)
|
cannam@147
|
301 rm -f /tmp/capnp-calculator-example-$$
|
cannam@147
|
302 ./calculator-server unix:/tmp/capnp-calculator-example-$$ &
|
cannam@147
|
303 sleep 0.1
|
cannam@147
|
304 ./calculator-client unix:/tmp/capnp-calculator-example-$$
|
cannam@147
|
305 kill %+
|
cannam@147
|
306 wait %+ || true
|
cannam@147
|
307 rm calculator-client calculator-server calculator.capnp.c++ calculator.capnp.h /tmp/capnp-calculator-example-$$
|
cannam@147
|
308
|
cannam@147
|
309 cd ..
|
cannam@147
|
310
|
cannam@147
|
311 if [ "$QUICK" = quick ]; then
|
cannam@147
|
312 doit make maintainer-clean
|
cannam@147
|
313 rm -rf "$STAGING"
|
cannam@147
|
314 exit 0
|
cannam@147
|
315 fi
|
cannam@147
|
316
|
cannam@147
|
317 echo "========================================================================="
|
cannam@147
|
318 echo "Testing --with-external-capnp"
|
cannam@147
|
319 echo "========================================================================="
|
cannam@147
|
320
|
cannam@147
|
321 doit make distclean
|
cannam@147
|
322 doit ./configure --prefix="$STAGING" --disable-shared \
|
cannam@147
|
323 --with-external-capnp CAPNP=$STAGING/bin/capnp
|
cannam@147
|
324 doit make -j$PARALLEL check
|
cannam@147
|
325
|
cannam@147
|
326 echo "========================================================================="
|
cannam@147
|
327 echo "Testing --disable-reflection"
|
cannam@147
|
328 echo "========================================================================="
|
cannam@147
|
329
|
cannam@147
|
330 doit make distclean
|
cannam@147
|
331 doit ./configure --prefix="$STAGING" --disable-shared --disable-reflection \
|
cannam@147
|
332 --with-external-capnp CAPNP=$STAGING/bin/capnp
|
cannam@147
|
333 doit make -j$PARALLEL check
|
cannam@147
|
334 doit make distclean
|
cannam@147
|
335
|
cannam@147
|
336 # Test 32-bit build now while we have $STAGING available for cross-compiling.
|
cannam@147
|
337 if [ "x`uname -m`" = "xx86_64" ]; then
|
cannam@147
|
338 echo "========================================================================="
|
cannam@147
|
339 echo "Testing 32-bit build"
|
cannam@147
|
340 echo "========================================================================="
|
cannam@147
|
341
|
cannam@147
|
342 if [[ "`uname`" =~ CYGWIN ]]; then
|
cannam@147
|
343 # It's just not possible to run cygwin32 binaries from within cygwin64.
|
cannam@147
|
344
|
cannam@147
|
345 # Build as if we are cross-compiling, using the capnp we installed to $STAGING.
|
cannam@147
|
346 doit ./configure --prefix="$STAGING" --disable-shared --host=i686-pc-cygwin \
|
cannam@147
|
347 --with-external-capnp CAPNP=$STAGING/bin/capnp
|
cannam@147
|
348 doit make -j$PARALLEL
|
cannam@147
|
349 doit make -j$PARALLEL capnp-test.exe
|
cannam@147
|
350
|
cannam@147
|
351 # Expect a cygwin32 sshd to be listening at localhost port 2222, and use it
|
cannam@147
|
352 # to run the tests.
|
cannam@147
|
353 doit scp -P 2222 capnp-test.exe localhost:~/tmp-capnp-test.exe
|
cannam@147
|
354 doit ssh -p 2222 localhost './tmp-capnp-test.exe && rm tmp-capnp-test.exe'
|
cannam@147
|
355
|
cannam@147
|
356 doit make distclean
|
cannam@147
|
357
|
cannam@147
|
358 elif [ "x${CXX:-g++}" != "xg++-4.8" ]; then
|
cannam@147
|
359 doit ./configure CXX="${CXX:-g++} -m32" --disable-shared
|
cannam@147
|
360 doit make -j$PARALLEL check
|
cannam@147
|
361 doit make distclean
|
cannam@147
|
362 fi
|
cannam@147
|
363 fi
|
cannam@147
|
364
|
cannam@147
|
365 echo "========================================================================="
|
cannam@147
|
366 echo "Testing c++ uninstall"
|
cannam@147
|
367 echo "========================================================================="
|
cannam@147
|
368
|
cannam@147
|
369 doit ./configure --prefix="$STAGING"
|
cannam@147
|
370 doit make uninstall
|
cannam@147
|
371
|
cannam@147
|
372 echo "========================================================================="
|
cannam@147
|
373 echo "Testing c++ dist"
|
cannam@147
|
374 echo "========================================================================="
|
cannam@147
|
375
|
cannam@147
|
376 doit make -j$PARALLEL distcheck
|
cannam@147
|
377 doit make distclean
|
cannam@147
|
378 rm capnproto-*.tar.gz
|
cannam@147
|
379
|
cannam@147
|
380 if [ "x`uname`" = xLinux ]; then
|
cannam@147
|
381 echo "========================================================================="
|
cannam@147
|
382 echo "Testing generic Unix (no Linux-specific features)"
|
cannam@147
|
383 echo "========================================================================="
|
cannam@147
|
384
|
cannam@147
|
385 doit ./configure --disable-shared CXXFLAGS="$CXXFLAGS -DKJ_USE_FUTEX=0 -DKJ_USE_EPOLL=0"
|
cannam@147
|
386 doit make -j$PARALLEL check
|
cannam@147
|
387 doit make distclean
|
cannam@147
|
388 fi
|
cannam@147
|
389
|
cannam@147
|
390 echo "========================================================================="
|
cannam@147
|
391 echo "Testing with -fno-rtti and -fno-exceptions"
|
cannam@147
|
392 echo "========================================================================="
|
cannam@147
|
393
|
cannam@147
|
394 # GCC miscompiles capnpc-c++ when -fno-exceptions and -O2 are specified together. The
|
cannam@147
|
395 # miscompilation happens in one specific inlined call site of Array::dispose(), but this method
|
cannam@147
|
396 # is inlined in hundreds of other places without issue, so I have no idea how to narrow down the
|
cannam@147
|
397 # bug. Clang works fine. So, for now, we disable optimizations on GCC for -fno-exceptions tests.
|
cannam@147
|
398
|
cannam@147
|
399 doit ./configure --disable-shared CXXFLAGS="$CXXFLAGS -fno-rtti"
|
cannam@147
|
400 doit make -j$PARALLEL check
|
cannam@147
|
401 doit make distclean
|
cannam@147
|
402 doit ./configure --disable-shared CXXFLAGS="$CXXFLAGS -fno-exceptions $DISABLE_OPTIMIZATION_IF_GCC"
|
cannam@147
|
403 doit make -j$PARALLEL check
|
cannam@147
|
404 doit make distclean
|
cannam@147
|
405 doit ./configure --disable-shared CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions $DISABLE_OPTIMIZATION_IF_GCC"
|
cannam@147
|
406 doit make -j$PARALLEL check
|
cannam@147
|
407
|
cannam@147
|
408 # Valgrind is currently "experimental and mostly broken" on OSX and fails to run the full test
|
cannam@147
|
409 # suite, but I have it installed because it did manage to help me track down a bug or two. Anyway,
|
cannam@147
|
410 # skip it on OSX for now.
|
cannam@147
|
411 if [ "x`uname`" != xDarwin ] && which valgrind > /dev/null; then
|
cannam@147
|
412 doit make distclean
|
cannam@147
|
413
|
cannam@147
|
414 echo "========================================================================="
|
cannam@147
|
415 echo "Testing with valgrind"
|
cannam@147
|
416 echo "========================================================================="
|
cannam@147
|
417
|
cannam@147
|
418 doit ./configure --disable-shared CXXFLAGS="-g"
|
cannam@147
|
419 doit make -j$PARALLEL
|
cannam@147
|
420 doit make -j$PARALLEL capnp-test
|
cannam@147
|
421 # Running the fuzz tests under Valgrind is a great thing to do -- but it takes
|
cannam@147
|
422 # some 40 minutes. So, it needs to be done as a separate step of the release
|
cannam@147
|
423 # process, perhaps along with the AFL tests.
|
cannam@147
|
424 CAPNP_SKIP_FUZZ_TEST=1 doit valgrind --leak-check=full --track-fds=yes --error-exitcode=1 ./capnp-test
|
cannam@147
|
425 fi
|
cannam@147
|
426
|
cannam@147
|
427 doit make maintainer-clean
|
cannam@147
|
428
|
cannam@147
|
429 rm -rf "$STAGING"
|