TakeAction 2.6 KB

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