TakeAction 2.5 KB

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