#*****************************************************************
#**                                                             **
#**             (C) Copyright 1992 the Regents of the           **
#**        University of California.  All Rights Reserved.      **
#**                                                             **
#**        This work was produced under the sponsorship of      **
#**         the U.S. Department of Energy.  The Government      **
#**                retains certain rights therein.              **
#**                                                             **
#**                         Written by                          **
#**         Distributed Programming Environments Project        **
#**           Computer Software and Networking Division,        **
#**                   Livermore Computer Center,                **
#**            Lawrence Livermore National Laboratory           **
#**                                                             **
#*****************************************************************

#	sccsid:		"@(#)Makefile	1.122 12/4/92 12:17:00 LLNL "

#
#	Make ELROS runtime
#

# The following macros need to be assigned appropriate values.  See the
# installation guide for details.
#
#   RO_RUNTIME_DIR - path name to ELROS runtime directory
#   RO_TASKING_FLAG - indicates whether to build a tasking version
#   RO_OPT_REAL - indicates whether real encoding optimization allowed
#   RO_HAS_LONGLONG - indicates whether long long type is allowed
#   RO_HAS_LONGDOUBLE - indicates whether long double type is allowed
#   RO_SWITCHES - C compilation flags and options
#
# The following macro may be defined to indicate which communication
# platforms the library should support.  The allowed values are as shown.
#
#   RO_PLATFORMS - ISODE or PURESOCKETS or ISODE_and_PURESOCKETS
#
# If RO_PLATFORMS is defined to include ISODE, the following macros must 
# also be defined:
#
#   ISODE_INCDIR - directory path to ISODE header files
#   ISODE_LIBDIR - directory path to ISODE library files
#
#

include ../Make.Defaults

#
# Paths and files
#
INCLPATH=	$(RO_RUNTIME_DIR)/include
I =		$(INCLPATH)/elros/
INCLUDES=	-I$(INCLPATH)

LIBPATH=	$(RO_RUNTIME_DIR)/lib
L=		$(LIBPATH)/

ISODELIB=	$(ISODE_LIBDIR)/libisode.a

EXCEPTINCL=	$(I)exceptions.h $(I)messages.h
TASKINCL=	$(I)tasking.h $(I)ipads.h $(I)sem.h
INSTINCL=	$(I)instance.h $(I)shared_decls.h $(I)oidtree.h $(I)typeinfo.h \
		$(EXCEPTINCL) $(TASKINCL)
CONVINCL=	$(EXCEPTINCL) $(I)enc_dcd.h $(I)typeinfo.h
STUBINCL=	$(I)binds.h $(INSTINCL)

DISTFILES=	Makefile README errorfile \
	ASNgetP_end.c ASNgetP_hdr.c ASNgetP_st.c \
	ASNgetRO_end.c ASNgetRO_st.c ASNget_data.c \
	ASNsendP_end.c ASNsendP_st.c ASNsendRO_en.c ASNsendRO_st.c \
	FILEreceive.c FILEsend.c \
	ISODEbind_ad.c ISODEreceive.c ISODEsend.c ISODEunbind.c \
	MEMreceive.c MEMsend.c \
	SOCKbind_add.c SOCKreceive.c SOCKsend.c SOCKunbind.c \
	STDbind_STUB.c STDbind_addr.c STDbind_file.c STDbind_mem.c \
	STDabort.c STDconsume.c STDflush.c STDget_addr.c STDgetset_id.c \
	STDinit_addr.c STDinit_bind.c STDinit_inst.c \
	STDlogging.c STDsendRO_re.c \
	STDtimeout.c STDunbind.c \
	STUBisode.c STUBsock.c STUBtasking.c \
	cmpP_bitstr.c cmpP_bool.c cmpP_oid.c \
	conv_bitstr.c conv_bool.c conv_genstr.c conv_int.c \
	conv_charstr.c conv_octstr.c conv_oid.c conv_real.c \
	dcd_length.c dcd_tag.c enc_length.c enc_tag.c \
	extend_arith.c \
	form_bitstr.c form_bool.c form_genstr.c form_int.c \
	form_charstr.c form_octstr.c form_oid.c form_real.c \
	getP_any.c getP_bitstr.c getP_bool.c getP_int.c \
	getP_nul.c getP_octstr.c getP_charstr.c getP_oid.c \
	getP_real.c getP_intvec.c getP_realvec.c getP_vector.c \
	handlers.c \
	log6.c log7.c \
	search_accep.c \
	sem.c \
	sendP_any.c sendP_bitstr.c sendP_bool.c sendP_int.c \
	sendP_nul.c sendP_octstr.c sendP_charstr.c sendP_oid.c \
	sendP_real.c sendP_intvec.c sendP_realvec.c sendP_vector.c \
	stack.c task.c tasking.c \
	typecodes.c typeprinters.c \
	typefree.c


