##############################################################
# Name: /home/users/otso/official/otso/dvops/SCCS/s.Makefile
# Vers: 5.2    Time: 92/08/03, 13:22:53
#
# Copyright (c) 1992      Technical Research Centre of Finland (VTT)
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
# that this notice and the reference to this notice appearing in each software
# module be retained unaltered, and that the name of any contributors shall not
# be used in advertising or publicity pertaining to distribution of the software
# without specific written prior permission.  No contributor makes any
# representations about the suitability of this software for any purpose.
# It is provided "as is" without any express or limited warranty.
#
#			NO WARRANTY
#
# ALL CONTRIBUTORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS.  IN NO
# EVENT SHALL ANY CONTRIBUTOR BE LIABLE FOR ANY SPECIAL, PUNITIVE, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
# DATA, OR PROFITS, WHETHER IN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH, THE USE OR PERFORMANCE
# OF THIS SOFTWARE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THIS
# SOFTWARE IS WITH YOU.  SHOULD THIS SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE
# COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#
# As used above, "contributor" includes, but is not limited to :
#        The Technical Research Centre of Finland
#############################################################################


QUIET_CXX =  $(CXX)

###############################################################################
#   Instructions to Make, for compilation of DVOPS OS process
###############################################################################

LIBES	=	libdvops.a 
#PREPRO  =	/home/users/juha/prepro

##################################################################
# things to make:
##################################################################

all:		libdvops
inst-all:	inst-libdvops 
install:	inst-all clean
lint:		l-libdvops


################################################################
# libdvops
################################################################

CFILES	=	agent.cxx bytes.cxx \
		dyndir.cxx fifo.cxx frame.cxx \
		cframe.c cframef.c group.cxx \
		int.cxx inta.cxx message.cxx multi.cxx namedobj.cxx \
		object.cxx priorvec.cxx process.cxx ring.cxx \
		runner.cxx string.cxx time.cxx type.cxx voidgrp.cxx \
		statobj.cxx sampled.cxx tree.cxx corout.cxx

OFILES	=	agent.o bytes.o \
		dyndir.o fifo.o frame.o \
		cframe.o cframef.o group.o \
		int.o inta.o message.o multi.o namedobj.o \
		object.o priorvec.o process.o ring.o \
		runner.o string.o time.o type.o voidgrp.o \
		statobj.o sampled.o tree.o corout.o

inst-libdvops:	$(LIBDIR)libdvops.a

#
# signal.o was cut out of /usr/lib/libc.a by using 'ar'
# This was cause I had some problems picking up signal.o
# for g++.  In general though, you probably don't need
# signal.o if you use other C++ compilers, or if you
# don't use signals. -jfr
#

$(LIBDIR)libdvops.a: ./libdvops.a
		-rm -f $@
		-rm $(TOPDIR)libdvops.a
		-rm $(LIBDIR)libdvops.a
		-$(INSTALL) libdvops.a $@
		-ranlib $@
		-ls -gls $@
		-@echo "install $@ done"

libdvops:	libdvops.a

libdvops.a:	dvopsvrsn.o
		-rm -f $@
		-ar rv $@ $(OFILES) dvopsvrsn.o
		-rm -f $(TOPDIR)$@
		-$(LN) $@ $(TOPDIR)$@
		-ls -l $@
		-echo "libdvops built normally"

################################################################
# source code
################################################################

dvopsvrsn.c:	$(OFILES)
		@$(UTILDIR)version.sh dvops > $@
		-@chmod 666 $@

inta.cxx:	
		@rm -f inta.cxx $(INCDIR)inta.hxx
		@cat inta.ch > inta.cxx
		@cat inta.hh > inta.hxx
		@cat /dev/null > ./tmpa.cxx
		@cat /dev/null > ./tmpa.hxx
		@cat /dev/null > ./tmpa.enu
		$(PREPRO) object.hxx < $(INCDIR)object.hxx > /dev/null
		$(PREPRO) runner.hxx < $(INCDIR)runner.hxx > /dev/null
		$(PREPRO) channel.hxx < $(ENVDIR)channel.hxx > /dev/null
		sed -f inta.sed tmpa.hxx >> inta.hxx
		sed -f inta.sed tmpa.cxx tmpa.enu >> inta.cxx
		mv inta.hxx $(INCDIR)
		@echo 
		@echo "  New inta.cxx and inta.hxx generated."
		@echo "  If you can't compile inta.cxx, try: make inta.c; mv inta.c tmp; grep -v #line tmp > inta.c; make inta.o" 
		@echo 

#
# NOTE:
# frame.c from CVOPS is used for now.
#  rename frame.c to cframe.c, because me may have a 
#  frame.cxx someday, and the .o names would collide.
#
#  DVOPS for cframe.c cframef.c - yechh
#
#cframe.c:	/files/cvops/code/cvops/SCCS/s.frame.c
####cframe.c:	$(TOPDIR)/dvops/SCCS/s.cframe.c
####		sccs -d/files/dvops/dvops get frame.c
#		mv frame.c cframe.c

