# 
# Mach Operating System
# Copyright (c) 1988 Carnegie-Mellon University
# All rights reserved.  The CMU software License Agreement specifies
# the terms and conditions for use and redistribution.
#
######################################################################
#
#	Builds RPC interfaces for kernel functions
#
######################################################################
# HISTORY
# $Log:	Makefile,v $
# Revision 2.2  89/01/15  16:28:47  rpd
# 	Created from kern/Makefile.
# 	[89/01/15  14:42:16  rpd]
# 
# Revision 2.6  89/01/12  07:43:36  rpd
# 	Moved -I.. from MIGKERNEL to MIGOPTS so it gets used on everything.
# 	[89/01/12  04:37:52  rpd]
# 
# Revision 2.5  88/11/21  16:56:01  rvb
# 	Somehow the mach device interface got left out of "all".
# 	[88/11/10            rvb]
# 
# Revision 2.4  88/07/17  19:33:46  mwyoung
# *** empty log message ***
# 
# Revision 2.2.1.2  88/07/04  15:28:14  mwyoung
# Moved pager_* files to memory_object_* names.
# 
# Revision 2.2.1.1  88/06/28  20:29:15  mwyoung
# Added switches to MiG so that build-dependent options can
# be used.  Removed old obsolete-code-stripping magic.
# 
#
# 26-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Added switches to MiG so that build-dependent options can
#	be used.  Removed old obsolete-code-stripping magic.
#
# Revision 2.3  88/07/15  16:07:17  mja
# Change MIG definition to include /usr/mach along relevant paths
# since it is not in the default set.
# 
# 28-Mar-88  Douglas Orr (dorr) at Carnegie-Mellon University
#	Added device.defs rules
#
#  9-Dec-87  Michael Young (mwyoung) at Carnegie-Mellon University
#	Added pager_default interface.
#
#  3-Dec-87  Michael Young (mwyoung) at Carnegie-Mellon University
#	Added rule for "mach_user_internal.c".
#	Removed old history.
#

MIG=LPATH=$$LPATH:/usr/mach/lib PATH=$$PATH:/usr/mach/bin mig
MIGOPTS = -I..
MIGKERNEL = -DKERNEL

MACH_INTERFACE =  mach.h mach_server.c mach_user.c

PAGER_INTERFACE = memory_object.h memory_object_server.c memory_object_user.c
DEFAULT_PAGER_INTERFACE = memory_object_default.h memory_object_default_server.c memory_object_default_user.c
EXC_INTERFACE = exc.h exc_server.c exc_user.c
DEVICE = device_server.c device_user.c

all: ${MACH_INTERFACE} ${PAGER_INTERFACE} ${DEFAULT_PAGER_INTERFACE} ${EXC_INTERFACE} \
	${DEVICE} mach_user_internal.h

mach_server.c:	machServer.c
	rm -f mach_server.c
	ln machServer.c mach_server.c

mach_user.c:	machUser.c
	rm -f mach_user.c
	ln machUser.c mach_user.c

mach.h machUser.c machServer.c:	mach.defs
	${MIG} ${MIGOPTS} ${MIGKERNEL} mach.defs

memory_object_server.c:	memory_objectServer.c
	rm -f memory_object_server.c
	ln memory_objectServer.c memory_object_server.c

# Special post-MiG wizardry here:
memory_object_user.c:	memory_objectUser.c
	sed -e 's/INTEGER_8/INTERNAL_MEMORY/' < memory_objectUser.c > memory_object_user.c

memory_object.h memory_objectUser.c memory_objectServer.c:	memory_object.defs
	${MIG} ${MIGOPTS} memory_object.defs

memory_object_default_server.c:	memory_object_defaultServer.c
	rm -f memory_object_default_server.c
	ln memory_object_defaultServer.c memory_object_default_server.c

# Special post-MiG wizardry here:
memory_object_default_user.c:	memory_object_defaultUser.c
	sed -e 's/INTEGER_8/INTERNAL_MEMORY/' < memory_object_defaultUser.c > memory_object_default_user.c

memory_object_default.h memory_object_defaultUser.c memory_object_defaultServer.c:	memory_object_default.defs
	${MIG} ${MIGOPTS} memory_object_default.defs

exc_server.c:	excServer.c
	rm -f exc_server.c
	ln excServer.c exc_server.c

exc_user.c:	excUser.c
	rm -f exc_user.c
	ln excUser.c exc_user.c

exc.h excUser.c excServer.c:	exc.defs
	${MIG} ${MIGOPTS} exc.defs

device_server.c device_user.c: device.defs
	$(MIG) $(MIGOPTS) device.defs
	mv deviceUser.c device_user.c
	mv deviceServer.c device_server.c

mach_user_internal.h:	mach_user.c
	-egrep 'Routine ' < mach_user.c | sed -e 's/.*Routine \([a-z_]*\).*/#define \1 \1_EXTERNAL/' > mach_user_internal.h
	
../sys/mig_errors.h:	/usr/mach/include/mig_errors.h
	cp $? $@

clean:
	rm -f mach_server.c mach_user.c mach.h machServer.c machUser.c
	rm -f memory_object_server.c memory_object_user.c memory_object.h memory_objectServer.c memory_objectUser.c
	rm -f memory_object_default_server.c memory_object_default_user.c memory_object_default.h
	rm -f memory_object_defaultServer.c memory_object_defaultUser.c
	rm -f device_server.c device_user.c
	rm -f exc_server.c exc_user.c exc.h excServer.c excUser.c
	rm -f mig_errors.h
	rm -f mach_user_internal.h


#  Display any newly modified files

NEWSRC=.

NEWSRC: ${NEWSRC}

${NEWSRC}: Makefile *.[ch]
	@echo $?
