diff options
Diffstat (limited to 'mig/mig.sh')
-rw-r--r-- | mig/mig.sh | 95 |
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 |