annotate src/capnproto-0.6.0/super-test.sh @ 84:08ae793730bd

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