OFILES=	STDinit_inst.$(OSUFFIX) \
	STDinit_bind.$(OSUFFIX) \
	STDbind_addr.$(OSUFFIX) \
	ISODEbind_ad.$(OSUFFIX) SOCKbind_add.$(OSUFFIX) \
	STDinit_addr.$(OSUFFIX) STDget_addr.$(OSUFFIX) \
	STDbind_file.$(OSUFFIX) STDbind_mem.$(OSUFFIX) \
	STDunbind.$(OSUFFIX) ISODEunbind.$(OSUFFIX) SOCKunbind.$(OSUFFIX) \
	STDabort.$(OSUFFIX) \
	STDflush.$(OSUFFIX) STDtimeout.$(OSUFFIX) \
	STDsendRO_re.$(OSUFFIX) STDgetset_id.$(OSUFFIX) \
	ASNgetP_st.$(OSUFFIX) ASNgetP_end.$(OSUFFIX) \
	ASNsendP_st.$(OSUFFIX) ASNsendP_end.$(OSUFFIX) \
	ASNget_data.$(OSUFFIX) ASNgetP_hdr.$(OSUFFIX) \
	ASNgetRO_st.$(OSUFFIX) ASNgetRO_end.$(OSUFFIX) \
	ASNsendRO_st.$(OSUFFIX) ASNsendRO_en.$(OSUFFIX) \
	search_accep.$(OSUFFIX) typecodes.$(OSUFFIX) \
	messages.$(OSUFFIX) handlers.$(OSUFFIX) \
	extend_arith.$(OSUFFIX) typeprinters.$(OSUFFIX) \
	ISODEsend.$(OSUFFIX) ISODEreceive.$(OSUFFIX) \
	SOCKsend.$(OSUFFIX) SOCKreceive.$(OSUFFIX) \
	MEMsend.$(OSUFFIX) MEMreceive.$(OSUFFIX) \
	FILEsend.$(OSUFFIX) FILEreceive.$(OSUFFIX) \
	dcd_length.$(OSUFFIX) dcd_tag.$(OSUFFIX) \
	enc_length.$(OSUFFIX) enc_tag.$(OSUFFIX) \
        sendP_bool.$(OSUFFIX) sendP_int.$(OSUFFIX) sendP_octstr.$(OSUFFIX) \
	sendP_oid.$(OSUFFIX) sendP_real.$(OSUFFIX) sendP_bitstr.$(OSUFFIX) \
	sendP_nul.$(OSUFFIX) sendP_any.$(OSUFFIX) sendP_charstr.$(OSUFFIX) \
	sendP_intvec.$(OSUFFIX) sendP_realvec.$(OSUFFIX) \
	sendP_vector.$(OSUFFIX) \
	getP_bool.$(OSUFFIX) getP_int.$(OSUFFIX) \
	getP_octstr.$(OSUFFIX) getP_charstr.$(OSUFFIX) getP_oid.$(OSUFFIX) \
        getP_real.$(OSUFFIX) getP_bitstr.$(OSUFFIX) \
	getP_any.$(OSUFFIX) getP_nul.$(OSUFFIX) STDconsume.$(OSUFFIX) \
	getP_intvec.$(OSUFFIX) getP_realvec.$(OSUFFIX) \
	getP_vector.$(OSUFFIX) \
	cmpP_bool.$(OSUFFIX) cmpP_oid.$(OSUFFIX) cmpP_bitstr.$(OSUFFIX) \
	conv_bitstr.$(OSUFFIX) conv_octstr.$(OSUFFIX) conv_oid.$(OSUFFIX) \
	conv_bool.$(OSUFFIX) conv_int.$(OSUFFIX) \
	conv_real.$(OSUFFIX) conv_genstr.$(OSUFFIX) conv_charstr.$(OSUFFIX) \
	form_bitstr.$(OSUFFIX) form_octstr.$(OSUFFIX) form_oid.$(OSUFFIX) \
	form_bool.$(OSUFFIX) form_int.$(OSUFFIX) \
	form_real.$(OSUFFIX) form_charstr.$(OSUFFIX) form_genstr.$(OSUFFIX) \
	STDlogging6.$(OSUFFIX) STDlogging7.$(OSUFFIX) \
	log6.$(OSUFFIX) log7.$(OSUFFIX) \
	typefree.$(OSUFFIX) 

