test.sh 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/mksh
  2. LC_ALL=C PATH='/usr/sbin:/bin:/sbin:/usr/bin'; export LC_ALL PATH
  3. test -n "$KSH_VERSION" || exit 1
  4. set -A check_categories -- shell:legacy-no int:32
  5. pflag='/opt/mksh/mksh'
  6. sflag='/opt/mksh/check.t'
  7. usee=0 Pflag=0 Sflag=0 uset=0 vflag=1 xflag=0
  8. while getopts "C:e:fPp:QSs:t:v" ch; do case $ch {
  9. (C) check_categories[${#check_categories[*]}]=$OPTARG ;;
  10. (e) usee=1; eflag=$OPTARG ;;
  11. (f) check_categories[${#check_categories[*]}]=fastbox ;;
  12. (P) Pflag=1 ;;
  13. (+P) Pflag=0 ;;
  14. (p) pflag=$OPTARG ;;
  15. (Q) vflag=0 ;;
  16. (+Q) vflag=1 ;;
  17. (S) Sflag=1 ;;
  18. (+S) Sflag=0 ;;
  19. (s) sflag=$OPTARG ;;
  20. (t) uset=1; tflag=$OPTARG ;;
  21. (v) vflag=1 ;;
  22. (+v) vflag=0 ;;
  23. (*) xflag=1 ;;
  24. }
  25. done
  26. shift $((OPTIND - 1))
  27. set -A args -- '/opt/mksh/check.pl' -p "$pflag"
  28. x=
  29. for y in "${check_categories[@]}"; do
  30. x=$x,$y
  31. done
  32. if [[ -n $x ]]; then
  33. args[${#args[*]}]=-C
  34. args[${#args[*]}]=${x#,}
  35. fi
  36. if (( usee )); then
  37. args[${#args[*]}]=-e
  38. args[${#args[*]}]=$eflag
  39. fi
  40. (( Pflag )) && args[${#args[*]}]=-P
  41. if (( uset )); then
  42. args[${#args[*]}]=-t
  43. args[${#args[*]}]=$tflag
  44. fi
  45. (( vflag )) && args[${#args[*]}]=-v
  46. (( xflag )) && args[${#args[*]}]=-x # force usage by synerr
  47. if [[ -n $TMPDIR && -d $TMPDIR/. ]]; then
  48. args[${#args[*]}]=-T
  49. args[${#args[*]}]=$TMPDIR
  50. fi
  51. print Testing mksh for conformance:
  52. fgrep -e MirOS: -e MIRBSD "$sflag"
  53. print "This shell is actually:\n\t$KSH_VERSION"
  54. print 'test.sh built for mksh R51 2015/07/10'
  55. cstr='$os = defined $^O ? $^O : "unknown";'
  56. cstr="$cstr"'print $os . ", Perl version " . $];'
  57. for perli in perl no; do
  58. if [[ $perli = no ]]; then
  59. print Cannot find a working Perl interpreter, aborting.
  60. exit 1
  61. fi
  62. print "Trying Perl interpreter '$perli'..."
  63. perlos=$($perli -e "$cstr")
  64. rv=$?
  65. print "Errorlevel $rv, running on '$perlos'"
  66. if (( rv )); then
  67. print "=> not using"
  68. continue
  69. fi
  70. if [[ -n $perlos ]]; then
  71. print "=> using it"
  72. break
  73. fi
  74. done
  75. (( Sflag )) || echo + $perli "${args[@]}" -s "$sflag" "$@"
  76. (( Sflag )) || exec $perli "${args[@]}" -s "$sflag" "$@"
  77. # use of the -S option for check.t split into multiple chunks
  78. rv=0
  79. for s in "$sflag".*; do
  80. echo + $perli "${args[@]}" -s "$s" "$@"
  81. $perli "${args[@]}" -s "$s" "$@"
  82. rc=$?
  83. (( rv = rv ? rv : rc ))
  84. done
  85. exit $rv