summaryrefslogtreecommitdiff
path: root/src/cmd/ksh93/mamexec
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/ksh93/mamexec')
-rwxr-xr-xsrc/cmd/ksh93/mamexec307
1 files changed, 307 insertions, 0 deletions
diff --git a/src/cmd/ksh93/mamexec b/src/cmd/ksh93/mamexec
new file mode 100755
index 0000000..e36a846
--- /dev/null
+++ b/src/cmd/ksh93/mamexec
@@ -0,0 +1,307 @@
+:
+#
+# Glenn Fowler
+# AT&T Bell Laboratories
+#
+# make abstract machine executor with state
+#
+# @(#)mamexec (gsf@research.att.com) 07/17/94
+#
+# mamexec [ -dfins ] [ target ... ] < mam-file
+#
+# NOTE: variables defined in this script may conflict with
+# mam-file variables
+#
+
+_command_=mamexec
+_debug_=:
+_diff_=.
+_error_='exit 1'
+_exec_=eval
+_force_=
+_list_=
+_same_=.
+_set_=
+_silent_=
+_state_list_=MAMlist
+_state_time_=MAMtime
+_tmp_=/tmp/mam.$$.mam
+
+trap 'rm -f $_tmp_' 0
+trap 'exit 2' 1 2
+while :
+do case $# in
+ 0) break ;;
+ esac
+ case $1 in
+ --) shift
+ break
+ ;;
+ -*) case $1 in
+ -*[abceghjklmopqrtuvwxyz_A-Z0-9]*) # [!...] not portable
+ echo "Usage: $_command_ [ -dfins ] [ target ... ] < mam-file" >&2; exit 2
+ ;;
+ *) case $1 in
+ *d*) _debug_="eval echo $_command_: debug: >&2" ;;
+ esac
+ case $1 in
+ *f*) _force_=1 ;;
+ esac
+ case $1 in
+ *i*) _error_=: ;;
+ esac
+ case $1 in
+ *n*) _exec_=echo ;;
+ esac
+ case $1 in
+ *s*) _silent_=1 ;;
+ esac
+ ;;
+ esac
+ ;;
+ *) break
+ ;;
+ esac
+ shift
+done
+_select_=
+while :
+do case $# in
+ 0) break ;;
+ esac
+ case $1 in
+ *=*) eval $1
+ ;;
+ *) case $_select_ in
+ "") _select_=$1 ;;
+ *) _select_="$_select_|$1" ;;
+ esac
+ ;;
+ esac
+ shift
+done
+case $_select_ in
+"") _select_="*" ;;
+esac
+(set -e; false || true) && _set_=e || echo $_command_: command errors ignored because of shell botch >&2
+case $_silent_ in
+"") _set_=x$_set_
+ ;;
+*) case $_exec_ in
+ "echo") _exec_=: ;;
+ esac
+ ;;
+esac
+case $_exec_ in
+"eval") _begin_="("
+ _end_=") </dev/null"
+ case $_set_ in
+ ?*) _set_="set -$_set_;" ;;
+ esac
+ ;;
+*) _set_=
+ ;;
+esac
+
+if test -f $_state_list_ -a -f $_state_time_
+then mamstate $_state_list_ < $_state_list_ | sort > $_tmp_
+ for _i_ in `comm -12 $_state_time_ $_tmp_ | sed 's/ .*//'`
+ do case $_same_ in
+ .) _same_=$_i_ ;;
+ *) _same_="$_same_|$_i_" ;;
+ esac
+ done
+fi
+
+_index_=_
+_match_=
+case `(echo ok | (read -r a; echo $a) 2>/dev/null)` in
+ok) _read_='read -r'
+ ;;
+*) # read strips \ -- thanks a lot
+ # tmp file avoids char at a time read
+ _read_=read
+ sed 's/\\/\\\\/g' > $_tmp_
+ exec < $_tmp_
+ rm -f $_tmp_
+ ;;
+esac
+_old_=1
+_ifs_=$IFS
+while IFS=' '; $_read_ _op_ _arg_ _val_
+do IFS=$_ifs_
+ case $_op_ in
+ "note") continue
+ ;;
+ "info") case $_arg_ in
+ "mam") _old_= ;;
+ esac
+ continue
+ ;;
+ "setv") eval _data_='$'$_arg_
+ case $_index_:$_data_ in
+ __*:*|*:)
+ case $_exec_ in
+ "eval") ;;
+ *) echo "$_arg_=$_val_" ;;
+ esac
+ eval $_arg_="$_val_" "</dev/null"
+ ;;
+ esac
+ case $_arg_:$mam_cc_L in
+ "CC:") (
+ set -
+ mkdir /tmp/mam$$
+ cd /tmp/mam$$
+ echo 'main(){return 0;}' > main.c
+ code=1
+ if $CC -c main.c 2>/dev/null
+ then if $CC -L. main.o -lc 2>/dev/null
+ then $CC -L. main.o -lc > libc.a 2>/dev/null || code=0
+ fi
+ fi
+ cd /tmp
+ rm -rf /tmp/mam$$
+ exit $code
+ ) </dev/null && mam_cc_L=' '
+ ;;
+ esac
+ continue
+ ;;
+ "make") eval _name_$_index_=$_name_
+ eval _prev_$_index_=$_prev_
+ eval _cmds_$_index_='"$_cmds_"'
+ eval _attr_$_index_=$_attr_
+ eval _name_=$_arg_
+ _prev_=$_index_
+ case " $_val_ " in
+ *" metarule "*) _attr_=m$_attr_ ;;
+ esac
+ _cmds_=
+ eval " case \"$_name_\" in
+ $_select_)
+ case \"$_select_\" in
+ \"*\") _select_=$_name_ ;;
+ esac
+ _match_=1
+ _attr_=x$_attr_
+ ;;
+ esac"
+ case $_force_ in
+ "") eval " case \"$_name_\" in
+ $_diff_)_attr_=u$_attr_ ;;
+ $_same_);;
+ *) _attr_=u$_attr_ ;;
+ esac"
+ ;;
+ *) _attr_=u$_attr_
+ ;;
+ esac
+ case $_attr_ in
+ *u*) case $_diff_ in
+ .) _diff_=$_name_ ;;
+ *) _diff_="$_diff_|$_name_" ;;
+ esac
+ ;;
+ esac
+ _index_=_$_index_
+ eval _name_$_index_=$_name_
+ eval _prev_$_index_=$_prev_
+ eval _cmds_$_index_=$_cmds_
+ eval _attr_$_index_=$_attr_
+ eval _list_='"'"$_list_"'
+'$_name_'"'
+ continue
+ ;;
+ "prev") case $_force_ in
+ "") eval " case \"$_arg_\" in
+ $_diff_)_attr_=u$_attr_ ;;
+ $_same_) ;;
+ *) _attr_=u$_attr_ ;;
+ esac"
+ ;;
+ *) _attr_=u$_attr_
+ ;;
+ esac
+ continue
+ ;;
+ esac
+ case $_index_ in
+ _) echo $_op_: missing make op >&2; continue ;;
+ esac
+ case $_op_ in
+ "attr") case $_val_ in
+ "meta"|"suff") _attr_=m$_attr_ ;;
+ esac
+ ;;
+ "exec"|"....")
+ case $_old_ in
+ "") _arg_=$_val_
+ ;;
+ *) case $_val_ in
+ ?*) _arg_="$_arg_ $_val_" ;;
+ esac
+ ;;
+ esac
+ case $_cmds_ in
+ "") _cmds_=$_arg_
+ ;;
+ *) _cmds_="$_cmds_
+$_arg_"
+ ;;
+ esac
+ ;;
+ "done") eval _arg_=$_arg_
+ _prop_=
+ case $_arg_ in
+ $_name_)case $_attr_ in
+ *m*) ;;
+ *x*u*|*u*x*)
+ case $_cmds_ in
+ "") case $_attr_ in
+ *u*) _prop_=u ;;
+ esac
+ ;;
+ *) $_exec_ "$_begin_$_set_$_cmds_$_end_" ||
+ {
+ _code_=$?
+ case $_set_ in
+ *-*e*) ;;
+ *) case $_cmds_ in
+ *if*then*fi*|"||") _code_=0 ;;
+ esac
+ ;;
+ esac
+ case $_code_ in
+ 0) ;;
+ *) echo "*** exit code $_code_ making $_name_" >&2
+ $_error_
+ ;;
+ esac
+ }
+ _prop_=u
+ ;;
+ esac
+ ;;
+ esac
+ _index_=$_prev_
+ eval _name_='$'_name_$_index_
+ eval _prev_='$'_prev_$_index_
+ eval _cmds_='$'_cmds_$_index_
+ eval _attr_=$_prop_'$'_attr_$_index_
+ ;;
+ *) echo $_val_: $_op_ $_name_ expected >&2
+ ;;
+ esac
+ ;;
+ esac
+done
+IFS=$_ifs_
+case $_match_ in
+"") echo "$_command_: don't know how to make $_select_" >&2; $_error_ ;;
+esac
+case $_exec_ in
+"eval") echo "$_list_" > $_state_list_
+ mamstate $_state_list_ < $_state_list_ | sort > $_state_time_
+ ;;
+esac