TakeAction 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/bin/sh
  2. case $# in
  3. 0) PAR='make install && make clean' ; CMD=Action ;;
  4. 1) PAR="$1" ; CMD=Action ;;
  5. 2) PAR="$1" ; CMD="$2" ;;
  6. *) echo Syntax: "$0" [command [file]] ; exit 1 ;;
  7. esac
  8. if test -r "$CMD"
  9. then :
  10. else
  11. case "$CMD" in
  12. Action) echo No Action file present ;;
  13. *) echo No Action file "($CMD)" present ;;
  14. esac
  15. fi
  16. case $0 in
  17. /*) THISFILE=$0
  18. ;;
  19. *) if [ -f $0 ]
  20. then
  21. THISFILE=`pwd`/$0
  22. else
  23. THISFILE=$0
  24. fi
  25. ;;
  26. esac
  27. SYS=
  28. RETC=0
  29. { while read LINE
  30. do
  31. eval set $LINE
  32. case x"$1" in
  33. x!*) ;;
  34. xname) SYS="$2"
  35. ACTION='$PAR'
  36. DIR=.
  37. FM=no
  38. FAIL='Failed for $SYS, see $DIR/Out'
  39. SUCC='$SYS -- done'
  40. ATYPE=
  41. FATAL=no
  42. DOIT=yes
  43. ;;
  44. xfatal) FATAL=yes ;;
  45. xaction|xindir) case x$ATYPE in
  46. x) ACTION=$2 ; ATYPE=$1
  47. case $ATYPE$FM in
  48. indirno) FAIL='Failed for $SYS' ;;
  49. esac
  50. ;;
  51. *) echo Already specified an $ATYPE for this name
  52. RETC=65 ;;
  53. esac ;;
  54. xfailure) FM=yes
  55. FAIL="$2" ;;
  56. xsuccess) SUCC="$2" ;;
  57. xdir) DIR="$2" ;;
  58. xsystem) PAT="$2"
  59. oIFS=$IFS
  60. IFS="|"
  61. eval set $2
  62. case x`ack_sys` in
  63. x$1|x$2|x$3|x$4|x$5|x$6|x$7) ;;
  64. *) echo "Sorry, $SYS can only be made on $PAT systems"
  65. DOIT=no
  66. ;;
  67. esac
  68. IFS=$oIFS
  69. ;;
  70. xend) case $DOIT in
  71. no) continue ;;
  72. esac
  73. case x$SYS in
  74. x) echo Missing name line; RETC=65 ;;
  75. *) if test -d $DIR
  76. then (
  77. cd $DIR
  78. X=
  79. case $ATYPE in
  80. indir)
  81. if $THISFILE "$PAR" $ACTION
  82. then eval echo $SUCC
  83. else RETC=2 ; eval echo $FAIL
  84. fi ;;
  85. *)
  86. case "$ACTION" in
  87. '$PAR')
  88. ACTION="$PAR"
  89. ;;
  90. *) ;;
  91. esac
  92. if [ -f No$CMD ]
  93. then
  94. x=`cat No$CMD`
  95. if [ "$ACTION" = "$x" ]
  96. then
  97. ACTION='echo "No actions performed, No$CMD file present"'
  98. SUCC='$SYS -- skipped'
  99. fi
  100. fi
  101. if eval "{ $ACTION ; } >Out 2>&1 </dev/null"
  102. then eval echo $SUCC
  103. if [ "$SUCC" = '$SYS -- skipped' ]
  104. then :
  105. else echo "$ACTION" > No$CMD 2>/dev/null
  106. fi
  107. else RETC=1 ; X=: ; eval echo $FAIL
  108. fi
  109. ;;
  110. esac
  111. (echo ------- `pwd`
  112. cat Out
  113. $X rm -f Out
  114. ) 2>/dev/null 1>&- 1>&3
  115. exit $RETC
  116. )
  117. case $? in
  118. 0) ;;
  119. *) case $RETC in
  120. 0) RETC=$? ;;
  121. esac ;;
  122. esac
  123. else
  124. echo Directory $DIR for $SYS is inaccessible
  125. RETC=66
  126. fi ;;
  127. esac
  128. case $FATAL$RETC in
  129. yes0) ;;
  130. yes*) echo Fatal error, installation stopped.
  131. exit $RETC ;;
  132. esac
  133. SYS=
  134. ;;
  135. *) echo Unknown keyword "$1"
  136. RETC=67 ;;
  137. esac
  138. done
  139. exit $RETC
  140. } <$CMD
  141. RETX=$?
  142. case $RETX in
  143. 0) exit $RETC ;;
  144. *) exit $RETX ;;
  145. esac