# Andreas Romeyke, SLUB Dresden
# erzeugt Submission-Application, die vorbereitete Verzeichnisse per Java SDK
# von ExLibris an Rosetta übergibt.

# Pfad zu Java
JAVAPATH=$(wildcard /usr/lib/jvm/java-1.17.0-openjdk-*/bin/)
JAVARELEASE=17

# Verwendete Rosetta-Version
ROSETTAVERSION:=7.3.0

# Pfad zum Rosetta-SDK
ROSETTASDK:=$(shell find /exlibris/ -type d -regex ".*dps-sdk-${ROSETTAVERSION}/lib$$")
# Pfad zum Rosetta-SDK, Deposit-Module
ROSETTASDKDEPOSIT:=${ROSETTASDK}/../dps-sdk-projects/dps-sdk-deposit/lib
ROSETTASDKPLUGINS:=${ROSETTASDK}/../../bundled_plugins/
ROSETTASDKJARS=$(shell find ${ROSETTASDKDEPOSIT} -name "*.jar")

# classpath
JUNITCLASSPATH:=./java/:/usr/share/java/junit4.jar:$(shell find ${ROSETTASDKDEPOSIT} -name "*.jar" -print |xargs echo |sed -e "s/ /:/g")
CLASSPATH:=${ROSETTASDKDEPOSIT}/../src/:${ROSETTASDKDEPOSIT}/xmlbeans-2.3.0.jar:${ROSETTASDKDEPOSIT}/dps-sdk-${ROSETTAVERSION}.jar:${ROSETTASDKDEPOSIT}/log4j-1.2.14.jar:${ROSETTASDKPLUGINS}/NFSStoragePlugin.jar

# sources
SOURCES:=java/org/slub/rosetta/dps/repository/plugin/SLUBVirusCheckClamAVPlugin.java
OBJS:=$(SOURCES:.java=.class)
JAR:=SLUBVirusCheckPlugin.jar
BUILD:=build/
SHELL=/bin/bash

all: $(BUILD) $(JAR)

help:
	@echo "erzeugt viruscheck plugin für Rosetta von Exlibris"
	@echo ""
	@echo "Das Argument 'clean' löscht temporäre Dateien, 'help' gibt diese Hilfe aus und"
	@echo "'all' erzeugt ein JAR-File und ein Bash-Script welches das Java-Programm"
	@echo "aufruft."

jarclean:
	@rm -Rf $(BUILD)


clean: jarclean
	@rm -Rf doc/
	@find ./java/org/ -name "*.class" -exec rm -f \{\} \;
	@rm -Rf $(JAR)
	@rm test_novirus
	@rm test_eicar

distclean: clean
	find ./ -name "*~" -exec rm -f \{\} \;

$(BUILD):
	@mkdir $@;
	@mkdir $@/lib

$(JAR): $(OBJS) $(BUILD)
	@cp -r PLUGIN-INF/ $(BUILD)
	@cp -r META-INF/ $(BUILD)
	@cd java; find ./ -name "*.class" -print -exec cp --parents -r \{\} $(PWD)/$(BUILD) \; ; cd ..
	@cd $(BUILD); ${JAVAPATH}/jar cfvM ../$@ ./* ; cd ..

%.class: %.java
	${JAVAPATH}/javac --release ${JAVARELEASE} -g -classpath ${CLASSPATH}:${JUNITCLASSPATH} -Xlint:all $<

doc: $(SOURCES)
	javadoc -d doc/ $^

check_prerequisites:
	@echo -n "### Checking java path: $(JAVAPATH) ...."
	@if [ -e $(JAVAPATH) ]; then echo "fine :)"; else echo " not found! :("; fi
	@echo -n "### Checking Exlibris Rosetta SDK path: $(ROSETTASDK) ...."
	@if [ -e $(ROSETTASDK) ]; then echo "fine :)"; else echo " not found! :("; fi


test_eicar: $(OBJS)
	@/usr/bin/java -cp $(CLASSPATH):$(JUNITCLASSPATH):java org.slub.rosetta.dps.repository.plugin.SLUBVirusCheckClamAVPlugin EICAR/eicar | grep -F 'SIGNATURE:' > $@
	@echo -n "testing 'EICAR':"
	@if [[ "$$(cat test_eicar)" = "RESULT: 2 SIGNATURE: Eicar-Signature" ]]; then echo pass; else echo failed; exit 2;fi

test_novirus: $(OBJS)
	@/usr/bin/java -cp $(CLASSPATH):$(JUNITCLASSPATH):java org.slub.rosetta.dps.repository.plugin.SLUBVirusCheckClamAVPlugin Makefile | grep -F 'SIGNATURE:' > $@
	@echo -n "testing 'No virus': "
	@if [[ "$$(cat test_novirus)" = "RESULT: 0 SIGNATURE: " ]]; then echo pass; else echo fail; exit 2; fi

test:  test_eicar test_novirus

.PHONY: help check_prerequisites clean distclean jarclean test test_eicar test_novirus
