Newer
Older
# do_tests {lisp invocation} {scripts-regex}
Gary King
committed
# - read lisp forms one at a time from standard input
# - quit with exit status 0 on getting eof
# - quit with exit status >0 if an unhandled error occurs
usage () {
echo "$0 [lisp invocation] [scripts-regex]"
echo " - read lisp forms one at a time from matching scripts"
echo " - quit with exit status 0 on getting eof"
echo " - quit with exit status >0 if an unhandled error occurs"
echo " you need to supply the .script in the second argument"
echo " lisps include abcl, allegro, allegromodern, ccl (clozure),"
Francois-Rene Rideau
committed
echo " clisp, cmucl, ecl, gcl, gclcvs, sbcl, scl and xcl."
echo "OPTIONS:"
echo " -d -- debug mode"
echo " -h -- show this message."
echo " -u -- upgrade tests."
unset DEBUG_ASDF_TEST upgrade clean_load
while getopts "duhc" OPTION
export DEBUG_ASDF_TEST=t
c)
clean_load=t
;;
h)
usage
exit 1
;;
esac
done
shift $(($OPTIND - 1))
if [ x"$1" = "xhelp" ]; then
if [ -z "$*" ]; then
scripts="$*"
sok=1
command="$1" eval="$2"
Francois-Rene Rideau
committed
rm -f ~/.cache/common-lisp/"`pwd`"/* || true
( cd .. && DO $command $eval '(or #.(load "test/script-support.lisp") #.(asdf-test::compile-asdf-script))' )
if [ $? -ne 0 ] ; then
echo "Compilation FAILED" >&2
else
echo "Compiled OK" >&2
test_count=0
test_pass=0
test_fail=0
failed_list=""
Francois-Rene Rideau
committed
for i in $scripts ;
do
echo "Testing: $i" >&2
test_count=`expr "$test_count" + 1`
Francois-Rene Rideau
committed
rm -f ~/.cache/common-lisp/"`pwd`"/* || true
test_pass=`expr "$test_pass" + 1`
else
test_fail=`expr "$test_fail" + 1`
failed_list="$failed_list $i"
sok=0
fi
Francois-Rene Rideau
committed
echo >&2
echo >&2
done
echo >&2
echo "-#---------------------------------------" >&2
echo "Ran $test_count tests: " >&2
echo " $test_pass passing and $test_fail failing" >&2
if [ $test_fail -eq 0 ] ; then
echo "all tests apparently successful" >&2
echo success > ../build/results/status
else
echo "failing test(s): $failed_list" >&2
fi
echo "-#---------------------------------------" >&2
echo >&2
}
# terminate on error
set -e
command= flags= nodebug= eval=
abcl)
command="${ABCL:-abcl}"
flags="--noinit --nosystem --noinform"
Francois-Rene Rideau
committed
eval="--eval" ;;
#flags="-q"
Francois-Rene Rideau
committed
nodebug="-batch"
eval="-e" ;;
Francois-Rene Rideau
committed
flags="-q"
nodebug="-batch"
eval="-e" ;;
Francois-Rene Rideau
committed
flags="--no-init --quiet"
nodebug="--batch"
eval="--eval" ;;
clisp)
command="${CLISP:-clisp}"
flags="-norc --silent -ansi -I "
nodebug="-on-error exit"
eval="-x" ;;
# cmucl likes to have its executable called lisp, but so does scl
# Please use a symlink or an exec ... "$@" trampoline script.
command="${CMUCL:-cmucl}"
Francois-Rene Rideau
committed
flags="-noinit"
nodebug="-batch"
eval="-eval" ;;
flags="-norc -load sys:cmp"
eval="-eval" ;;
ecl_bytecodes)
command="${ECL:-ecl}"
flags="-norc -eval (ext::install-bytecodes-compiler)"
Francois-Rene Rideau
committed
eval="-eval" ;;
Francois-Rene Rideau
committed
gcl)
export GCL_ANSI=t
command="${GCL:-gcl}"
flags="-batch"
eval="-eval" ;;
gclcvs)
export GCL_ANSI=t
Francois-Rene Rideau
committed
command="${GCLCVS:-gclcvs}"
flags="-batch"
eval="-eval" ;;
Francois-Rene Rideau
committed
lispworks)
# If you have a licensed copy of lispworks,
# you can obtain the "lispworks" binary with, e.g.
# echo '(hcl:save-image "/lispworks" :environment nil)' > /tmp/build.lisp ;
# ./lispworks-6-0-0-x86-linux -siteinit - -init - -build /tmp/build.lisp
Francois-Rene Rideau
committed
flags="-siteinit - -init -"
eval="-eval" ;;
mkcl)
command="${MKCL:-mkcl}"
flags="-norc"
eval="-eval" ;;
sbcl)
command="${SBCL:-sbcl}"
flags="--noinform --userinit /dev/null --sysinit /dev/null" # --eval (require'asdf)
nodebug="--disable-debugger"
scl)
command="${SCL:-scl}"
flags="-noinit"
nodebug="-batch"
eval="-eval" ;;
xcl)
command="${XCL:-xcl}"
flags="--no-userinit --no-siteinit"
eval="--eval" ;;
Francois-Rene Rideau
committed
*)
echo "Unsupported lisp: $1" >&2
echo "Please add support to run-tests.sh" >&2
exit 42 ;;
if ! type "$command" > /dev/null ; then
Francois-Rene Rideau
committed
echo "lisp implementation not found: $command" >&2
Francois-Rene Rideau
committed
exit 43
fi
ASDFDIR="$(cd .. ; /bin/pwd)"
export CL_SOURCE_REGISTRY="${ASDFDIR}"
export ASDF_OUTPUT_TRANSLATIONS="(:output-translations (\"${ASDFDIR}\" (\"${ASDFDIR}/build/fasls\" :implementation)) :ignore-inherited-configuration)"
if [ -z "${DEBUG_ASDF_TEST}" ] ; then
command="$command $nodebug"
fi
Francois-Rene Rideau
committed
create_config () {
mkdir -p ../build/test-source-registry-conf.d ../build/test-asdf-output-translations-conf.d
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
upgrade_tags () {
if [ -n "$TEST_ASDF_TAGS" ] ; then
echo $TEST_ASDF_TAGS ; return
fi
# 1.37 is the last release by Daniel Barlow
# 1.97 is the last release before Gary King takes over
# 1.369 is the last release by Gary King
# 2.000 to 2.019 and 2.20 to 2.27 and beyond are Faré's "stable" releases
echo 1.37 1.97 1.369
git tag -l '2.0??'
git tag -l '2.??'
}
extract_tagged_asdf () {
ver=$1
file=build/asdf-${tag}.lisp ;
if [ ! -f $file ] ; then
case $ver in
1.*|2.0*|2.2[0-6])
git show ${tag}:asdf.lisp > $file ;;
*)
echo "Don't know how to extract asdf.lisp for version $tag"
exit 55
;;
esac
fi
}
run_upgrade_tests () {
su=test/script-support.lisp
lu="(load\"$su\")"
lv="$command $eval $lu $eval" ;
for tag in `upgrade_tags` ; do
for x in load-system load-lisp load-lisp-compile-load-fasl load-fasl just-load-fasl ; do
lo="(asdf-test::load-asdf-lisp \"${tag}\")" ;
echo "Testing upgrade from ASDF ${tag} using method $x" ;
extract_tagged_asdf $tag
case ${lisp}:$tag:$x in
abcl:2.0[01][1-9]:*|abcl:2.2[1-2]:*)
: Skip, because it is so damn slow ;;
ccl:1.*|ccl:2.0[01]*)
: Skip, because ccl broke old asdf ;;
clisp:1.*|clisp:2.0[01]*)
: Skip, because ccl broke old asdf ;;
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
cmucl:1.*|cmucl:2.00*|cmucl:2.01[0-4]:*)
: Skip, CMUCL has problems before 2.014.7 due to source-registry upgrade ;;
ecl*:1.*|ecl*:2.0[01]*|ecl*:2.20:*)
: Skip, because of various ASDF issues ;;
gcl:1.*|gcl:2.0*|gcl:2.2[0-6]*) : Skip old versions that do not support GCL 2.6 ;;
mkcl:1.*|mkcl:2.0[01]*|mkcl:2.2[0-3]:*)
: Skip, because MKCL is only supported starting with 2.24 ;;
xcl:1.*|xcl:2.00*|xcl:2.01[0-4]:*|xcl:*)
: XCL support starts with ASDF 2.014.2 - It also hangs badly during upgrade. ;;
*) (set -x ; case $x in
load-system) l="$lo (asdf-test::load-asdf-system)" ;;
load-lisp) l="$lo (asdf-test::load-asdf-lisp)" ;;
load-lisp-compile-load-fasl) l="$lo (asdf-test::compile-load-asdf)" ;;
load-fasl) l="$lo (asdf-test::load-asdf-fasl)" ;;
just-load-fasl) l="(asdf-test::load-asdf-fasl)" ;;
*) echo "WTF?" ; exit 2 ;; esac ;
$lv "(asdf-test::test-asdf $l)" ) ||
{ echo "upgrade FAILED" ; exit 1 ;} ;; esac ;
done ; done 2>&1 | tee build/results/${lisp}-upgrade.text
}
run_tests () {
create_config
mkdir -p ../build/results
echo failure > ../build/results/status
thedate=`date "+%Y-%m-%d"`
do_tests "$command" "$eval" 2>&1 | \
tee "../build/results/${lisp}.text" "../build/results/${lisp}-${thedate}.save"
read a < ../build/results/status
clean_up
if [ success = "$a" ] ; then ## exit code
return 0
else
echo "To view full results and failures, try the following command:" >&2
echo " less -p ABORTED build/results/${lisp}.text" >&2
return 1
fi
rm -rf ../build/test-source-registry-conf.d ../build/test-asdf-output-translations-conf.d
test_clean_load () {
gcl|cmucl) return 0 ;; # These are hopeless
nop=build/results/${lisp}-nop.text
load=build/results/${lisp}-load.text
${command} ${eval} \
'(or #.(setf *load-verbose* nil) #.(load "test/script-support.lisp") #.(asdf-test::exit-lisp 0))' \
> $nop 2>&1
${command} ${eval} \
'(or #.(setf *load-verbose* nil) #.(load "build/asdf.lisp") #.(asdf/image:quit 0))' \
> $load 2>&1
if diff $nop $load ; then
echo "GOOD: Loading ASDF on $lisp produces no message" >&2 ; return 0
else
echo "BAD: Loading ASDF on $lisp produces messages" >&2 ; return 1
fi
}
if [ -z "$command" ] ; then
echo "Error: cannot find or do not know how to run Lisp named $lisp"
elif [ -n "$clean_load" ] ; then
test_clean_load
elif [ -n "$upgrade" ] ; then
run_upgrade_tests
else