VERSION = ${shell cat doc/ChangeLog.md | grep "### " | head -n1 | sed 's/.* - v//'}
PROJECT = dbconcept
PREFIX = usr/local
DEP_HL = ${shell which hl >/dev/null 2>&1; echo $$?}
DEP_GPP = ${shell which g++ >/dev/null 2>&1; echo $$?}
DEP_JAVA = ${shell which javac >/dev/null 2>&1; echo $$?}
SQLITE_JDBC = 3.45.2.0
MARIADB_JDBC = 3.3.0 #2.7.10
MYSQL_JDBC = 8.0.23

APP_URI = frankendres@ftp.tuxfamily.org:/home/${PROJECT}/${PROJECT}.tuxfamily.org-web/htdocs
ZIP_URI = frankendres@ftp.tuxfamily.org:${PROJECT}/${PROJECT}-repository


all:
	@echo make install
	@echo make uninstall
	@echo make cpp
	@echo make java
	@echo make php
	@echo make web
	@echo ""
	@echo make test
	@echo make checkstyle
	@echo ""
	@echo make www
	@echo make upload
	@echo make clean

php: out/php/DBConcept.php

cpp: out/cpp/dbconcept

#~ hlc: out/c/dbconcept

java: out/java/dbconcept.jar

#~ neko: out/neko/dbconcept

#~ nodejs: out/nodejs/dbconcept.js

#~ python: out/python/dbconcept.py


web: web-lib out/js/dbconcept.js web/index.html web/index.css web/index.js web/dbconcept.webmanifest web/favicon.png
	mkdir -p out/web/
	cp out/js/dbconcept.js out/web/
	cp web-lib/* out/web/
	cp web/* out/web/
	chmod a+r out/web/*

web2: web-lib out/js/dbconcept.js web2/index.html web2/index.css web2/index.js web2/dbconcept.webmanifest web2/favicon.png
	mkdir -p out/web2/
	cp out/js/dbconcept.js out/web2/
	cp web-lib/* out/web2/
	cp web2/* out/web2/
	chmod a+r out/web2/*

out/js/dbconcept.js: src/*.hx src/*/*.hx web/*
	haxe -D js-es=6 -cp src -js out/js/dbconcept.js source/Mocodo.hx \
		transform/DiagramToMLD.hx transform/DiagramToUML.hx JzZip.hx \
		$$(cd src; ls schema/* database/* code/*)

web-lib: web-lib/microns.woff2

web-lib/microns.woff2:
	mkdir -p web-lib
	wget -O web-lib/microns.woff2 https://github.com/stephenhutchings/microns/raw/master/fonts/microns.woff2


out/php/DBConcept.php: src/*.hx src/*/*.hx
	haxe -cp src -php out/php/ -main DBConcept
	rm -f out/php/index.php
	mv out/php/lib/* out/php/
	rmdir out/php/lib

out/cpp/dbconcept: src/*.hx src/*/*.hx
ifeq ($(DEP_GPP),0)
	haxe -cp src -main DBConcept -cpp out/cpp-gen
	mkdir -p out/cpp/
	mv out/cpp-gen/DBConcept out/cpp/dbconcept
endif

#~ out/c/dbconcept: src/*.hx src/*/*.hx
#~ ifeq ($(DEP_HL),0)
#~ 	haxe -cp src -main DBConcept -hl out/c-gen/dbconcept.c
#~ 	mkdir -p out/c
#~ 	gcc -O3 -o out/c/dbconcept -std=c11 -I out/c-gen out/c-gen/dbconcept.c -lhl
#~ endif

out/java/dbconcept.jar: src/*.hx src/*/*.hx
	@if [ ! -f java-lib/sqlite-jdbc-${SQLITE_JDBC}.jar ]; then mkdir -p java-lib; wget -O java-lib/sqlite-jdbc-${SQLITE_JDBC}.jar https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/${SQLITE_JDBC}/sqlite-jdbc-${SQLITE_JDBC}.jar; fi
