HG = hg
PYTHON = python

DESTDIR =
PREFIX = /usr/local
HGEXTDIR = $(PREFIX)/$(shell $(PYTHON) -c 'import distutils.sysconfig; \
	import os.path; print(os.path.relpath( \
	distutils.sysconfig.get_python_lib(), "/usr"))')/hgext
MANDIR = $(PREFIX)/share/man/man1
HGSERVEFLAGS = --cwd / --debug
CHGSOCKDIR = /tmp/chg$(shell id -u)
CHGSOCKNAME = $(CHGSOCKDIR)/server

DEBCHANGE = debchange
DEBUILD = debuild

.PHONY: all
all:
	$(MAKE) -C src all

.PHONY: help
help:
	@echo 'Make targets:'
	@echo '  all          - build program'
	@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)$(HGEXTDIR)
	install -m 644 hgext/chgsupport.py $(DESTDIR)$(HGEXTDIR)
	install -d $(DESTDIR)$(MANDIR)
	install -m 644 chg.1 $(DESTDIR)$(MANDIR)
	@echo '*** YOU MAY NEED TO SET PYTHONPATH ***'
	@echo '*** PYTHONPATH=$(HGEXTDIR) ***'

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

.PHONY: run-server
run-server:
	[ -d $(CHGSOCKDIR) ] || ( umask 077; mkdir $(CHGSOCKDIR) )
	[ ! -e $(CHGSOCKNAME) ] || ./src/chg --kill-chg-daemon
	$(HG) serve --cmdserver unix -a $(CHGSOCKNAME) \
		--config extensions.chgsupport="$(PWD)/hgext/chgsupport.py" \
		--config color.mode=chgauto --config progress.assume-tty=1 \
		$(HGSERVEFLAGS)

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

debian/changelog: .hg/dirstate .hg/store/00changelog.i
	$(RM) $@
	$(DEBCHANGE) --create --package mercurial-chg \
		-v "0.0.`date +%Y%m%d`hg`$(HG) id -i`" \
		'Nightly build.'
	$(DEBCHANGE) --release ''

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