#!/usr/bin/make -f

include /usr/share/javahelper/java-vars.mk
include /usr/share/dpkg/pkg-info.mk

DEB_PKGNAME := $(shell dpkg-parsechangelog -SSource)
DEB_VERSION := $(shell dpkg-parsechangelog -SVersion)
DEB_NOEPOCH_VERSION := $(shell echo $(DEB_VERSION) | cut -d: -f2-)
DEB_UPSTREAM_VERSION := $(shell echo $(DEB_NOEPOCH_VERSION) | sed 's/-[^-]*$$//')
GIT_TAG := $(shell echo '$(DEB_UPSTREAM_VERSION)' | sed -e 's/~/_/')
UPSTREAM_GIT = https://github.com/puppetlabs/trapperkeeper-status


MDWN_DOCS = $(patsubst %.md,%.html,$(wildcard $(CURDIR)/*.md))

PRODUCED_JAR=trapperkeeper-status.jar
export CLASSPATH=/usr/share/java/clojure.jar:/usr/share/java/clj-time.jar:/usr/share/java/ring-core.jar:/usr/share/java/commons-codec.jar:/usr/share/java/tools.macro.jar:/usr/share/java/tools.logging.jar:/usr/share/java/tools.reader.jar:/usr/share/java/tools.trace.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/cheshire.jar:/usr/share/java/prismatic-schema.jar:/usr/share/java/ring-defaults.jar:/usr/share/java/slingshot.jar:/usr/share/java/versioneer.jar:/usr/share/java/java.jmx.jar:/usr/share/java/kitchensink.jar:/usr/share/java/trapperkeeper.jar:/usr/share/java/puppetlabs-ring-middleware.jar:/usr/share/java/comidi.jar:/usr/share/java/trapperkeeper-scheduler.jar
TEST_CLASSPATH=/usr/share/java/puppetlabs-http-client.jar:/usr/share/java/trapperkeeper-test.jar:/usr/share/java/trapperkeeper-webserver-jetty9.jar:/usr/share/java/kitchensink-test.jar

MAVEN_INF=$(CURDIR)/debian/META-INF/maven/puppetlabs/trapperkeeper-status
LEIN_INF=$(CURDIR)/debian/META-INF/leiningen/puppetlabs/trapperkeeper-status

%:
	dh $@ --with javahelper --with jh_maven_repo_helper

override_jh_build: $(MDWN_DOCS)
	jar cf $(PRODUCED_JAR) -C src .
	mkdir -p $(CURDIR)/doc/html && mv $(CURDIR)/*.html $(CURDIR)/doc/html
	mkdir -p $(MAVEN_INF) $(LEIN_INF)
	cp debian/pom.xml $(MAVEN_INF)
	sed -e 's/@VERSION@/$(DEB_VERSION_UPSTREAM)/' debian/pom.properties > $(MAVEN_INF)/pom.properties
	cp project.clj $(LEIN_INF)
	jar uf $(PRODUCED_JAR) -C debian META-INF


override_jh_classpath:
	jh_classpath $(PRODUCED_JAR)

override_jh_clean:
	jh_clean
	rm -f $(CURDIR)/$(PRODUCED_JAR)
	rm -rf $(CURDIR)/doc/html
	rm -rf $(CURDIR)/debian/META-INF

%.html:%.md
	cat debian/header.html > $@
	sed -i'' -e 's#@TITLE@#$(shell head -n 1 $< | sed 's/^#*\s*//')#g' $@
	markdown $< >> $@
	cat debian/footer.html >> $@

# Tests can't run in a random order (#880351):
override_dh_auto_test: ORDERED_TESTS=puppetlabs/trapperkeeper/services/status/check_test.clj puppetlabs/trapperkeeper/services/status/status_core_test.clj puppetlabs/trapperkeeper/services/status/status_proxy_service_test.clj puppetlabs/trapperkeeper/services/status/status_service_test.clj
override_dh_auto_test: EXPECTED=$(shell echo "$(ORDERED_TESTS)" | sed 's/ /\n/g' | sort | xargs)
override_dh_auto_test: FOUND=$(shell cd test && find -name '*.clj' | sed 's,^[.]/,,' | sort | xargs)
override_dh_auto_test:
	# Make sure to detect when tests appear or disappear:
	@if [ "$(FOUND)" != "$(EXPECTED)" ]; then \
		echo "E: sanity check failed, available tests don't match known tests:"; \
		echo "    - found:    $(FOUND)"; \
		echo "    - expected: $(EXPECTED)"; \
		echo "=> Please update ORDERED_TESTS in debian/rules accordingly"; \
		exit 1; \
	fi
	# Run tests:
	(cd test && clojure -cp $(CURDIR)/$(PRODUCED_JAR):$(CLASSPATH):$(TEST_CLASSPATH) $(ORDERED_TESTS))

gen-orig-xz:
	git tag -v $(GIT_TAG) || true
	if [ ! -f ../$(DEBPKGNAME)_$(VERSION).orig.tar.xz ] ; then \
		git archive --prefix=$(DEB_PKGNAME)-$(DEB_UPSTREAM_VERSION)/ $(GIT_TAG) | xz >../$(DEB_PKGNAME)_$(DEB_UPSTREAM_VERSION).orig.tar.xz ; \
		mkdir -p ../build-area ; \
		cp ../$(DEB_PKGNAME)_$(DEB_UPSTREAM_VERSION).orig.tar.xz ../build-area ; \
	fi

fetch-upstream-remote:
ifeq (,$(findstring https:,$(UPSTREAM_GIT)))
	$(error Using insecure proto in UPSTREAM_GIT: $(UPSTREAM_GIT))
endif
	git remote add upstream $(UPSTREAM_GIT) || true
	git remote set-url upstream $(UPSTREAM_GIT)
	git fetch upstream
