summaryrefslogtreecommitdiff
path: root/mig/mig.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mig/mig.sh')
-rw-r--r--mig/mig.sh95
1 files changed, 95 insertions, 0 deletions
diff --git a/mig/mig.sh b/mig/mig.sh
new file mode 100644
index 0000000..31afb7e
--- /dev/null
+++ b/mig/mig.sh
@@ -0,0 +1,95 @@
+#!/bin/sh
+#
+# Mach Operating System
+# Copyright (c) 1991,1990 Carnegie Mellon University
+# All Rights Reserved.
+#
+# Permission to use, copy, modify and distribute this software and its
+# documentation is hereby granted, provided that both the copyright
+# notice and this permission notice appear in all copies of the
+# software, derivative works or modified versions, and any portions
+# thereof, and that both notices appear in supporting documentation.
+#
+# CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+# CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+# ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+#
+# Carnegie Mellon requests users of this software to return to
+#
+# Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+# School of Computer Science
+# Carnegie Mellon University
+# Pittsburgh PA 15213-3890
+#
+# any improvements or extensions that they make and grant Carnegie Mellon
+# the rights to redistribute these changes.
+#
+
+migcom=${MIGDIR-@MIGDIR@}/migcom
+cpp="${CPP-@CPP@}"
+
+cppflags=
+migflags=
+files=
+
+# If an argument to this shell script contains whitespace,
+# then we will screw up. migcom will see it as multiple arguments.
+#
+# As a special hack, if -i is specified first we don't pass -user to migcom.
+# We do use the -user argument for the dependencies.
+# In this case, the -user argument can have whitespace.
+
+until [ $# -eq 0 ]
+do
+ case "$1" in
+ -[qQvVtTrRsS] ) migflags="$migflags $1"; shift;;
+ -i ) sawI=1; migflags="$migflags $1 $2"; shift; shift;;
+ -user ) user="$2"; if [ ! "${sawI-}" ]; then migflags="$migflags $1 $2"; fi; shift; shift;;
+ -server ) server="$2"; migflags="$migflags $1 $2"; shift; shift;;
+ -header ) header="$2"; migflags="$migflags $1 $2"; shift; shift;;
+ -sheader ) sheader="$2"; migflags="$migflags $1 $2"; shift; shift;;
+ -iheader ) iheader="$2"; migflags="$migflags $1 $2"; shift; shift;;
+ -prefix | -subrprefix ) migflags="$migflags $1 $2"; shift; shift;;
+
+ -MD ) sawMD=1; cppflags="$cppflags $1"; shift;;
+ -imacros ) cppflags="$cppflags $1 $2"; shift; shift;;
+ -cc) cpp="$2"; shift; shift;;
+ -migcom) migcom="$2"; shift; shift;;
+ -* ) cppflags="$cppflags $1"; shift;;
+ * ) files="$files $1"; shift;;
+ esac
+done
+
+for file in $files
+do
+ $cpp $cppflags "$file" | $migcom $migflags || exit
+
+ if [ $sawMD ]
+ then
+ base="`basename "$file"|sed 's%[.][^.]*$%%'`"
+ deps=
+ rheader="${header-${base}.h}"
+ if [ "$rheader" != /dev/null ]; then deps="$deps $rheader"; fi
+ ruser="${user-${base}User.c}"
+ if [ "$ruser" != /dev/null ]; then
+ if [ $sawI ]; then
+ for un in $ruser
+ do
+ deps="$deps $un"
+ done
+ else
+ deps="$deps $ruser"
+ fi
+ fi
+ rserver="${server-${base}Server.c}"
+ if [ "$rserver" != /dev/null ]; then deps="$deps $rserver"; fi
+ rsheader="${sheader-/dev/null}"
+ if [ "$rsheader" != /dev/null ]; then deps="$deps $rsheader"; fi
+ riheader="${iheader-/dev/null}"
+ if [ "$riheader" != /dev/null ]; then deps="$deps $riheader"; fi
+ sed 's%^[^:]*:%'"${deps}"':%' <"${base}.d" >"${base}-mig.d"
+ rm -f ${base}.d
+ fi
+done
+
+exit 0