BACKFILES=conv_bool.$(OSUFFIX) conv_octstr.$(OSUFFIX) conv_real.$(OSUFFIX) \
	conv_bitstr.$(OSUFFIX) conv_int.$(OSUFFIX) conv_oid.$(OSUFFIX) \
	enc_tag.$(OSUFFIX) extend_arith.$(OSUFFIX)

STUBFILES=STDbind_STUB.$(OSUFFIX) STUBtasking.$(OSUFFIX) \
	STUBisode.$(OSUFFIX) STUBsock.$(OSUFFIX)

#
#	ELROS libraries
#
LIBELROS=	$(L)libelros.a
LIBELMAIN=	$(L)libel-main.a
LIBELTASK=	$(L)libel-task.a
LIBBACK=	$(L)libback.a

#
# Local macros
#
CONFIG_ISODE=	-D$(RO_TASKING_FLAG) -D__RO_HAS_LONGDOUBLE=$(RO_HAS_LONGDOUBLE) -D__RO_HAS_LONGLONG=$(RO_HAS_LONGLONG) -D__RO_OPT_REAL=$(RO_OPT_REAL) -D__RO_PLATFORM_ISODE 

CONFIG_PURESOCKETS=	-D$(RO_TASKING_FLAG) -D__RO_HAS_LONGDOUBLE=$(RO_HAS_LONGDOUBLE) -D__RO_HAS_LONGLONG=$(RO_HAS_LONGLONG) -D__RO_OPT_REAL=$(RO_OPT_REAL) -D__RO_PLATFORM_PURESOCKETS

CONFIG_ISODE_and_PURESOCKETS=	-D$(RO_TASKING_FLAG) -D__RO_HAS_LONGDOUBLE=$(RO_HAS_LONGDOUBLE) -D__RO_HAS_LONGLONG=$(RO_HAS_LONGLONG) -D__RO_OPT_REAL=$(RO_OPT_REAL) -D__RO_PLATFORM_ISODE -D__RO_PLATFORM_PURESOCKETS

# Note:  CONFIGFLAGS is defined on recursive MAKE invocations
CFLAGS=		$(RO_SWITCHES) $(INCLUDES) $(CONFIGFLAGS)
CPP_FLAGS=	$(CPPOPTS) $(INCLUDES) $(CONFIGFLAGS)

# 
# Transformation rules
#
.c.o:
	$(CC) $(COPTS) $(CFLAGS) $(ROOT).c

#
# Targets
#
all:	showenv links compile
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) "Runtime system is up to date"
	@$(ECHOTEXT) $(BORDER)

showenv:	showenv$(RO_PLATFORMS)

showenvPURESOCKETS:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) 'Making ELROS library with the following configuration:'
	@$(ECHOTEXT)
	@$(ECHOTEXT) 'RO_RUNTIME_DIR=$(RO_RUNTIME_DIR)'
	@$(ECHOTEXT) 'RO_TASKING_FLAG=$(RO_TASKING_FLAG)'
	@$(ECHOTEXT) 'RO_OPT_REAL=$(RO_OPT_REAL)'
	@$(ECHOTEXT) 'RO_HAS_LONGLONG=$(RO_HAS_LONGLONG)'
	@$(ECHOTEXT) 'RO_HAS_LONGDOUBLE=$(RO_HAS_LONGDOUBLE)'
	@$(ECHOTEXT) 'RO_SWITCHES=$(RO_SWITCHES)'
	@$(ECHOTEXT) 'RO_PLATFORMS=$(RO_PLATFORMS)'
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)

