perl-run_tests.sh (2018B)
1 #!/bin/sh 2 3 PERL_TESTSDIR="/usr/share/perl/perl-tests" 4 PERL_LIBDIR="/usr/lib/perl5/%%PERL_VERSION%%/" 5 PERL_DISABLEDTESTS="%%PERL_DISABLEDTESTS%%" 6 7 no_run="" 8 manual_run="" 9 manual_run_no_base="" 10 11 while [ ! -z "$1" ]; do 12 case $1 in 13 -n) 14 no_run="yes" 15 ;; 16 -m) 17 manual_run="yes" 18 ;; 19 -mb) 20 manual_run="yes" 21 manual_run_no_base="yes" 22 ;; 23 --help) 24 echo "run_tests.sh [-n|-m|-mb|--help]" 25 echo "" 26 echo "Options:" 27 echo " -n Just prepare the environment. Don't actually run any tests" 28 echo " -m Run tests manually according to MANIFEST, instead of whatever t/TEST chooses" 29 echo " -mb Don't run base tests. Implies -m" 30 echo " --help Print this help ;)" 31 echo "" 32 exit 0 33 ;; 34 *) 35 echo "Invalid argument: $1" 36 ;; 37 esac 38 shift 39 done 40 41 if [ ! -f "$PERL_TESTSDIR/__prepared" ]; then 42 # Many tests insist on having PERL5LIB in $PERL_TESTSDIR/lib. However, 43 # that directory may also contain tests. Some of them(FindBin.t in particular) 44 # also demand being located in a directory ending with "lib". So we can't do symlink 45 # trickery here. 46 # Our solution is to just copy PERL5LIB over. 47 if [ -d "$PERL_TESTSDIR/lib" ]; then 48 cp -a "$PERL_LIBDIR/"* "$PERL_TESTSDIR/lib/" 49 else 50 ln -s "$PERL_LIBDIR" "$PERL_TESTSDIR/lib" 51 fi 52 53 ln -s /usr/bin/perl "$PERL_TESTSDIR/perl" 54 ln -s /usr/bin/perl "$PERL_TESTSDIR/t/perl" 55 touch "$PERL_TESTSDIR/__prepared" 56 57 for i in $PERL_DISABLEDTESTS; do 58 echo "Disabling $i tests" 59 sed 's!^'$i'.*$!!' -i $PERL_TESTSDIR/MANIFEST 60 done 61 62 cat $PERL_TESTSDIR/MANIFEST | grep -v '^$' > $PERL_TESTSDIR/MANIFEST_NEW 63 rm $PERL_TESTSDIR/MANIFEST 64 mv $PERL_TESTSDIR/MANIFEST_NEW $PERL_TESTSDIR/MANIFEST 65 fi 66 67 if [ -z "$no_run" ]; then 68 cd "$PERL_TESTSDIR/t" 69 if [ ! -z "$manual_run" ]; then 70 for i in $(cat ../MANIFEST | sed 's/\t.*$//g' | grep '\.t$'); do 71 if [ ! -z "$manual_run_no_base" ] && [ ! -z "$(echo $i | grep '^t/')" ]; then 72 continue; 73 fi 74 echo "Running $i" 75 ./TEST ../$i 76 echo "" 77 done 78 else 79 ./perl TEST 80 fi 81 fi