#!/usr/bin/make
#
# Makefile for SchoolTool
#
# $Id: Makefile 5764 2006-02-18 14:49:26Z jinty $

PYTHON=python
TESTFLAGS=-w
POT=src/schooltool/locales/schooltool.pot
SBPOT=src/schoolbell/app/locales/schoolbell.pot
PO=$(wildcard src/schooltool/locales/*/LC_MESSAGES/*.po)
SBPO=$(wildcard src/schoolbell/app/locales/*/LC_MESSAGES/*.po)
PYTHONPATH=src:Zope3/src

.PHONY: all
all: build

Zope3:
	svn co svn://svn.zope.org/repos/main/Zope3/branches/3.2 Zope3

.PHONY: build
build: Zope3
	[ ! -d Zope3 ] || cd Zope3 && $(PYTHON) setup.py build_ext -i
	$(PYTHON) setup.py build
	$(PYTHON) remove-stale-bytecode.py

.PHONY: clean
clean:
	find . \( -path './src/*.mo' -o -name '*.o' \
	         -o -name '*.py[co]' \) -exec rm -f {} \;
	rm -rf build
	rm -rf rosetta-schoolbell-ui
	rm -f rosetta-schoolbell-ui.tar.gz

.PHONY: realclean
realclean: clean
	find . \( -name '*.so' -o -name '*.pyd' \) -exec rm -f {} \;
	rm -f Data.fs* *.csv tags ID *.log
	rm -f scripts/import-sampleschool
	rm -f MANIFEST
	rm -rf dist

.PHONY: test
test: build
	$(PYTHON) test.py $(TESTFLAGS) -s src/schooltool

.PHONY: testall
testall: build
	$(PYTHON) test.py $(TESTFLAGS)

.PHONY: ftest
ftest: build
	$(PYTHON) test.py $(TESTFLAGS) -s src/schooltool -f

.PHONY: run
run: build
	$(PYTHON) schooltool-server.py

.PHONY: coverage
coverage: build
	rm -rf coverage
	$(PYTHON) test.py $(TESTFLAGS) --coverage -s src/schooltool

.PHONY: coverage-report
coverage-report:
	@cd coverage && ls schooltool* | grep -v tests | xargs grep -c '^>>>>>>' | grep -v ':0$$'

.PHONY: coverage-report-list
coverage-report-list:
	@cd coverage && ls schooltool* | grep -v tests | xargs grep -l '^>>>>>>'

.PHONY: edit-coverage-reports
edit-coverage-reports:
	@cd coverage && $(EDITOR) `ls schooltool* | grep -v tests | xargs grep -l '^>>>>>>'`

.PHONY: vi-coverage-reports
vi-coverage-reports:
	@cd coverage && vi '+/^>>>>>>/' `ls schooltool* | grep -v tests | xargs grep -l '^>>>>>>'`

Zope3/principals.zcml:
	cp Zope3/sample_principals.zcml $@

Zope3/package-includes/schoolbell-configure.zcml:
	echo '<include package="schoolbell.app" />' > $@

Zope3/package-includes/schooltool-configure.zcml:
	echo '<include package="schooltool" />' > $@

.PHONY: dist
dist: realclean build update-translations clean
	rm -rf dist
	find . -name '*.py[dco]' -exec rm -f {} \;
	$(PYTHON) setup.py sdist --formats=schooltooltgz

.PHONY: signtar
signtar: dist
	md5sum dist/school*.tar.gz > dist/md5sum
	gpg --clearsign dist/md5sum
	mv dist/md5sum.asc dist/md5sum

.PHONY: extract-translations
extract-translations: build
	# here for backwards compatibility only,
	# setup.py does the work!

.PHONY: update-translations
update-translations:
	set -e; for f in $(PO); do			\
	     msgmerge -U $$f $(POT);		\
	     msgfmt -o $${f%.po}.mo $$f;	\
	done
	set -e; for f in $(SBPO); do			\
	     msgmerge -U $$f $(SBPOT);		\
	     msgfmt -o $${f%.po}.mo $$f;	\
	done

rosetta-schooltool.tar.gz:
	wget $(TRANSLATION) && touch `basename $(TRANSLATION)`

rosetta-schooltool: rosetta-schooltool.tar.gz
	tar -xmzf rosetta-schooltool.tar.gz

src/schooltool/locales/%/LC_MESSAGES/schooltool.po: rosetta-schooltool
	mkdir -p `dirname $@`
	cp rosetta-schooltool/$*.po $@

.PHONY: get-rosetta-translations
get-rosetta-translations: rosetta-schooltool $(foreach locale,$(basename $(notdir $(wildcard rosetta-schooltool/*.po))),src/schooltool/locales/$(locale)/LC_MESSAGES/schooltool.po)