agent.o:	agent.cxx $(INCDIR)agent.hxx $(CHANNEL_ETC) \
		$(INCDIR)dyndir.hxx  $(INCDIR)fifo.hxx $(INCDIR)voidgrp.hxx 
bytes.o:	bytes.cxx $(CHANNEL_ETC) $(INCDIR)bytes.hxx
channel.o:	channel.cxx $(ALL_DVOPS_HEADERS)
device_bsd.o:	device_bsd.cxx	$(CHANNEL_ETC) $(DEVICE_BSDH)
dyndir.o:	dyndir.cxx $(INCDIR)dyndir.hxx $(CHANNEL_ETC) \
		 $(INCDIR)voidgrp.hxx
fifo.o:		fifo.cxx $(INCDIR)fifo.hxx $(CHANNEL_ETC) \
		 $(INCDIR)message.hxx $(INCDIR)voidgrp.hxx
frame.o:	frame.cxx $(INCDIR)frame.hxx $(CHANNEL_ETC) \
		$(INCDIR)cvopshdr/frame.ext $(INCDIR)cvopshdr/frame.typ $(INCDIR)asntypes.h $(INCDIR)bytes.hxx

cframe.o:	cframe.c $(INCDIR)cvopshdr/frame.typ
	$(CC)	$(CFLAGS) -DDVOPS -I$(INCDIR)/cvopshdr \
		$(IFLAGS) $(OPTIONS) -g	-c cframe.c

cframef.o:	cframef.c	$(INCDIR)cvopshdr/frame.typ
	$(CC)	$(CFLAGS) -DDVOPS -I$(INCDIR)/cvopshdr \
		$(IFLAGS) $(OPTIONS) -g	-c cframef.c

group.o:	group.cxx $(CHANNEL_ETC)
int.o:		int.cxx $(INCDIR)int.hxx $(CHANNEL_ETC)
inta.o:		$(ALL_DVOPS_HEADERS)
message.o:	message.cxx $(INCDIR)message.hxx $(CHANNEL_ETC) \
		$(INCDIR)agent.hxx  $(INCDIR)process.hxx $(INCDIR)voidgrp.hxx
multi.o:	multi.cxx $(CHANNEL_ETC)
namedobj.o:	namedobj.cxx $(INCDIR)namedobj.hxx $(CHANNEL_ETC) \
		$(INCDIR)voidgrp.hxx $(INCDIR)dyndir.hxx
object.o:	object.cxx $(CHANNEL_ETC) \
		$(INCDIR)dyndir.hxx  $(INCDIR)voidgrp.hxx $(INCDIR)fifo.hxx $(INCDIR)message.hxx $(INCDIR)process.hxx 
priorvec.o:	priorvec.cxx $(INCDIR)priorvec.hxx $(CHANNEL_ETC) 
process.o:	process.cxx $(INCDIR)process.hxx $(CHANNEL_ETC) \
		$(INCDIR)dyndir.hxx  $(INCDIR)voidgrp.hxx
ring.o:		ring.cxx $(INCDIR)ring.hxx $(CHANNEL_ETC) \
		$(INCDIR)fifo.hxx 
runner.o:	runner.cxx $(INCDIR)runner.hxx $(CHANNEL_ETC) \
		$(INCDIR)message.hxx $(INCDIR)process.hxx
string.o:	string.cxx $(INCDIR)string.hxx $(CHANNEL_ETC) \
		$(INCDIR)voidgrp.hxx
time.o:		time.cxx $(CHANNEL_ETC) 
type.o:		type.cxx $(INCDIR)type.hxx $(CHANNEL_ETC) \
		$(INCDIR)message.hxx $(INCDIR)fifo.hxx
voidgrp.o:	voidgrp.cxx $(INCDIR)voidgrp.hxx $(CHANNEL_ETC) 
statobj.o:	statobj.cxx $(ALL_DVOPS_HEADERS)
# statobj.o also depends on 
#		$(TOPDIR)simsrc/simres.hxx $(TOPDIR)simsrc/simctrl.hxx 
# but this is not implemented because of non-simulating version portability.
sampled.o:	sampled.cxx $(ALL_DVOPS_HEADERS) 
corout.o:	corout.cxx $(ALL_DVOPS_HEADERS) 
tree.o:		tree.cxx $(ALL_DVOPS_HEADERS) 

################################################################
# Documentation
################################################################

DOCS	=	dvops.doc

documents:;	@for i in $(DOCS); \
		  do (echo "---- " $$i " ----" >> $(TOPDIR)/master.doc; \
			cat $$i >> $(TOPDIR)/master.doc); \
		  done
		echo "" >> $(TOPDIR)/master.doc

################################################################
# clean
################################################################

clean:;		rm -f *.o *.a core *.old *.tmp *.i *.ixx \
			version.major version.minor version.local \
			$(CLEANSTRINGS)
		-@for i in `ls *.cxx`; \
		do (rm `basename $$i .cxx`.c ; \
		rm `basename $$i .cxx`.i[xx]); \
		done
