TEMPDIR := $(shell mktemp -t tmp.XXXXXX -d)
FLAKE8 := $(shell which flake8)
UNAME := $(shell uname)
DOCKERTAG = andrewferrier/email2pdf

determineversion:
	$(eval GITDESCRIBE := $(shell git describe --dirty))
	sed 's/Version: .*/Version: $(GITDESCRIBE)/' debian/DEBIAN/control_template > debian/DEBIAN/control

ifeq ($(UNAME),Linux)
builddeb: determineversion builddeb_real
else
builddeb: rundocker_getdebs
endif

builddeb_real:
	sudo apt-get install build-essential
	cp -R debian/DEBIAN/ $(TEMPDIR)
	mkdir -p $(TEMPDIR)/usr/bin
	mkdir -p $(TEMPDIR)/usr/share/doc/email2pdf
	cp email2pdf $(TEMPDIR)/usr/bin
	cp README* $(TEMPDIR)/usr/share/doc/email2pdf
	cp LICENSE* $(TEMPDIR)/usr/share/doc/email2pdf
	cp getmailrc.sample $(TEMPDIR)/usr/share/doc/email2pdf
	fakeroot chmod -R u=rwX,go=rX $(TEMPDIR)
	fakeroot chmod -R u+x $(TEMPDIR)/usr/bin
	fakeroot dpkg-deb --build $(TEMPDIR) .

builddocker: determineversion
	docker build -t $(DOCKERTAG) .
	docker tag $(DOCKERTAG):latest $(DOCKERTAG):$(GITDESCRIBE)

builddocker_nocache: determineversion
	docker build --no-cache -t $(DOCKERTAG) .
	docker tag $(DOCKERTAG):latest $(DOCKERTAG):$(GITDESCRIBE)

rundocker_interactive: builddocker
	docker run --rm -i -t $(DOCKERTAG) bash -l

rundocker_testing: builddocker
	docker run --rm -t $(DOCKERTAG) bash -c 'cd /tmp/email2pdf && make unittest && make stylecheck'

rundocker_getdebs: builddocker
	docker run --rm -v ${PWD}:/debs $(DOCKERTAG) sh -c 'cp /tmp/*.deb /debs'

unittest:
	python3 -m unittest discover

unittest_verbose:
	python3 -m unittest discover -f -v

analysis:
	# Debian version is badly packaged, make sure we are using Python 3.
	-/usr/bin/env python3 $(FLAKE8) --max-line-length=132 email2pdf tests/
	pylint -r n --disable=line-too-long --disable=missing-docstring --disable=locally-disabled email2pdf tests/

coverage:
	rm -rf cover/
	nosetests tests/Direct/*.py --with-coverage --cover-package=email2pdf,tests --cover-erase --cover-html --cover-branches
	open cover/index.html

.email2pdf.profile: email2pdf
	python3 -m cProfile -o .email2pdf.profile `which nosetests` .

profile: .email2pdf.profile
	python3 performance/printstats.py | less

alltests: unittest analysis coverage