HG = hg
PYTHON = python

DESTDIR =
PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man/man1

CHGSOCKDIR = /tmp/chg$(shell id -u)
CHGSOCKNAME = $(CHGSOCKDIR)/server
HGSERVELOG = $(CHGSOCKDIR)/log
HGSERVEFLAGS = --cwd / --config cmdserver.log=$(HGSERVELOG)

DEBCHANGE = debchange
DEBUILD = debuild

.PHONY: all
all:
	$(MAKE) -C src all
	$(PYTHON) setup.py build

.PHONY: local
local:
	$(MAKE) -C src all
	$(PYTHON) setup.py \
		build_py -c -d. \
		build_ext -i

.PHONY: help
help:
	@echo 'Make targets:'
	@echo '  all          - build program'
	@echo '  local        - build for inplace usage'
	@echo '  install      - install program to $(PREFIX)'
	@echo '  tests        - run Mercurial test suite with cHg (needs HGROOT)'
	@echo '  run-server   - run command server in foreground (for debug)'
	@echo '  deb          - build debian package'
	@echo '  clean        - remove intermediate files'

.PHONY: install
install: all
	install -d $(DESTDIR)$(PREFIX)/bin
	install -m 755 src/chg $(DESTDIR)$(PREFIX)/bin
	install -d $(DESTDIR)$(MANDIR)
	install -m 644 chg.1 $(DESTDIR)$(MANDIR)
	$(PYTHON) setup.py install --root "$(DESTDIR)/" --prefix "$(PREFIX)"

.PHONY: tests
tests:
	cd $(HGROOT)/tests && $(PYTHON) $(PWD)/tests/run-hgtests.py \
		--blacklist $(PWD)/tests/hgtests.blacklist $(TESTFLAGS)

.PHONY: run-server
run-server: export PYTHONPATH = $(PWD)/hgext
run-server:
	[ -d $(CHGSOCKDIR) ] || ( umask 077; mkdir $(CHGSOCKDIR) )
	[ ! -e $(CHGSOCKNAME) ] || ./src/chg --kill-chg-daemon
	$(HG) serve --cmdserver chgunix -a $(CHGSOCKNAME) \
		--config extensions.chgdebug= \
		--config extensions.chgserver= \
		--config progress.assume-tty=1 \
		$(HGSERVEFLAGS) < /dev/null >> $(HGSERVELOG) 2>&1 \
		| tail -n0 -q -f $(HGSERVELOG)

.PHONY: deb
deb: debian/changelog
	$(DEBUILD)

debian/changelog: .hg/dirstate .hg/store/00changelog.i
	$(HG) revert -q $@
	$(DEBCHANGE) -v "`$(HG) log -r. -T'0.2~hg{rev}.{node|short}'`" \
		'Nightly build.'

.PHONY: clean
clean:
	$(RM) hgext/*.pyc
	-find . -name '*.orig' -print0 | xargs -0 $(RM)
	$(MAKE) -C src clean
	$(PYTHON) setup.py clean

.PHONY: distclean
distclean:
	$(RM) hgext/*.pyc hgext/_chgutil.so
	-find . -name '*.orig' -print0 | xargs -0 $(RM)
	$(MAKE) -C src distclean
	$(PYTHON) setup.py clean -a
