testm.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/bin/bash
  2. # t/testm.sh File::Temp
  3. # => $^X -Mblib blib/script/perlcc -S -e 'use File::Temp; print "ok"' -o file_temp
  4. #
  5. # How to installed skip modules:
  6. # t/testm.sh -s runs:
  7. # grep ^skip log.modules-$ver|perl -lane'print $F[1]'| xargs perl$ver -S cpan
  8. # perl$ver -S cpan `grep -v '#' t/mymodules`
  9. #
  10. # -t runs CPAN::Shell->testcc($module)
  11. # Example:
  12. # cwd=~/Perl/B-C; perl5.12.2d-nt -I$cwd/blib/arch -I$cwd/blib/lib $cwd/blib/script/perlcc -S -r -Wb=-O1 -v 4 t/test.t
  13. function help {
  14. echo "t/testm.sh [OPTIONS] [module|modules-file]..."
  15. echo " -q quiet"
  16. echo " -k keep temp. files on PASS"
  17. echo " -D<arg> add debugging flags"
  18. echo " -f<arg> add optimisation flags"
  19. echo " -O<arg> add optimisation flags"
  20. echo " -l log"
  21. echo " -o orig. no -Mblib, use installed modules (5.6, 5.8)"
  22. echo " -t run the module tests also, not only use Module (experimental)"
  23. echo " -F run failing modules only"
  24. echo " -s install skipped (missing) modules"
  25. echo " -T time compilation and run"
  26. echo " -h help"
  27. }
  28. # use the actual perl from the Makefile (perl5.8.8,
  29. # perl5.10.0d-nt, perl5.11.0, ...)
  30. PERL=`grep "^PERL =" Makefile|cut -c8-`
  31. PERL=${PERL:-perl}
  32. Mblib="-Iblib/arch -Iblib/lib"
  33. v513="`$PERL -e'print (($] < 5.013005) ? q() : q(-fno-fold,-fno-warnings))'`"
  34. function vcmd {
  35. test -n "$QUIET" || echo $*
  36. $*
  37. }
  38. function pass {
  39. echo -e -n "\033[1;32mPASS \033[0;0m"
  40. shift
  41. echo $*
  42. echo
  43. }
  44. function fail {
  45. echo -e -n "\033[1;31mFAIL \033[0;0m"
  46. shift
  47. echo $*
  48. echo
  49. }
  50. [ -n "$v513" ] && PERLCC_OPTS="$PERLCC_OPTS -Wb=$v513"
  51. #PERLCC_OPTS=v513
  52. while getopts "hokltTsFD:O:f:qv" opt
  53. do
  54. if [ "$opt" = "o" ]; then Mblib=" "; init; fi
  55. if [ "$opt" = "q" ]; then QUIET=1; fi
  56. if [ "$opt" = "v" ]; then QUIET=0; PERLCC_OPTS="$PERLCC_OPTS -v6"; fi
  57. if [ "$opt" = "k" ]; then KEEP="-S"; fi
  58. if [ "$opt" = "D" ]; then PERLCC_OPTS="$PERLCC_OPTS -Wb=-D${OPTARG}"; COPTS="$COPTS,-D${OPTARG}"; fi
  59. if [ "$opt" = "O" ]; then PERLCC_OPTS="$PERLCC_OPTS -Wb=-O${OPTARG}"; COPTS="$COPTS,-O${OPTARG}"; fi
  60. if [ "$opt" = "f" ]; then PERLCC_OPTS="$PERLCC_OPTS -Wb=-f${OPTARG}"; COPTS="$COPTS,-f${OPTARG}"; fi
  61. if [ "$opt" = "l" ]; then TEST="-log"; fi
  62. if [ "$opt" = "t" ]; then TEST="-t"; fi
  63. if [ "$opt" = "T" ]; then PERLCC_OPTS="$PERLCC_OPTS --time"; PERLCC_TIMEOUT=120; fi
  64. if [ "$opt" = "s" ]; then
  65. v=$($PERL -It -Mmodules -e'print perlversion')
  66. if [ -f log.modules-$v ]; then # and not older than a few days
  67. echo $PERL -S cpan `grep ^skip log.modules-$v | perl -anle 'print $F[1]'`
  68. $PERL -S cpan $(grep ^skip log.modules-$v | perl -anle 'print $F[1]')
  69. else
  70. echo $PERL -S cpan $($PERL $Mblib -It -Mmodules -e'$,=" "; print skip_modules')
  71. $PERL -S cpan $($PERL $Mblib -It -Mmodules -e'$,=" "; print skip_modules')
  72. fi
  73. exit
  74. fi
  75. if [ "$opt" = "F" ]; then
  76. v=$($PERL -It -Mmodules -e'print perlversion')
  77. if [ -f log.modules-$v ]; then # and not older than a few days
  78. echo t/testm.sh `grep ^fail log.modules-$v | perl -anle 'print $F[1]'`
  79. for m in $(grep ^fail log.modules-$v | perl -anle 'print $F[1]'); do t/testm.sh -q $m; done
  80. else
  81. echo "Error: log.modules-$v not found"
  82. fi
  83. exit
  84. fi
  85. if [ "$opt" = "h" ]; then help; exit; fi
  86. done
  87. if [ -z "$QUIET" ]; then
  88. make
  89. else
  90. make --silent >/dev/null
  91. fi
  92. # need to shift the options
  93. while [ -n "$1" -a "${1:0:1}" = "-" ]; do shift; done
  94. PERLCC_TIMEOUT=360
  95. if [ -n "$1" ]; then
  96. if [ -f "$1" ]; then
  97. # run a mymodules.t like test
  98. $PERL $Mblib t/modules.t $TEST "$1"
  99. else
  100. [ -z "$QUIET" ] && PERLCC_OPTS="$PERLCC_OPTS -v4"
  101. while [ -n "$1" ]; do
  102. # single module. update,setup,install are UAC terms
  103. name=pcc"$(perl -e'$a=shift;$a=~s{::}{_}g;$a=~s{(install|setup|update)}{substr($1,0,4)}ie;print lc($a)' $1)"
  104. if [ "${COPTS/,-D/}" != "$COPTS" ]; then
  105. COPTS="${COPTS:1}"
  106. echo $PERL $Mblib -MO=C,$COPTS,-o$name.c -e "\"use $1; print qq(ok\\n)\""
  107. $PERL $Mblib -MO=C,$COPTS,-o$name.c -e "use $1; print qq(ok\\n)"
  108. if [ -f $name.c ]; then
  109. echo $PERL $Mblib script/cc_harness -d -g3 -o $name $name.c
  110. $PERL $Mblib script/cc_harness -d -g3 -o $name $name.c
  111. if [ -f $name ]; then
  112. echo "running ./$name"
  113. ./$name
  114. fi
  115. fi
  116. else
  117. echo $PERL $Mblib blib/script/perlcc $PERLCC_OPTS -r $KEEP -e "\"use $1; print qq(ok\\n)\"" -o $name
  118. $PERL $Mblib blib/script/perlcc $PERLCC_OPTS -r $KEEP -e "use $1; print qq(ok\\n)" -o $name
  119. # test -f a.out.c && mv a.out.c $name.c
  120. fi
  121. if [ "$TEST" = "-t" ]; then
  122. $PERL $Mblib -It -MCPAN -Mmodules -e "CPAN::Shell->testcc(q($1))"
  123. fi
  124. shift
  125. done
  126. fi
  127. else
  128. $PERL $Mblib t/modules.t $TEST
  129. fi