#!/usr/bin/make -f

SHELL := /bin/bash
TEST_DIR := $(shell mktemp -d)

include /usr/share/dpkg/pkg-info.mk

export DH_CLOJURE_LEIN_CREATE_MAVEN_REPO := $(CURDIR)/create-test-maven-repo

pages := dh-clojure-lein.7 dh-clojure.7

pf := set -o pipefail

define deb_sub
  perl -p \
    -e "s|\@DEB_VERSION\@|$(DEB_VERSION)|go;"
endef

define create_page
  pod2man \
    -n $(basename $@) \
    -c 'Debhelper Clojure tools' \
    -r '$(DEB_VERSION)' \
    -s $(patsubst .%,%,$(suffix $@)) \
    $< $@
endef

deb_lein := LEIN_OFFLINE=true
deb_lein += LEIN_HOME=$(CURDIR)/debian/lein-home
deb_lein += DEB_VERSION=$(DEB_VERSION)
deb_lein += /usr/bin/lein update-in : assoc :local-repo '"/usr/share/maven-repo"' --

dh_clj_lein_ver != $(pf); cd dh-clojure-lein \
  && $(deb_lein) update-in :version println -- version | head -1

ifneq "0" "$(.SHELLSTATUS)"
  $(error "Unable to determine dh-clojure-lein version (.SHELLSTATUS $(.SHELLSTATUS))")
endif

%:
	dh $@

%.7: %.7.pod; $(create_page)

override_dh_auto_build: $(pages)
	cd dh-clojure-lein && $(deb_lein) pom ../debian/dh-clojure-lein-pom.xml
	cd dh-clojure-lein && $(deb_lein) jar

execute_after_dh_auto_install:
	echo debian/dh-clojure-lein-pom.xml \
	  --artifact=dh-clojure-lein/target/dh-clojure-lein-$(dh_clj_lein_ver).jar \
	  --usj-name=dh-clojure-lein \
	  --java-lib > debian/dh-clojure.poms
	mh_install
	mh_resolve_dependencies --non-interactive --offline --build -pdh-clojure --non-explore

ex_env = DH_CLOJURE_LEIN_OVERRIDE_JAR=$(CURDIR)/dh-clojure-lein/target/dh-clojure-lein-$(DEB_VERSION_UPSTREAM).jar
ex_env += PERLLIB=$(CURDIR)/lib
ex_env += DEB_VERSION=$(DEB_VERSION)

override_dh_auto_test:
  ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	cd dh-clojure-lein && $(deb_lein) test
	cd example-clojure && $(ex_env) debian/rules clean
	cd example-clojure && $(ex_env) debian/rules binary
	# check if package was built
	test -f libexample-clojure_0.1.0_all.deb
	dpkg-deb -c libexample-clojure_0.1.0_all.deb
	# check Depends:
	dpkg-deb --field libexample-clojure_0.1.0_all.deb Depends | \
		grep -Fq libclojure-java
	dpkg-deb --field libexample-clojure_0.1.0_all.deb Depends | \
		grep -Fq libtruss-clojure
	# extract package contents to examine maven-repo poms
	dpkg-deb --extract libexample-clojure_0.1.0_all.deb $(TEST_DIR)
	# check for the existence of jar and pom artifacts
	test -L $(TEST_DIR)/usr/share/java/example.jar
	test -s $(TEST_DIR)/usr/share/java/example-0.1.0.jar
	test -L $(TEST_DIR)/usr/share/java/example-test.jar
	test -s $(TEST_DIR)/usr/share/java/example-test-0.1.0.jar
	test -L $(TEST_DIR)/usr/share/maven-repo/com/example/example/0.1.0/example-0.1.0.jar
	test -s $(TEST_DIR)/usr/share/maven-repo/com/example/example/0.1.0/example-0.1.0.pom
	test -L $(TEST_DIR)/usr/share/maven-repo/com/example/example/0.1.0/example-0.1.0-test.jar
	test -L $(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.jar
	test -s $(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom
	test -L $(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian-test.jar
	# ensure pom was cleaned
	! grep -Fq '<repositories>' $(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom
	# verify debian.* properties
	xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t \
		-m "/x:project/x:properties/x:debian.hasPackageVersion" -v . -n \
		$(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom > /dev/null
	xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t \
		-v "/x:project/x:properties/x:debian.packageName" \
		$(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom > /dev/null
	xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t \
		-v "/x:project/x:properties/x:debian.originalVersion" \
		$(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom > /dev/null
	# ensure dependency artifact versions are correct
	xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t \
		-m "/x:project/x:dependencies/x:dependency[x:artifactId='clojure' and x:version='1.x']" -v "true()" -n \
		$(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom > /dev/null
	xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t \
		-m "/x:project/x:dependencies/x:dependency[x:artifactId='truss' and x:version='debian']" -v "true()" -n \
		$(TEST_DIR)/usr/share/maven-repo/com/example/example/debian/example-debian.pom > /dev/null
  endif

override_dh_clean:
	cd example-clojure && $(ex_env) debian/rules clean
	cd dh-clojure-lein && $(deb_lein) clean
        # dh-clojure-lein/pom.xml via create-test-maven-repo lein install
	dh_clean \
	  $(pages) \
	  .debianVersion \
	  debian/dh-clojure-lein-pom.xml \
	  debian/dh-clojure-lein-pom.xml.save \
	  debian/dh-clojure.poms \
	  debian/lein-home/ \
	  dh-clojure-lein/.lein-failures \
	  dh-clojure-lein/pom.xml \
	  libexample-*.deb
