# TODO
#   - make test
#   - PostgreSQL configuration (host, port, username, password, ..)

# usage:
#   `make create_database`
#      create a `taler-exchange` database
#   `make fetch_source`
#      fetch all *.sql and *.sql.in files from GNU Taler exchange repository (latest commit)
#      file `exchangedb.version` contains hash of latest commit that changed
#      something in exchange/src/exchangedb
#   `make init`
#      initialize taler-exchange database (create tables, ...)
#      `taler-exchange` database must already be created
fetch_source:
	git clone --depth 1 https://git.taler.net/exchange.git/ ./exchange
	mv ./exchange/src/exchangedb/*.sql ./
	mv ./exchange/src/exchangedb/*.sql.in ./
	git log -n 1 --pretty=format:%H -- ./exchange/src/exchangedb > exchangedb.version
	rm -rf ./exchange

clean_source:
	rm -f ./*.sql
	rm -f ./*.sql.in

dbname := taler-exchange
sql_INIT := init.sql
sql_DROP := drop.sql

sql_DATA := \
  versioning.sql \
  exchange-0001.sql \
  exchange-0002.sql \
  exchange-0003.sql \
  exchange-0004.sql \
  exchange-0005.sql \
  procedures.sql

procedures.sql: procedures.sql.in exchange_do_*.sql exchange_statistics_*.sql exchange_trigger_*.sql
	chmod +w $@ 2> /dev/null || true
	gcc -E -P -undef - < procedures.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
	chmod ugo-w $@

exchange-0002.sql: exchange-0002.sql.in 0002-*.sql
	chmod +w $@ 2> /dev/null || true
	gcc -E -P -undef - < exchange-0002.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
	chmod ugo-w $@

exchange-0003.sql: exchange-0003.sql.in 0003-*.sql
	chmod +w $@ 2> /dev/null || true
	gcc -E -P -undef - < exchange-0003.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
	chmod ugo-w $@

exchange-0004.sql: exchange-0004.sql.in 0004-*.sql
	chmod +w $@ 2> /dev/null || true
	gcc -E -P -undef - < exchange-0004.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
	chmod ugo-w $@

gen_sql: procedures.sql exchange-0002.sql exchange-0003.sql exchange-0004.sql

.DEFAULT_GOAL := gen_init
gen_init: gen_sql $(sql_DATA)
	@printf "" > $(sql_INIT)
	@cat $(sql_DATA) >> $(sql_INIT)

clean:
	rm -f procedures.sql
	rm -f exchange-0002.sql
	rm -f exchange-0003.sql
	rm -f exchange-0004.sql
	rm $(sql_INIT)

# "NOTICE:  function xxx() does not exist, skipping" are normal and expected
init: gen_init
	psql --host=localhost --port=5432 --username=mte --password --dbname=$(dbname) --file=$(sql_INIT)

drop:
	psql --host=localhost --port=5432 --username=mte --password --dbname=$(dbname) --file=$(sql_DROP)

create_database:
	createdb --host=localhost --port=5432 --username=mte --password $(dbname)

drop_database:
	dropdb --host=localhost --port=5432 --username=mte --password $(dbname)

reset_database: drop_database create_database