showenvISODE showenvISODE_and_PURESOCKETS:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) 'Making ELROS library with the following configuration:'
	@$(ECHOTEXT)
	@$(ECHOTEXT) 'RO_RUNTIME_DIR=$(RO_RUNTIME_DIR)'
	@$(ECHOTEXT) 'RO_TASKING_FLAG=$(RO_TASKING_FLAG)'
	@$(ECHOTEXT) 'RO_OPT_REAL=$(RO_OPT_REAL)'
	@$(ECHOTEXT) 'RO_HAS_LONGLONG=$(RO_HAS_LONGLONG)'
	@$(ECHOTEXT) 'RO_HAS_LONGDOUBLE=$(RO_HAS_LONGDOUBLE)'
	@$(ECHOTEXT) 'RO_SWITCHES=$(RO_SWITCHES)'
	@$(ECHOTEXT) 'RO_PLATFORMS=$(RO_PLATFORMS)'
	@$(ECHOTEXT) 'ISODE_INCDIR=$(ISODE_INCDIR)'
	@$(ECHOTEXT) 'ISODE_LIBDIR=$(ISODE_LIBDIR)'
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)


#################################################################
#
# Make ISODE links
#
#################################################################

links:	$(RO_PLATFORMS)_links

PURESOCKETS_links:

ISODE_links ISODE_and_PURESOCKETS_links:  linkhdr NORMAL_ISODE_LINKS

linkhdr:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) 'Making needed ISODE links'
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)

#
#	Make regular ISODE links
#
NORMAL_ISODE_LINKS: $(ISODE_INCDIR) $(ISODELIB)
	$(RM) $(INCLPATH)/isode
	$(LN) -s $(ISODE_INCDIR) $(INCLPATH)/isode
	$(RM) $(L)libisode.a
	$(LN) -s $(ISODELIB) $(L)libisode.a
	$(TOUCH) $(TARGET)


#################################################################
#
#	Make ELROS Library
#
#################################################################

compile: compilehdr compile$(RO_PLATFORMS)

compileISODE:
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_ISODE)" \
		library

compilePURESOCKETS:
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_PURESOCKETS)" \
		library

compileISODE_and_PURESOCKETS:
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_ISODE_and_PURESOCKETS)" \
		library

compilehdr:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) 'Compiling libraries'
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)

library: $(LIBELMAIN) $(RO_TASKING_FLAG) $(LIBBACK)

library: $(LIBELMAIN) $(RO_TASKING_FLAG) $(LIBBACK)
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) "Making libraries"
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)
	@$(CD) lib; $(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)"
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIGFLAGS)" \
		stubs

$(LIBELMAIN): $(OFILES)
	@$(ECHOTEXT)
	$(AR) ruc $(LIBELMAIN) $(OFILES)

newlibback: newlibback$(RO_PLATFORMS)

newlibbackISODE: links
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_ISODE)" \
		$(LIBBACK)

newlibbackPURESOCKETS:
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_PURESOCKETS)" \
		$(LIBBACK)

newlibbackISODE_and_PURESOCKETS: links
	@$(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)" \
		$(D)CONFIGFLAGS="$(CONFIG_ISODE_and_PURESOCKETS)" \
		$(LIBBACK)

$(LIBBACK):	$(BACKFILES)
	@$(ECHOTEXT)
	$(AR) ruc $(LIBBACK) $(BACKFILES)
	$(IFEXISTS) $(RANLIB) $(IFSTATUS); $(THEN) $(RANLIB) $(LIBBACK); $(FI) 


#################################################################
#
#	Make Tasking Stuff
#
#################################################################

PADSOBJS=	stack.$(OSUFFIX) task.$(OSUFFIX)
PADSINCL=	$(INCLPATH)/pads/task.h $(INCLPATH)/pads/stack.h

TASKOBJS=	tasking.$(OSUFFIX) sem.$(OSUFFIX)

