#!/bin/bash # Run `cargo test` on an installed Debian crate, e.g. in an autopkgtest. # # Requires dev-dependencies to be installed. If you give extra flags such as # "--all-features", then these features' dependencies must also be installed. set -e pkg="$1" ver="$2" if [ -z "$pkg" -o -z "$ver" ]; then echo >&2 "Usage: $0 []" exit 2 fi shift 2 pkgdir="/usr/share/cargo/registry/${pkg}-${ver}" if [ ! -d "$pkgdir" ]; then echo >&2 "crate directory not found: $pkgdir" exit 1 fi cd "$pkgdir" rundir=$(mktemp -d) # https://stackoverflow.com/a/14812383 inside "trap" avoids running handler twice trap 'excode=$?; rm -rf "'"$rundir"'"; trap - EXIT' EXIT HUP INT QUIT PIPE TERM # set envvars necessary for cargo-debian-wrapper export DEB_CARGO_CRATE="${pkg}_${ver}" export CARGO_HOME="$rundir/debian/cargo_home" mkdir -p "$CARGO_HOME" mkdir -p "$rundir/registry" . <(dpkg-buildflags --export) . <(dpkg-architecture -s) RUST_TYPE="$(rustc --version --verbose | sed -ne 's/^host: //p')" export DEB_HOST_RUST_TYPE="$RUST_TYPE" export DEB_BUILD_RUST_TYPE="$RUST_TYPE" export DEB_TARGET_RUST_TYPE="$RUST_TYPE" export CARGO_TARGET_DIR="$rundir/target" export PATH="/usr/share/cargo/bin:$PATH" # run the test! cargo prepare-debian "$rundir/registry" --link-from-system cargo test "$@"