JAR_NAME = clawcircus.jar

DIST_DIR = ../dist

PUBLISH_DIR = /media/circus-www/cld/downloads

CLAWCIRCUS_PKG = org.zeyda.clawcircus
CLAWCIRCUS_SRC = src/java/org/zeyda/clawcircus

BLOCKTYPES_GEN_PKG = $(CLAWCIRCUS_PKG).Data.Diagram.BlockTypes.gen
BLOCKTYPES_GEN_SRC = $(CLAWCIRCUS_SRC)/Data/Diagram/BlockTypes/gen

BLOCKTYPES_CUSTOM_PKG = $(CLAWCIRCUS_PKG).Data.Diagram.BlockTypes.custom
BLOCKTYPES_CUSTOM_SRC = $(CLAWCIRCUS_SRC)/Data/Diagram/BlockTypes/custom

CLASP_XSD = src/resources/jaxb/clasp.xsd
CLASP_XJB = src/resources/jaxb/clasp.xjb

CLASP_XML = clasp/blocklibrary.xml

BUILD_LIB = lib/czt.jar:lib/stringtemplate.jar

JAVAC_OPT = -Xlint:unchecked

PATH := build/bin:$(PATH)

export PATH

all : jar

javac : jaxb gen
	javac $(JAVAC_OPT) -sourcepath src/java -classpath $(BUILD_LIB) -d classes $(CLAWCIRCUS_SRC)/Application/*.java
	javac $(JAVAC_OPT) -sourcepath src/java -classpath $(BUILD_LIB) -d classes $(CLAWCIRCUS_SRC)/Application/Test/*.java
	javac $(JAVAC_OPT) -sourcepath src/java -classpath $(BUILD_LIB) -d classes $(BLOCKTYPES_CUSTOM_SRC)/*.java

jaxb :
	xjc -d src/java -p $(CLAWCIRCUS_PKG).IO.ClaSP.jaxb $(CLASP_XSD) -b $(CLASP_XJB)
	javac -Xlint:-unchecked -sourcepath src/java -d classes $(CLAWCIRCUS_SRC)/IO/ClaSP/jaxb/*.java

gen : tools
	blocktypesgen -d src/java -p $(BLOCKTYPES_GEN_PKG) $(CLASP_XML)
	javac $(JAVAC_OPT) -sourcepath src/java -classpath $(BUILD_LIB) -d classes $(BLOCKTYPES_GEN_SRC)/*.java

tools :
	javac $(JAVAC_OPT) -sourcepath src/java -classpath $(BUILD_LIB) -d classes $(CLAWCIRCUS_SRC)/Application/Build/*.java

jar : javac
	jar cf lib/$(JAR_NAME) -C classes org
	jar uf lib/$(JAR_NAME) -C src resources
	@echo "-> Build successful!"

dist : dist-src dist-bin remove-restr
	tar -C $(DIST_DIR) --exclude='.svn' -czvf $(DIST_DIR)/clawcircus-src.tar.gz clawcircus-src
	tar -C $(DIST_DIR) --exclude='.svn' -czvf $(DIST_DIR)/clawcircus.tar.gz clawcircus
	rm -rf $(DIST_DIR)/clawcircus-src $(DIST_DIR)/clawcircus
	@echo "-> Distribution successful!"

dist-src : clean
	rm -rf $(DIST_DIR)/clawcircus-src
	mkdir $(DIST_DIR)/clawcircus-src
	cp -rL * $(DIST_DIR)/clawcircus-src

dist-bin : clean jar
	rm -rf $(DIST_DIR)/clawcircus
	mkdir $(DIST_DIR)/clawcircus
	cp -r bin $(DIST_DIR)/clawcircus
	cp -r clasp $(DIST_DIR)/clawcircus
	cp -r doc $(DIST_DIR)/clawcircus
	cp -r latex $(DIST_DIR)/clawcircus
	cp -rL lib $(DIST_DIR)/clawcircus
	cp -rL lmf $(DIST_DIR)/clawcircus
	cp -rL simulink $(DIST_DIR)/clawcircus
	cp README.txt $(DIST_DIR)/clawcircus
	cp -r tmp $(DIST_DIR)/clawcircus

remove-restr :
	rm -f $(DIST_DIR)/clawcircus-src/lmf/*
	rm -f $(DIST_DIR)/clawcircus-src/simulink/CommandResponseMonitor.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/ElevatorControlling.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/EngagementLogic.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/PriorityLogic.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/Voter.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/WOWComputation.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/control.mdl
	rm -f $(DIST_DIR)/clawcircus-src/simulink/control_orig.mdl        
	rm -f $(DIST_DIR)/clawcircus-src/simulink/NDI.mdl
	rm -f $(DIST_DIR)/clawcircus/lmf/*
	rm -f $(DIST_DIR)/clawcircus/simulink/CommandResponseMonitor.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/ElevatorControlling.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/EngagementLogic.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/PriorityLogic.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/Voter.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/WOWComputation.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/control.mdl
	rm -f $(DIST_DIR)/clawcircus/simulink/control_orig.mdl        
	rm -f $(DIST_DIR)/clawcircus/simulink/NDI.mdl

publish : dist
	cp $(DIST_DIR)/*.tar.gz $(PUBLISH_DIR)
	@echo "-> Publish successful!"

clean ::
	rm -f $(CLAWCIRCUS_SRC)/IO/ClaSP/jaxb/*.java
	rm -f $(BLOCKTYPES_GEN_SRC)/*.java
	rm -rf classes/* lib/$(JAR_NAME) tmp/*

include misc/makefile.simulink
