# Makefile to create the components of the dSelf environment


# Java: prefered Compiler & Interpreter 

JAVA  = java
JAVACOMPILE = jikes 
JFLEX = jflex
CUP   = $(JAVA) java_cup.Main
JDEPS = $(JAVA) -jar /usr/share/JavaDeps-1.1/jdeps.jar
RMIC  = rmic 

# Build all and, if necessary, create stub and skel. for RMI
default: all rmi
include deps

all: $(CLASSES)

# Create the depenencies with jdeps
dep:
	$(JDEPS)   *.java parser/*.java  dSelf/*.java > deps

# Den SelfCompiler erzeugen

compiler: dSelfComp.class

# Generate the parser with Cup 

parser: parser/dSelfParser.java 

parser/dSelfParser.java: parser/dSelfScanner.java parser/dSelfSyntax.cup 
	$(CUP) -parser dSelfParser -package parser parser/dSelfSyntax.cup
	mv -f sym.java dSelfParser.java parser

dump:   
	$(CUP) -parser dSelfParser -package parser -dump parser/dSelfSyntax.cup 
	mv -f sym.java dSelfParser.java parser

parser/sym.java: parser/dSelfParser.java

# Generate the scanner with JFlex

scanner: parser/dSelfScanner.java

parser/dSelfScanner.java: parser/dSelfLex.flex 
	${JFLEX} parser/dSelfLex.flex


# When the class of the server changed it must be recompiled by rmic
rmi: dSelf/Server_Skel.class dSelf/Server_Stub.class

dSelf/Server_Skel.class dSelf/Server_Stub.class: dSelf/ServerInterface.class
	$(RMIC) dSelf.Server


# Clean up

clean:
	rm -f *.class *~ 
	rm -f parser/*.class parser/*~ 
	rm -f parser/dSelfParser.java parser/dSelfScanner.java parser/sym.java 
	rm -f dSelf/*.class dSelf/*~ 

# Generate the documentation with javadoc

docu: 
	javadoc -d doc parser/*.java dSelf/*.java *.java java_cup/runtime/*.java 

# Delete old Documentation

cleandocu:
	rm -rf doc/*

# Show all make targets

help:
	echo -e "Possible targets are:\n"
	echo    "help:        this text"	
	echo    "all:         compile the dSelf-Virtual-Machine"	
	echo    "compiler:    compile the dSelf-Compiler"	
	echo    "parser:      generate the dSelf-Parser with CUP"	
	echo    "dump:        dump the parse-table generate by CUP"	
	echo    "scanner:     generate the dSelf-Scanner with JFlex"	
	echo    "clean:       delete all created class-files"	
	echo    "docu:        create the documentation with javadoc"	
	echo    "cleandocu:   delete old documentation"	
        echo    "deps:        update the dependencies with JavaDeps"   	
