#This is the Makefile for the ss98 system visualization package
JAVADIR	= /usr/local/jdk/
CC = gcc
CFLAGS = -g -shared
INCLUDE = -I/usr/local/jdk/include/ -I/usr/local/jdk/include/genunix
JCC = jikes -nowarn
JAR = jar
JNI = javah
JNIFLAGS = -jni
JARFLAGS = cvf
SYSTEMDIR = ss98/system/
RMIDIR = ss98/rmi/
RMI = rmic
RMIFLAGS = -classpath $(CLASSPATH) -d .
SNMPDIR = ss98/snmp/
JSNMPDIR = jsnmp/
JSNMPLIBDIR = j_snmp_lib/
GUIDIR = ss98/gui/
MAINDIR = ss98/
CLASSPATH = $(JAVADIR)lib/classes.zip:.:$(JAVADIR)/lib/swingall.jar:./jsnmp.jar:./ss98.jar
JFLAGS = -classpath $(CLASSPATH)
INSTALLDIR = /home/jeremiah/public_html
VERSION = 0.2

sourcedist: clean cleanjars
	cd ..;tar cvfz ss98.$(VERSION).tgz project

docdist: docs
	tar zcvf ../ss98.$(VERSION).docs.tgz ./docs

install: jars $(INSTALLDIR)/images
	cp -v *.jar $(INSTALLDIR)
	cp ss98.html $(INSTALLDIR)
	cp -vr images/* $(INSTALLDIR)/images
$(INSTALLDIR)/images : 
	mkdir $(INSTALLDIR)/images
all: system jsnmp j_snmp_lib snmp rmi main gui

jars : jsnmp.jar ss98.jar ss98C.jar

test: jars all kill install $(RMIDIR)ss98Server_Skel.class
	rmiregistry & sleep 3
	java $(JFLAGS) ss98.rmi.ss98Server &


MAINOBJS = $(MAINDIR)ss98Client.class $(SNMPDIR)ss98Host.class $(SNMPDIR)OID.class
main: rmi $(MAINOBJS) 

$(MAINDIR)ss98Client.class: $(MAINDIR)ss98Client.java $(RMIDIR)ss98Server_Stub.class
	$(JCC) $(JFLAGS) $(MAINDIR)ss98Client.java

RMIOBJS = $(RMIDIR)ss98Interface.class $(RMIDIR)ss98Server.class \
	$(RMIDIR)ss98Server_Skel.class $(RMIDIR)ss98Server_Stub.class

rmi: $(RMIOBJS)

$(RMIDIR)ss98Interface.class : $(RMIDIR)ss98Interface.java
	$(JCC) $(JFLAGS) $(RMIDIR)ss98Interface.java
$(RMIDIR)ss98Server.class : $(RMIDIR)ss98Interface.class $(RMIDIR)ss98Server.java
	$(JCC) $(JFLAGS) $(RMIDIR)ss98Server.java
$(RMIDIR)ss98Server_Skel.class : $(RMIDIR)ss98Server.class
	$(RMI) $(RMIFLAGS) ss98.rmi.ss98Server
$(RMIDIR)ss98Server_Stub.class : $(RMIDIR)ss98Server.class
	$(RMI) $(RMIFLAGS) ss98.rmi.ss98Server

GUIOBJS = $(GUIDIR)JCanvas.class $(GUIDIR)MyJMenu.class \
	$(GUIDIR)MyJToolBar.class $(GUIDIR)anAction.class\
	$(GUIDIR)HostDialog.class $(GUIDIR)NodeColor.class
gui : $(GUIOBJS)

$(GUIDIR)JCanvas.class :$(GUIDIR)JCanvas.java
	$(JCC) $(JFLAGS) $(GUIDIR)JCanvas.java
$(GUIDIR)MyJMenu.class : $(GUIDIR)MyJMenu.java
	$(JCC) $(JFLAGS) $(GUIDIR)MyJMenu.java
$(GUIDIR)MyJToolBar.class : $(GUIDIR)MyJToolBar.java
	$(JCC) $(JFLAGS) $(GUIDIR)MyJToolBar.java
$(GUIDIR)anAction.class : $(GUIDIR)anAction.java
	$(JCC) $(JFLAGS) $(GUIDIR)anAction.java
$(GUIDIR)HostDialog.class : $(GUIDIR)HostDialog.java
	$(JCC) $(JFLAGS) $(GUIDIR)HostDialog.java
$(GUIDIR)NodeColor.class : $(GUIDIR)NodeColor.java
	$(JCC) $(JFLAGS) $(GUIDIR)NodeColor.java


SNMPOBJS = $(SNMPDIR)MIBparser.class $(SNMPDIR)ObjectNode.class $(SNMPDIR)ss98Host.class $(SNMPDIR)OID.class

snmp: $(SNMPOBJS)

$(SNMPDIR)MIBparser.class:$(SNMPDIR)MIBparser.java
	$(JCC) $(JFLAGS) $(SNMPDIR)MIBparser.java
$(SNMPDIR)ObjectNode.class:$(SNMPDIR)ObjectNode.java
	$(JCC) $(JFLAGS) $(SNMPDIR)ObjectNode.java
$(SNMPDIR)ss98Host.class: $(SNMPDIR)ss98Host.java
	$(JCC) $(JFLAGS) $(SNMPDIR)ss98Host.java
$(SNMPDIR)OID.class: $(SNMPDIR)OID.java
	$(JCC) $(JFLAGS) $(SNMPDIR)OID.java

#ss98 system classes
SYSTEMOBJS = $(SYSTEMDIR)libLinuxNative.so $(SYSTEMDIR)Process.class $(SYSTEMDIR)LinuxSocket.class \
	$(SYSTEMDIR)ProcParser.class $(SYSTEMDIR)Service.class $(SYSTEMDIR)Process.h 
system: $(SYSTEMOBJS)

$(SYSTEMDIR)libLinuxNative.so : $(SYSTEMDIR)Process.class $(SYSTEMDIR)Process.h
	$(CC) $(CFLAGS) $(INCLUDE) $(SYSTEMDIR)LinuxNative.c -o $(SYSTEMDIR)libLinuxNative.so
$(SYSTEMDIR)Process.h : $(SYSTEMDIR)Process.class
	$(JNI) $(JNIFLAGS) -o $(SYSTEMDIR)Process.h ss98.system.Process
$(SYSTEMDIR)Process.class : $(SYSTEMDIR)Process.java
	$(JCC) $(JFLAGS) $(SYSTEMDIR)Process.java
$(SYSTEMDIR)LinuxSocket.class : $(SYSTEMDIR)LinuxSocket.java
	$(JCC) $(JFLAGS) $(SYSTEMDIR)LinuxSocket.java
$(SYSTEMDIR)ProcParser.class :$(SYSTEMDIR)ProcParser.java
	$(JCC) $(JFLAGS) $(SYSTEMDIR)ProcParser.java
$(SYSTEMDIR)Service.class :$(SYSTEMDIR)Service.java
	$(JCC) $(JFLAGS) $(SYSTEMDIR)Service.java


ss98.jar: $(RMIOBJS) $(SYSTEMOBJS) $(SNMPOBJS)
	$(JAR) $(JARFLAGS) ss98.jar $(SYSTEMDIR)*.class \
	$(RMIDIR)*.class $(SNMPDIR)*.class

ss98C.jar: $(GUIOBJS) $(RMIOBJS) $(MAINOBJS)
	$(JAR) $(JARFLAGS) ss98C.jar $(MAINOBJS) $(GUIOBJS) $(RMIOBJS) ./images/*

#these are the jsnmp dependencies

JSNMPOBJS = $(JSNMPDIR)ASNTypes.class $(JSNMPDIR)SnmpConstants.class \
	$(JSNMPDIR)SnmpCounter.class $(JSNMPDIR)SnmpErrors.class \
	$(JSNMPDIR)SnmpException.class $(JSNMPDIR)SnmpGauge.class \
	$(JSNMPDIR)SnmpGauge.class $(JSNMPDIR)SnmpInt.class \
	$(JSNMPDIR)SnmpIpAddress.class $(JSNMPDIR)SnmpNull.class \
	$(JSNMPDIR)SnmpOID.class $(JSNMPDIR)SnmpOctetString.class \
	$(JSNMPDIR)SnmpOpaque.class $(JSNMPDIR)SnmpPDU.class \
	$(JSNMPDIR)SnmpSession.class $(JSNMPDIR)SnmpSession.class \
	$(JSNMPDIR)SnmpTimeticks.class $(JSNMPDIR)SnmpUnsignedInt.class \
	$(JSNMPDIR)SnmpVar.class $(JSNMPDIR)SnmpVarBind.class

jsnmp : $(JSNMPOBJS)


jsnmp.jar : $(JSNMPLIBDIR)snmp_api.class $(JSNMPOBJS)
	$(JAR) $(JARFLAGS) jsnmp.jar $(JSNMPDIR)*.class $(JSNMPLIBDIR)*.class

$(JSNMPDIR)ASNTypes.class : $(JSNMPDIR)ASNTypes.java 
	$(JCC) $(JFLAGS) $(JSNMPDIR)ASNTypes.java

$(JSNMPDIR)SnmpConstants.class : $(JSNMPDIR)SnmpConstants.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpConstants.java

$(JSNMPDIR)SnmpCounter.class : $(JSNMPDIR)SnmpCounter.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpCounter.java

$(JSNMPDIR)SnmpErrors.class :   $(JSNMPDIR)SnmpErrors.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpErrors.java

$(JSNMPDIR)SnmpException.class :   $(JSNMPDIR)SnmpException.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpException.java

$(JSNMPDIR)SnmpGauge.class : $(JSNMPDIR)SnmpGauge.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpGauge.java

$(JSNMPDIR)SnmpInt.class : $(JSNMPDIR)SnmpInt.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpInt.java

$(JSNMPDIR)SnmpIpAddress.class : $(JSNMPDIR)SnmpIpAddress.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpIpAddress.java

$(JSNMPDIR)SnmpNull.class : $(JSNMPDIR)SnmpNull.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpNull.java

$(JSNMPDIR)SnmpOID.class : $(JSNMPDIR)SnmpOID.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpOID.java

$(JSNMPDIR)SnmpOctetString.class : $(JSNMPDIR)SnmpOctetString.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpOctetString.java

$(JSNMPDIR)SnmpOpaque.class : $(JSNMPDIR)SnmpOpaque.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpOpaque.java

$(JSNMPDIR)SnmpPDU.class : $(JSNMPDIR)SnmpPDU.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpPDU.java

$(JSNMPDIR)SnmpSession.class : $(JSNMPDIR)SnmpSession.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpSession.java

$(JSNMPDIR)SnmpTimeticks.class : $(JSNMPDIR)SnmpTimeticks.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpTimeticks.java

$(JSNMPDIR)SnmpUnsignedInt.class : $(JSNMPDIR)SnmpUnsignedInt.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpUnsignedInt.java

$(JSNMPDIR)SnmpVar.class : $(JSNMPDIR)SnmpVar.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpVar.java

$(JSNMPDIR)SnmpVarBind.class : $(JSNMPDIR)SnmpVarBind.java
	$(JCC) $(JFLAGS) $(JSNMPDIR)SnmpVarBind.java 

j_snmp_lib : $(JSNMPLIBDIR)snmp_api.class

$(JSNMPLIBDIR)snmp_api.class : $(JSNMPLIBDIR)snmp_api.java
	$(JCC) $(JFLAGS) $(JSNMPLIBDIR)snmp_api.java

clean:
	rm -vf $(JSNMPOBJS) $(SYSTEMOBJS) $(RMIOBJS) $(SNMPOBJS) $(GUIOBJS) $(MAINOBJS)
	rm -vf $(JSNMPLIBDIR)*.class

cleanjars : 
	rm -vf jsnmp.jar ss98.jar ss98C.jar

kill:
	tcsh -c 'echo `ps ww| grep ss98Server|grep -v grep |awk \{print\ \$$1\}` > .pid'
	tcsh -c 'echo `ps ww| grep rmiregistry|grep -v grep |awk \{print\ \$$1\}` >> .pid'
	tcsh -c 'echo `ps ww| grep RegistryImpl|grep -v grep |awk \{print\ \$$1\}` >> .pid'
	kill `cat .pid`

allclean : clean cleanjars kill

count:
	@echo  Total lines: `find ./ss98 -name '*.java' -exec cat {} \; |wc -l`
	@echo  Total words: `find ./ss98 -name '*.java' -exec cat {} \; |wc -w`
	@echo  Total bytes: `find ./ss98 -name '*.java' -exec cat {} \; |wc -c`

docs: all
	javadoc ss98 ss98.gui ss98.rmi ss98.system ss98.snmp jsnmp j_snmp_lib -private -d ./docs
