diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/randomtest | 130 | ||||
-rwxr-xr-x | scripts/randomtest.loop | 36 |
2 files changed, 98 insertions, 68 deletions
diff --git a/scripts/randomtest b/scripts/randomtest index 6b7db92..8d0d79e 100755 --- a/scripts/randomtest +++ b/scripts/randomtest @@ -1,86 +1,88 @@ #!/bin/sh -# Select which libc to build against -libc="glibc" # assumed native -# static, cross-compilation -libc="uclibc" +# If not specified in environment... +if ! test "$LIBC"; then + # Select which libc to build against + LIBC="glibc" + LIBC="uclibc" +fi # x86 32-bit: -uclibc_cross="i486-linux-uclibc-" +#CROSS_COMPILER_PREFIX="i486-linux-uclibc-" # My system has strange prefix for x86 64-bit uclibc: -#uclibc_cross="x86_64-pc-linux-gnu-" +#CROSS_COMPILER_PREFIX="x86_64-pc-linux-gnu-" -test -d tree || exit 1 +if test $# -lt 2 || ! test -d "$1" || test -e "$2"; then + echo "Usage: $0 SRC_DIR TMP_DIR" + echo + echo "SRC_DIR will be copied to TMP_DIR directory." + echo "Then a random build will be performed." + echo + echo "Useful variables:" + echo "\$LIBC, \$CROSS_COMPILER_PREFIX, \$MAKEOPTS" + exit 1 +fi -dir=test.$$ -while test -e "$dir" -o -e failed."$dir"; do - dir=test."$RANDOM" -done +cp -dpr -- "$1" "$2" || { echo "copy error"; exit 1; } +cd -- "$2" || { echo "cd $dir error"; exit 1; } -cp -dpr tree "$dir" || exit 1 -cd "$dir" || exit 1 - -echo "Running randconfig test in $dir..." >&2 - -make randconfig >/dev/null || exit 1 +# Generate random config +make randconfig >/dev/null || { echo "randconfig error"; exit 1; } +# Tweak resulting config cat .config \ -| grep -v ^CONFIG_DEBUG_PESSIMIZE= \ +| grep -v CONFIG_DEBUG_PESSIMIZE \ | grep -v CONFIG_WERROR \ -| cat >.config.new -mv .config.new .config -#echo CONFIG_WERROR=y >>.config -echo '# CONFIG_WERROR is not set' >>.config - -test "$libc" = glibc && { -cat .config \ -| grep -v CONFIG_STATIC \ +| grep -v CONFIG_CROSS_COMPILER_PREFIX \ | grep -v CONFIG_SELINUX \ | grep -v CONFIG_EFENCE \ | grep -v CONFIG_DMALLOC \ -| cat >.config.new +\ +| grep -v CONFIG_RFKILL \ +>.config.new mv .config.new .config -echo '# CONFIG_STATIC is not set' >>.config -} +echo '# CONFIG_DEBUG_PESSIMIZE is not set' >>.config +echo '# CONFIG_WERROR is not set' >>.config +echo "CONFIG_CROSS_COMPILER_PREFIX=\"${CROSS_COMPILER_PREFIX}\"" >>.config -test "$libc" = uclibc && { -cat .config \ -| grep -v ^CONFIG_SELINUX= \ -| grep -v ^CONFIG_EFENCE= \ -| grep -v ^CONFIG_DMALLOC= \ -| grep -v ^CONFIG_BUILD_LIBBUSYBOX= \ -| grep -v ^CONFIG_PAM= \ -| grep -v ^CONFIG_TASKSET= \ -| grep -v ^CONFIG_UNICODE_SUPPORT= \ -| grep -v ^CONFIG_PIE= \ -| grep -v CONFIG_STATIC \ -| grep -v CONFIG_CROSS_COMPILER_PREFIX \ -| cat >.config.new -mv .config.new .config -echo 'CONFIG_CROSS_COMPILER_PREFIX="'"$uclibc_cross"'"' >>.config -echo 'CONFIG_STATIC=y' >>.config -} +# If glibc, don't build static +if test x"$LIBC" = x"glibc"; then + cat .config \ + | grep -v CONFIG_STATIC \ + >.config.new + mv .config.new .config + echo '# CONFIG_STATIC is not set' >>.config +fi + +# If glibc, build static, and remove some things +# likely to not work on uclibc. +if test x"$LIBC" = x"uclibc"; then + cat .config \ + | grep -v CONFIG_STATIC \ + | grep -v CONFIG_BUILD_LIBBUSYBOX \ + | grep -v CONFIG_TASKSET \ + | grep -v CONFIG_UNICODE_SUPPORT \ + | grep -v CONFIG_PIE \ + >.config.new + mv .config.new .config + echo 'CONFIG_STATIC=y' >>.config +fi -# If STATIC, remove some things +# If STATIC, remove some things. # PAM with static linking is probably pointless # (but I need to try - now I don't have libpam.a on my system, only libpam.so) -grep -q ^CONFIG_STATIC= .config && { -cat .config \ -| grep -v ^CONFIG_PAM= \ -| cat >.config.new -mv .config.new .config -} +if grep -q "^CONFIG_STATIC=y" .config; then + cat .config \ + | grep -v CONFIG_PAM \ + >.config.new + mv .config.new .config +fi # Regenerate .config with default answers for yanked-off options -{ yes "" | make oldconfig >/dev/null; } || exit 1 - -nice -n 10 make $MAKEOPTS 2>&1 | tee -a make.log +# (most of default answers are "no"). +{ yes "" | make oldconfig >/dev/null; } || { echo "oldconfig error"; exit 1; } -test -x busybox && { - cd .. - rm -rf "$dir" - exit 0 -} +# Build! +nice -n 10 make $MAKEOPTS 2>&1 | tee make.log -cd .. -mv "$dir" "failed.$dir" -exit 1 +# Return exitcode 1 if busybox executable does not exist +test -x busybox diff --git a/scripts/randomtest.loop b/scripts/randomtest.loop index 28edb67..311536d 100755 --- a/scripts/randomtest.loop +++ b/scripts/randomtest.loop @@ -1,10 +1,38 @@ #!/bin/sh +test -d "$1" || { echo "'$1' is not a directory"; exit 1; } +test -x "$1/scripts/randomtest" || { echo "No scripts/randomtest in '$1'"; exit 1; } + +export LIBC="uclibc" +export CROSS_COMPILER_PREFIX="i486-linux-uclibc-" +export MAKEOPTS="-j9" + cnt=0 fail=0 - while sleep 1; do - echo "Passes: $cnt Failures: $fail" - ./randomtest >/dev/null || exit #let fail++ - let cnt++ + echo "Passes: $cnt Failures: $fail" + dir="test.$$" + while test -e "$dir" -o -e "failed.$dir"; do + dir="test.$$.$RANDOM" + done + echo "Running randconfig test in $dir..." + if ! "$1/scripts/randomtest" "$1" "$dir" >/dev/null; then + mv -- "$dir" "failed.$dir" + echo "Failed build in: failed.$dir" + exit 1 # you may comment this out... + let fail++ + else + ( + cd -- "$dir/testsuite" || exit 1 + echo "Running testsuite in $dir..." + SKIP_KNOWN_BUGS=1 SKIP_INTERNET_TESTS=1 ./runtest -v >runtest.log 2>&1 + ) + if test $? != 0; then + echo "Failed runtest in $dir" + exit 1 + fi + tail -n10 -- "$dir/testsuite/runtest.log" + rm -rf -- "$dir" + fi + let cnt++ done |