annotate src/capnproto-0.6.0/super-test.sh @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 45360b968bf4
children
rev   line source
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"