#
#	Just prepare the header file,
#	if there is no Tasking subsystem
#
NO__RO_TASKING: $(I)tasking.h

#
#	Go ahead and make the library if the flag was set
#
__RO_TASKING:	$(LIBELTASK)

$(LIBELTASK):	 $(TASKOBJS) $(TASKINCL) $(PADSOBJS) $(PADSINCL)
	@$(ECHOTEXT)
	$(AR) ruc $(LIBELTASK) $(TASKOBJS) $(PADSOBJS)

stack.$(OSUFFIX):	$(PADSINCL)
# Note:  defining SUNVERS4 has no impact except on a sun
	$(CC) $(COPTS) $(CFLAGS) -DSUNVERS4 -I$(INCLPATH)/pads stack.c

task.$(OSUFFIX):	$(PADSINCL)
	$(CC) $(COPTS) $(CFLAGS) -I$(INCLPATH)/pads task.c

sem.$(OSUFFIX):		$(TASKINCL)
tasking.$(OSUFFIX):	$(INSTINCL)

$(I)tasking.h:	$(I)master-tasking.h
	$(RM) $(I)tasking.h
	$(CPP) $(CPP_FLAGS) $(I)master-tasking.h > $(I)tasking.h
	$(CHMOD) 444 $(I)tasking.h


#################################################################
#
#	Make Binding Stuff
#
#################################################################

$(I)binds.h: 		$(I)master-binds.h
STDinit_inst.$(OSUFFIX):$(INSTINCL)
STDbind_addr.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(I)specifics.h
ISODEbind_ad.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(I)specifics.h
SOCKbind_add.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(I)specifics.h
STDinit_addr.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(TASKINCL) $(I)extend_arith.h
STDget_addr.$(OSUFFIX):	$(INSTINCL) $(I)binds.h $(TASKINCL) 
STDinit_bind.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(I)specifics.h
STDbind_file.$(OSUFFIX):$(INSTINCL) $(I)binds.h $(I)specifics.h
STDbind_mem.$(OSUFFIX):	$(INSTINCL) $(I)binds.h $(I)specifics.h
STDunbind.$(OSUFFIX):	$(INSTINCL) $(TASKINCL)
ISODEunbind.$(OSUFFIX):	$(INSTINCL) $(TASKINCL)
SOCKunbind.$(OSUFFIX):	$(INSTINCL) $(TASKINCL)
STDabort.$(OSUFFIX):	$(INSTINCL)

$(I)binds.h: $(I)master-binds.h
	$(RM) $(I)binds.h
	$(CPP) $(CPP_FLAGS) $(I)master-binds.h > $(I)binds.h
	$(CHMOD) 444 $(I)binds.h

$(I)instance.h: $(I)master-instance.h
	$(RM) $(I)instance.h
	$(CPP) $(CPP_FLAGS) $(I)master-instance.h > $(I)instance.h
	$(CHMOD) 444 $(I)instance.h


#################################################################
#
#	Make Data Type Support
#
#################################################################

enc_tag.$(OSUFFIX):	$(EXCEPTINCL) $(I)shared_decls.h
dcd_tag.$(OSUFFIX): 	$(INSTINCL) $(I)getP_element.h
enc_length.$(OSUFFIX):	$(INSTINCL) 
dcd_length.$(OSUFFIX): 	$(INSTINCL) $(I)getP_element.h

sendP_bool.$(OSUFFIX):	$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_bool.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_bool.$(OSUFFIX):	$(EXCEPTINCL)
form_bool.$(OSUFFIX):	$(EXCEPTINCL)
cmpP_bool.$(OSUFFIX):	$(INSTINCL)

sendP_int.$(OSUFFIX):	$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_int.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_int.$(OSUFFIX):	$(CONVINCL) $(I)extend_arith.h
form_int.$(OSUFFIX):	$(CONVINCL)

sendP_intvec.$(OSUFFIX):$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_intvec.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h

sendP_realvec.$(OSUFFIX):$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_realvec.$(OSUFFIX):$(INSTINCL) $(I)getP_element.h

sendP_octstr.$(OSUFFIX):$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_octstr.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_octstr.$(OSUFFIX):	$(EXCEPTINCL) $(I)extend_arith.h
form_octstr.$(OSUFFIX):	$(CONVINCL)