#~ 	@if [ ! -f java-lib/mariadb-jdbc-${MARIADB_JDBC}.jar ]; then mkdir -p java-lib; wget -O java-lib/mariadb-jdbc-${MARIADB_JDBC}.jar https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/${MARIADB_JDBC}/mariadb-java-client-${MARIADB_JDBC}.jar; fi
	@if [ ! -f java-lib/mysql-connector-java-${MYSQL_JDBC}.jar ]; then wget -O java-lib/mysql-connector-java-${MYSQL_JDBC}.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_JDBC}/mysql-connector-java-${MYSQL_JDBC}.jar; fi
ifeq ($(DEP_JAVA),0)
	rm -rf out/java
	haxe -cp src -main DBConcept -java out/java-gen -java-lib java-lib/sqlite*.jar -java-lib java-lib/mysql*.jar
	mkdir -p out/java/
	mv out/java-gen/lib out/java
	mv out/java-gen/DBConcept.jar out/java/dbconcept.jar
else
	haxe -cp src -main DBConcept -java out/java -D jvm -java-lib java-lib/sqlite*.jar -java-lib java-lib/mysql*.jar
	mv out/java/DBConcept.jar out/java/dbconcept.jar
endif
	echo 'LIB="$$(dirname $$(readlink "$$0" || echo "$$0"))"' > out/java/dbconcept
	echo 'java -jar "$$LIB/dbconcept.jar" $$*' >> out/java/dbconcept
	chmod 755 out/java/dbconcept

#~ out/neko/dbconcept: src/*.hx src/*/*.hx
#~ 	haxe -cp src -main DBConcept -neko out/neko/dbconcept.n
#~ 	nekotools boot out/neko/dbconcept.n
#~ 	rm -f out/neko/dbconcept.n

#~ out/nodejs/dbconcept.js: src/*.hx src/*/*.hx
#~ 	haxe -cp src -main DBConcept -js out/nodejs/dbconcept.js -lib hxnodejs

#~ out/python/dbconcept.py: src/*.hx src/*/*.hx
#~ 	haxe -cp src -main DBConcept -python out/python/dbconcept.py
#~ 	chmod +x out/python/dbconcept.py


www: doc/LISEZ-MOI.md doc/LISEZ-MOI-DEV.md doc/ChangeLog.md sitegen.sh.cfg doc/dbconcept-screenshot.svg doc/favicon.svg
	sitegen.sh

upload: checkstyle test clean java web www
	webminifier web/index.css out/web/index.css 2>/dev/null
	webminifier web/index.html out/web/index.html 2>/dev/null
	closure-compiler web/index.js --js_output_file out/web/index.js 2>/dev/null
	closure-compiler out/web/dbconcept.js --js_output_file out/web/dbconcept-min.js
	mv out/web/dbconcept-min.js out/web/dbconcept.js
	#cd ..; mv ${PROJECT} ${PROJECT}-${VERSION}
	cd ..; zip -r ${PROJECT}-${VERSION}.zip ${PROJECT}-${VERSION}
	#cd ..; mv ${PROJECT}-${VERSION} ${PROJECT}
	scp -r out/web/* ${APP_URI}/online/
	scp -r www/* ${APP_URI}/
	scp ../${PROJECT}-${VERSION}.zip ${ZIP_URI}/
	rm ../${PROJECT}-${VERSION}.zip
	make clean

#for fast deployment and testing (undocummented):
online: clean web
	scp -r out/web/* ${APP_URI}/online/

clean:
	rm -rf out
	rm -rf www 
	rm -f doc/examples/*.svg doc/examples/*.mld doc/examples/*.sql doc/examples/*.{sqlite,db}

checkstyle:
	haxelib run checkstyle -s src

test:
	haxe -lib utest -cp src -cp tests -main Tests --interp

install: cpp
	mkdir -p ${DESTDIR}/${PREFIX}/bin
	cp out/cpp/dbconcept ${DESTDIR}/${PREFIX}/bin

uninstall:
	rm -f ${DESTDIR}/${PREFIX}/bin/dbconcept
	rmdir -p ${DESTDIR}/${PREFIX}/bin 2>/dev/null || true
