#!/usr/bin/make
#
# Makefile for SchoolTool
#
# $Id$
PYTHON=python
ZPKG=../../zpkgtools/bin/zpkg
TRANSLATION_DOMAINS=schoolbell schooltool
ZOPE_REPOSITORY=svn://svn.zope.org/repos/main/
TESTFLAGS=-v
LOCALES=src/schooltool/locales/
PYTHONPATH:=$(PYTHONPATH):src:eggs:Zope3/src
SETUPFLAGS=
# Which part of the Zope3 repository do we track
#Z3_VERSION=trunk
Z3_VERSION=branches/3.3
#Z3_VERSION=tags/3.2.0
.PHONY: all
all: build
.PHONY: zope3-checkout
zope3-checkout:
-test -d Zope3 || svn co $(ZOPE_REPOSITORY)/Zope3/${Z3_VERSION} Zope3
.PHONY: zope3-update
zope3-update:
svn up Zope3
.PHONY: zpkgsetup-checkout
zpkgsetup-checkout:
-test -d buildsupport/zpkgsetup || svn co $(ZOPE_REPOSITORY)/zpkgtools/trunk/zpkgsetup buildsupport/zpkgsetup
.PHONY: zpkgsetup-update
zpkgsetup-update:
svn up buildsupport/zpkgsetup
.PHONY: checkout
checkout: zope3-checkout zpkgsetup-checkout
.PHONY: update
update: checkout zope3-update zpkgsetup-update
.PHONY: build
build: zope3-checkout zpkgsetup-checkout
test -d Zope3 && cd Zope3 && $(PYTHON) setup.py build_ext -i
$(PYTHON) setup.py $(SETUPFLAGS) \
build_ext -i install_data --install-dir .
test -d eggs || mkdir eggs
PYTHONPATH=$(PYTHONPATH) $(PYTHON) setup.eggs.py develop -S eggs --install-dir eggs
$(PYTHON) bin/remove-stale-bytecode.py
.PHONY: clean
clean:
find . \( -path './src/*.mo' -o -name '*.o' \
-o -name '*.py[co]' \) -exec rm -f {} \;
rm -rf build
.PHONY: cleandb
cleandb:
rm -f schooltool-skel/var/Data.fs*
.PHONY: jacqmain_cleandb
jacqmain_cleandb:
rm -f schooltool-skel/var/JacqmainData.fs*
.PHONY: realclean
realclean: clean cleandb
find . \( -name '*.so' -o -name '*.pyd' \) -exec rm -f {} \;
rm -f *.csv tags ID *.log
rm -f scripts/import-sampleschool
rm -f MANIFEST
rm -rf dist
rm -rf eggs
.PHONY: test
test: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) test.py $(TESTFLAGS) -u schooltool
.PHONY: testall
testall: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) test.py $(TESTFLAGS)
.PHONY: ftest
ftest: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) test.py $(TESTFLAGS) -f --at-level 2 schooltool
.PHONY: run
run: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) schooltool-server.py
.PHONY: jacqmain_run
jacqmain_run: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) schooltool-server.py -c src/jacqmain/schooltool.conf
.PHONY: coverage
coverage: build
rm -rf coverage
PYTHONPATH=$(PYTHONPATH) $(PYTHON) test.py $(TESTFLAGS) --coverage=coverage schooltool
.PHONY: coverage-reports-html
coverage-reports-html:
rm -rf coverage/reports
mkdir coverage/reports
$(PYTHON) bin/coverage_reports.py coverage coverage/reports
ln -s schooltool.html coverage/reports/index.html
.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 '' > $@
Zope3/package-includes/schooltool-configure.zcml:
echo '' > $@
.PHONY: dist
dist: realclean update-translations
$(ZPKG) -x reportlab -C releases/SchoolTool.cfg
.PHONY: signtar
signtar: dist
md5sum dist/SchoolTool*.tgz > dist/md5sum
gpg --clearsign dist/md5sum
mv dist/md5sum.asc dist/md5sum
.PHONY: extract-translations
extract-translations: build
PYTHONPATH=$(PYTHONPATH) $(PYTHON) i18nextract.py --domain=schooltool --zcml=`pwd`/schooltool-skel/etc/site.zcml
PYTHONPATH=$(PYTHONPATH) $(PYTHON) i18nextract.py --domain=schoolbell --zcml=`pwd`/schoolbell-site.zcml
PYTHONPATH=$(PYTHONPATH) $(PYTHON) i18nextract.py --domain=schooltool.commendation --zcml=`pwd`/src/schooltool/commendation/ftesting.zcml
.PHONY: update-translations
update-translations:
set -e; \
for domain in $(TRANSLATION_DOMAINS); do \
for f in $(LOCALES)/*/LC_MESSAGES/$${domain}.po; do \
msgmerge -qU $$f $(LOCALES)/$${domain}.pot ;\
msgfmt -o $${f%.po}.mo $$f;\
done;\
done
#
# Makefile rules for importing and exporting translations to rosetta:
#
# To create a translation templates (schooltool.pot, schoolbell.pot) for
# uploading to rosetta:
#
# 1. run 'make extract-translations'
# 2. upload the src/schooltool/locales/{schoolbell,schooltool}.pot files
# to rosetta.
#
# To create tarballs suitable for uploading to rosetta:
#
# The following command will create tarballs in the current directory of
# the form {schooltool,schoolbell}-translations.tar.gz. These should be
# suitable for uploading to rosetta.
#
# $ make translation-tarballs
#
# WARNING: Only do this if you are _sure_ you want to. you risk
# overwiting translations that have been changed in rosetta. Normally it
# is only necessary to upload *.pot files.
#
# To import translations from rosetta:
#
# 1. get a clean checkout of schooltool
# 2. download the tarballs of exportd PO files from rosetta and rename
# them to rosetta-schooltool.tar.gz and rosetta-schoolbell.tar.gz
# 3. run 'make update-rosetta-translations'
# 4. use svn to add and commit any new/changed translations
#
.PHONY:create-translation-tarball
create-translation-tarball:
#extract-translations update-translations
[ ! -e translations.tmp ] || \
{ echo ERROR: cowardly refusing to continue because translations.tmp exists; exit 1; }
mkdir translations.tmp
cp $(LOCALES)/$(DOMAIN).pot translations.tmp/template.pot
dir=`pwd` && cd $(LOCALES) && \
find * -maxdepth 0 -type d \
-exec cp {}/LC_MESSAGES/$(DOMAIN).po $${dir}/translations.tmp/{}.po \;
cd translations.tmp && tar -czf ../$(DOMAIN)-translations.tar.gz *
rm -rf translations.tmp
.PHONY: translation-tarballs
translation-tarballs: extract-translations update-translations
$(MAKE) DOMAIN=schooltool create-translation-tarball
$(MAKE) DOMAIN=schoolbell create-translation-tarball
.PHONY: extract-rosetta-tarball
extract-rosetta-tarball:
[ -e rosetta-$(DOMAIN).tar.gz ]
[ ! -e translations.tmp ] || \
{ echo ERROR: cowardly refusing to continue because translations.tmp exists; exit 1; }
mkdir translations.tmp
cd translations.tmp && tar -xzf ../rosetta-$(DOMAIN).tar.gz && mv */* .
set -e; for file in translations.tmp/*.po; do \
dir=$(LOCALES)/`basename $${file} .po`/LC_MESSAGES; \
[ -x $${dir} ] || mkdir -p $${dir}; \
cp $${file} $${dir}/$(DOMAIN).po; \
echo Updating $${dir}/$(DOMAIN).po; \
done
rm -rf translations.tmp
.PHONY: update-rosetta-translations
update-rosetta-translations:
[ ! -e rosetta-schooltool.tar.gz ] || $(MAKE) DOMAIN=schooltool extract-rosetta-tarball
[ ! -e rosetta-schoolbell.tar.gz ] || $(MAKE) DOMAIN=schoolbell extract-rosetta-tarball
$(MAKE) PYTHON=$(PYTHON) extract-translations update-translations
# remove .po~ and .mo files so they are not accidentally committed
find $(LOCALES) \( -name '*.po~' -o -name '*.mo' \) -exec rm -f {} \;