sendP_bitstr.$(OSUFFIX):$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h
getP_bitstr.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_bitstr.$(OSUFFIX):	$(EXCEPTINCL) $(I)extend_arith.h
form_bitstr.$(OSUFFIX): $(EXCEPTINCL)
cmpP_bitstr.$(OSUFFIX):	$(INSTINCL)

sendP_oid.$(OSUFFIX):	$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h
getP_oid.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_oid.$(OSUFFIX):	$(INSTINCL) $(EXCEPTINCL)
form_oid.$(OSUFFIX):	$(EXCEPTINCL)
cmpP_oid.$(OSUFFIX):	$(INSTINCL)

sendP_real.$(OSUFFIX):	$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h 
getP_real.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h
conv_real.$(OSUFFIX):	$(CONVINCL) $(I)extend_arith.h
form_real.$(OSUFFIX):	$(CONVINCL)

sendP_charstr.$(OSUFFIX):$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h
getP_charstr.$(OSUFFIX):$(INSTINCL) $(I)getP_element.h

conv_genstr.$(OSUFFIX):	$(EXCEPTINCL)
form_genstr.$(OSUFFIX):	$(EXCEPTINCL)

conv_charstr.$(OSUFFIX):$(EXCEPTINCL)
form_charstr.$(OSUFFIX):$(EXCEPTINCL)

getP_any.$(OSUFFIX):	$(INSTINCL) $(I)typetags.h $(I)getP_element.h
sendP_any.$(OSUFFIX):	$(INSTINCL) $(I)sendP_element.h

sendP_nul.$(OSUFFIX):	$(INSTINCL) $(I)encP_length.h $(I)sendP_element.h
getP_nul.$(OSUFFIX):	$(INSTINCL)
STDconsume.$(OSUFFIX):	$(INSTINCL) $(I)getP_element.h

extend_arith.$(OSUFFIX):$(I)extend_arith.h
typeprinters.$(OSUFFIX):$(INSTINCL) $(I)typeformat.h
typefree.$(OSUFFIX):	$(INSTINCL)


#################################################################
#
#	Make Protocol Stuff
#
#################################################################

search_accep.$(OSUFFIX):$(INSTINCL) $(I)typetags.h $(I)typecodes.h
typecodes.$(OSUFFIX):	$(I)typecodes.h
handlers.$(OSUFFIX):	$(INSTINCL) $(I)typecodes.h

ISODEsend.$(OSUFFIX):	$(INSTINCL)
SOCKsend.$(OSUFFIX):	$(INSTINCL)
MEMsend.$(OSUFFIX):	$(INSTINCL)
FILEsend.$(OSUFFIX):	$(INSTINCL)

ISODEreceive.$(OSUFFIX):$(INSTINCL)
SOCKreceive.$(OSUFFIX):	$(INSTINCL)
MEMreceive.$(OSUFFIX):	$(INSTINCL)
FILEreceive.$(OSUFFIX):	$(INSTINCL)

STDgetset_id.$(OSUFFIX):$(INSTINCL)
STDflush.$(OSUFFIX):	$(INSTINCL)
STDtimeout.$(OSUFFIX):	$(INSTINCL)

STDsendRO_re.$(OSUFFIX):$(INSTINCL) $(I)typecodes.h $(I)sendP_element.h

ASNgetP_st.$(OSUFFIX):	$(INSTINCL) $(I)typetags.h
ASNgetP_end.$(OSUFFIX):	$(INSTINCL) $(I)typetags.h
ASNget_data.$(OSUFFIX):	$(INSTINCL)

ASNgetP_hdr.$(OSUFFIX):	$(INSTINCL) $(I)typetags.h $(I)enc_dcd.h $(I)getP_element.h

ASNgetRO_st.$(OSUFFIX):	$(INSTINCL) $(I)typecodes.h $(I)typetags.h
ASNgetRO_end.$(OSUFFIX):$(INSTINCL) $(I)typetags.h

