diff options
author | Rob Landley | 2006-03-09 22:04:33 +0000 |
---|---|---|
committer | Rob Landley | 2006-03-09 22:04:33 +0000 |
commit | 3a324754f88b913091eca8970c686f2e998028a9 (patch) | |
tree | 890ec06c87f5577738213a8ed474cfe69fe73030 | |
parent | 31e3610c4b71594c3b141a249ab2e5812c92980a (diff) | |
download | busybox-3a324754f88b913091eca8970c686f2e998028a9.zip busybox-3a324754f88b913091eca8970c686f2e998028a9.tar.gz |
I'm about to introduce tests that need to run as root (like mount.tests),
meaning we want to run them in a chroot environment. To help with this,
I worked out a utility function that makes it really easy to set up a chroot
environment.
-rwxr-xr-x | testsuite/testing.sh | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/testsuite/testing.sh b/testsuite/testing.sh index f16f4c7..08f4200 100755 --- a/testsuite/testing.sh +++ b/testsuite/testing.sh @@ -58,7 +58,7 @@ testing () { if [ $# -ne 5 ] then - echo "Test $1 has the wrong number of arguments" >&2 + echo "Test $1 has the wrong number of arguments ($# $*)" >&2 exit fi @@ -74,7 +74,7 @@ testing () echo -ne "$3" > expected echo -ne "$4" > input - echo -n -e "$5" | eval "$COMMAND $2" > actual + echo -ne "$5" | eval "$COMMAND $2" > actual RETVAL=$? cmp expected actual > /dev/null @@ -98,3 +98,30 @@ testing () return $RETVAL } + +# Recursively grab an executable and all the libraries needed to run it. +# Source paths beginning with / will be copied into destpath, otherwise +# the file is assumed to already be there and only its library dependencies +# are copied. + +function mkchroot +{ + [ $# -lt 2 ] && return + + dest=$1 + shift + for i in "$@" + do + if [ "${i:0:1}" == "/" ] + then + [ -f "$dest/$i" ] && continue + d=`echo "$i" | grep -o '.*/'` && + mkdir -p "$dest/$d" && + cat "$i" > "$dest/$i" && + chmod +x "$dest/$i" + else + i="$dest/$i" + fi + mkchroot "$dest" $(ldd "$i" | egrep -o '/.* ') + done +} |