Merge pull request #1645 from feckert/master
[feed/packages.git] / lang / perl / files / perl-run_tests.sh
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