ASNsendP_st.$(OSUFFIX):	$(INSTINCL) $(I)typecodes.h $(I)sendP_element.h
ASNsendP_end.$(OSUFFIX):$(INSTINCL) $(I)typecodes.h $(I)sendP_element.h
ASNsendRO_st.$(OSUFFIX):$(INSTINCL) $(I)typecodes.h $(I)sendP_element.h
ASNsendRO_en.$(OSUFFIX):$(INSTINCL) $(I)sendP_element.h

log6.$(OSUFFIX):	$(INSTINCL)
log7.$(OSUFFIX):	$(INSTINCL) $(I)typecodes.h

STDlogging6.$(OSUFFIX):	STDlogging.c $(INSTINCL)
	$(CP) STDlogging.c STDlogging6.c
	$(CC) $(COPTS) $(CFLAGS) -DLEVEL6 STDlogging6.c
	$(RM) STDlogging6.c

STDlogging7.$(OSUFFIX):	STDlogging.c $(INSTINCL)
	$(CP) STDlogging.c STDlogging7.c
	$(CC) $(COPTS) $(CFLAGS) -DLEVEL7 STDlogging7.c
	$(RM) STDlogging7.c

$(I)messages.h: errorfile
	$(CD) messages; $(MAKE) $(D)RO_SWITCHES="$(RO_SWITCHES)"


#################################################################
#
#	Make STUB files
#
#################################################################

stubhdr:
	@$(ECHOTEXT)
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT) 'Making stubs'
	@$(ECHOTEXT) $(BORDER)
	@$(ECHOTEXT)

stubs:	stubhdr $(STUBFILES)

STUBtasking.$(OSUFFIX): STUBtasking.c $(STUBINCL)
	$(CC) $(COPTS) $(CFLAGS) STUBtasking.c

STUBisode.$(OSUFFIX): STUBisode.c $(I)binds.h $(STUBINCL)
	$(CC) $(COPTS) $(CFLAGS) STUBisode.c

STUBsock.$(OSUFFIX): STUBsock.c $(I)binds.h $(STUBINCL)
	$(CC) $(COPTS) $(CFLAGS) STUBsock.c

STDbind_STUB.$(OSUFFIX): STDbind_STUB.c $(I)binds.h $(STUBINCL)
	$(CC) $(COPTS) $(CFLAGS) STDbind_STUB.c


#################################################################
#
#	Miscellaneous housekeeping stuff
#
#################################################################

new:	clean
	$(RM) *_LINKS
	$(CD) lib; $(MAKE) new

clean:
	$(RM) $(OFILES) $(STUBFILES) 
	$(RM) $(I)instance.h $(I)tasking.h $(I)binds.h $(I)messages.h 

clean-all:	clean
	$(CD) lib; $(MAKE) clean

#
# For the "package" target, the following macro must be defined as a 
# command line argument.
#
#    RO_DIST_DIR - directory where distribution files are to be copied
#
package: $(DISTFILES)
	$(CP) -p $(DISTFILES) $(RO_DIST_DIR)


#
# For the "install" target, the following macro must be appropriately
# defined.
#
#   RO_INSTALL_DIR - directory where installed files should be copied
#
MY_INSTALL_DIR=	$(RO_INSTALL_DIR)/runtime

install: $(DISTFILES) $(MY_INSTALL_DIR) installall

installall:
	-$(MV) -f $(RO_INSTALL_DIR)/archive/runtime.tar \
		$(RO_INSTALL_DIR)/archive/old.runtime.tar
	$(TAR) -cf $(RO_INSTALL_DIR)/archive/runtime.tar $(MY_INSTALL_DIR)/*
	$(RM) $(MY_INSTALL_DIR)/*
	$(FOR) i in $(DISTFILES); $(DO) ( \
		$(CP) -p $$i $(MY_INSTALL_DIR); \
		$(CHMOD) 444 $(MY_INSTALL_DIR)/$$i; \
	); $(DONE) 
	$(CP) -p $(STUBFILES) $(MY_INSTALL_DIR)
	$(CD) include; $(MAKE) install
	$(CD) $(MY_INSTALL_DIR)/include; $(LN) -s $(ISODE_INCDIR) isode
	$(CD) messages; $(MAKE) install
	$(CD) lib; $(MAKE) install
	$(CD) $(MY_INSTALL_DIR); make

