#!/bin/bash
|
|
# Override HOME. Bash processes $HOME/.profile.
|
HOME=$(pwd)/home
|
mkdir -p "$HOME"
|
export HOME
|
|
# Pre-set TMPDIR. The content of system tmp could collide with the tests.
|
TMPDIR=$(pwd)/tmp
|
mkdir -p "$TMPDIR"
|
export TMPDIR
|
|
if tty -s; then
|
# If we have a tty, just run the tests
|
gmake "$@"
|
else
|
# If we don't have tty, run the tests in screen(1) to make the tests
|
# pass successfully. But screen needs some pty already, so create one
|
# using python. We can't run the tests directly in python as pty module
|
# does not simulate terminal, it merely provides pty device. Also we
|
# set the TERM environment variable to 'xterm' so that screen does not
|
# start confused setting TERM to 'dumb' which breaks the tests again.
|
# Also we have to collect the test output ourselves, since userland
|
# infrastructure captures the screen output which is full of terminal
|
# control codes. To offset anything user may have set in his .screenrc
|
# we use /dev/null as screen config. Last touch is to unset TSTP signal
|
# which is set if we run 'gmake test' via ssh. Unsetting it to default
|
# makes the tests pass even in this case.
|
python -c '
|
import pty;
|
import signal;
|
import sys;
|
|
signal.signal(signal.SIGTSTP, signal.SIG_DFL)
|
pty.spawn(sys.argv[1:])
|
' env TERM=xterm /usr/bin/screen -c /dev/null bash -c 'gmake '"$@"' 2>&1 | tee outfile'
|
fi
|