1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
|
# Task Coach - Your friendly task manager
# Copyright (C) 2004-2014 Task Coach developers <developers@taskcoach.org>
#
# Task Coach is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Task Coach is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Makefile to create binary and source distributions and generate the
# simple website (intermediate files are in ./build, distributions are
# put in ./dist, the files for the website end up in ./website.out)
DOT="dot" # dot should be on the path
# Python should be on the path. On 64 bits Mac OS X, use the 32-bits version
# (wx only works in 32 bits mode and the environment/default write trick to
# make it the default does not seem to work on Lion).
ifeq "$(shell uname -sm)" "Darwin x86_64"
PYTHON?="python-32"
else
PYTHON?="python"
endif
ifeq (CYGWIN_NT,$(findstring CYGWIN_NT,$(shell uname)))
INNOSETUP="/cygdrive/c/Program Files/Inno Setup 5/ISCC.exe"
PORTABLEAPPSINSTALLER="/cygdrive/c/Program Files/PortableApps.comInstaller/PortableApps.comInstaller.exe"
EPYDOC=$(PYTHON) $(shell python -c "import os, sys; print \"'\" + os.path.join(os.path.split(sys.executable)[0], 'Scripts', 'epydoc.py') + \"'\"")
else
EPYDOC="epydoc"
endif
TCVERSION=$(shell python -c "import taskcoachlib.meta.data as data; print data.version")
TCPORTABLE=$(shell python -c "import os; print \"'\" + os.path.join(os.getcwd(), 'build', 'TaskCoachPortable') + \"'\"")
ifeq ($(PGPID)x,x)
PGPID=a3e41706
endif
revision:
echo "revision='$(TCREV)'" > taskcoachlib/meta/revision.py
prepare: thirdpartymodules icons i18n templates
windists: windist winpenpack portableapps sdist_windows
windist: py2exe
$(INNOSETUP) build/taskcoach.iss
py2exe: prepare
$(PYTHON) make.py py2exe
sdist_windows: prepare changes templates dist/TaskCoach-$(TCVERSION).zip
dist/TaskCoach-$(TCVERSION).zip:
$(PYTHON) make.py sdist --formats=zip --no-prune --template=build.in/windows/MANIFEST.in
sdist_linux: prepare changes templates dist/TaskCoach-$(TCVERSION).tar.gz
sdist_ubuntu: sdist_linux
# Launchpad does not support one size fits all packages...
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu10~lucid.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu12~precise.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu12~quantal.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu13~saucy.tar.gz
sdist_raw:
mkdir -p dist
cp -a . ../tmp-sdist
cd ../tmp-sdist; make nuke; find . -name ".svn" | xargs -d '\n' rm -rf
mv ../tmp-sdist dist/TaskCoach-$(TCVERSION)
cd dist; tar czf TaskCoach-$(TCVERSION)-raw.tgz TaskCoach-$(TCVERSION); rm -rf TaskCoach-$(TCVERSION)
dist/TaskCoach-$(TCVERSION).tar.gz:
$(PYTHON) make.py sdist --formats=gztar --no-prune --template=build.in/debian/MANIFEST.in
echo Created dist/TaskCoach-$(TCVERSION).tar.gz
rpm: prepare changes templates
cp build.in/debian/MANIFEST.in .
$(PYTHON) make.py bdist_rpm --requires "python2.5,python-wxgtk2.8" --group "Applications/Productivity"
rm MANIFEST.in
fedora: prepare changes templates
cp build.in/debian/MANIFEST.in .
$(PYTHON) make.py bdist_rpm_fedora
rm MANIFEST.in
opensuse: sdist_linux
cp build.in/debian/MANIFEST.in .
$(PYTHON) make.py bdist_rpm_opensuse
mv dist/taskcoach-$(TCVERSION)-1.noarch.rpm dist/taskcoach-$(TCVERSION)-1.opensuse.i386.rpm
mv dist/taskcoach-$(TCVERSION)-1.src.rpm dist/taskcoach-$(TCVERSION)-1.opensuse.src.rpm
deb: sdist_linux
mv dist/TaskCoach-$(TCVERSION).tar.gz dist/TaskCoach_$(TCVERSION).tar.gz
LC_ALL=C $(PYTHON) make.py bdist_deb --sdist=dist/TaskCoach_$(TCVERSION).tar.gz
mv dist/taskcoach_$(TCVERSION)-1_all.deb dist/taskcoach_$(TCVERSION)-1.deb
ubuntu: sdist_ubuntu
LC_ALL=C $(PYTHON) make.py bdist_ubuntu lucid 10 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu10~lucid.tar.gz
mv build build-lucid
LC_ALL=C $(PYTHON) make.py bdist_ubuntu precise 12 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu12~precise.tar.gz
mv build build-precise
LC_ALL=C $(PYTHON) make.py bdist_ubuntu quantal 12 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu12~quantal.tar.gz
mv build build-quantal
LC_ALL=C $(PYTHON) make.py bdist_ubuntu saucy 13 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu13~saucy.tar.gz
mv build build-saucy
ppa_sign: ubuntu
cd build-lucid; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu10~lucid-1_source.changes
cd build-precise; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
cd build-quantal; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu12~quantal-1_source.changes
cd build-saucy; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
# Split PPA by version because the upload has a tendency to fail so the buildbot must retry
ppa_rel_lucid:
cd build-lucid; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu10~lucid-1_source.changes
ppa_rel_precise:
cd build-precise; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_rel_quantal:
cd build-quantal; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu12~quantal-1_source.changes
ppa_rel_saucy:
cd build-saucy; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
ppa_relnext_lucid:
cd build-lucid; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu10~lucid-1_source.changes
ppa_relnext_precise:
cd build-precise; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_relnext_quantal:
cd build-quantal; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu12~quantal-1_source.changes
ppa_relnext_saucy:
cd build-saucy; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
ppa_release_lucid:
cd build-lucid; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu10~lucid-1_source.changes
ppa_release_precise:
cd build-precise; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_release_quantal:
cd build-quantal; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu12~quantal-1_source.changes
ppa_release_saucy:
cd build-saucy; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
app: prepare
$(PYTHON) make.py py2app
chmod 644 "build/Task Coach/TaskCoach.app/Contents/Resources/taskcoach.py"
dmg-goodies: app
mkdir "build/Task Coach/.Resources"
cp -f dist.in/macos/dmg-background.png "build/Task Coach/.Resources/"
cp -f dist.in/macos/config "build/Task Coach/.DS_Store"
ln -s /Applications "build/Task Coach/Applications"
dmgbase:
hdiutil create -ov -imagekey zlib-level=9 -fs "HFS+" -srcfolder "build/Task Coach" dist/TaskCoach-$(TCVERSION).dmg
dmg: dmg-goodies dmgbase
dmg-signed: dmg-goodies
codesign -f -s "Developer ID Application" -r='designated => certificate leaf[field.1.2.840.113635.100.6.1.13] and identifier "org.pythonmac.unspecified.TaskCoach"' "build/Task Coach/TaskCoach.app"
make dmgbase
winpenpack: py2exe
$(PYTHON) make.py bdist_winpenpack
portableapps: py2exe
$(PYTHON) make.py bdist_portableapps
$(PORTABLEAPPSINSTALLER) $(TCPORTABLE)
mv build/TaskCoachPortable_$(TCVERSION).paf.exe dist
icons: taskcoachlib/gui/icons.py
templates: taskcoachlib/persistence/xml/templates.py
thirdpartymodules:
cd thirdparty; tar xzf chardet-2.1.1.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty chardet-2.1.1/chardet
cd thirdparty; tar xzf python-dateutil-1.5.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty python-dateutil-1.5/dateutil
cd thirdparty; tar xzf desktop-0.4.2.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty desktop-0.4.2/desktop
cd thirdparty; tar xzf keyring-3.6.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty keyring-3.6/keyring
cd thirdparty; tar xzf lockfile-0.8.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty lockfile-0.8/lockfile.py
cd thirdparty; tar xzf PyPubSub-3.3.0.tar.gz --strip-components=2 -C ../taskcoachlib/thirdparty PyPubSub-3.3.0/src/pubsub
cd thirdparty; tar xzf SquareMap-1.0.3.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty SquareMap-1.0.3/squaremap
cd thirdparty; tar xzf python-ntlm-40080cff37ab32570f9bb50bad0a46b957409c18.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty python-ntlm/ntlm
cd thirdparty; tar xzf wxScheduler-r151.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty wxScheduler/wxScheduler
cd thirdparty; tar xzf aui-r72315.tar.gz -C ../taskcoachlib/thirdparty
cd thirdparty; tar xzf WMI-1.4.9.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty WMI-1.4.9/wmi.py
cd thirdparty; tar xzf pyparsing-1.5.5.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pyparsing-1.5.5/pyparsing_py2.py
mv taskcoachlib/thirdparty/pyparsing_py2.py taskcoachlib/thirdparty/pyparsing.py
cd thirdparty; tar xzf pybonjour-1.1.1.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pybonjour-1.1.1/pybonjour.py
cd thirdparty; tar xzf agw-r70845.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty agw/customtreectrl.py
cd thirdparty; tar xzf agw-r70819.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty agw/hypertreelist.py
cd thirdparty; tar xzf gntp-d639fa2e981fe41196a5115ad64320b5061f004b.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty gntp/gntp
cd thirdparty; tar xzf pyxdg-0.25.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pyxdg-0.25/xdg
cd taskcoachlib/thirdparty; patch -p1 < ../../thirdparty/patches/lockfile.diff
cd taskcoachlib/thirdparty; patch -p1 < ../../thirdparty/patches/customtreectrl.diff
cd taskcoachlib/thirdparty; patch -p1 < ../../thirdparty/patches/hypertreelist-headers.diff
cd taskcoachlib/thirdparty; patch -p1 < ../../thirdparty/patches/hypertreelist.diff
cd taskcoachlib/thirdparty; patch -p2 < ../../thirdparty/patches/pypubsub.diff
$(PYTHON) fixinit.py
taskcoachlib/gui/icons.py: icons.in/iconmap.py icons.in/nuvola.zip icons.in/splash.png
cd icons.in; $(PYTHON) make.py
taskcoachlib/persistence/xml/templates.py:
cd templates.in; $(PYTHON) make.py
website: changes
cd website.in; $(PYTHON) make.py; cd ..
$(PYTHON) tools/webchecker.py website.out/index.html
epydoc:
$(EPYDOC) --parse-only -v --simple-term -o epydoc.out taskcoachlib taskcoach.py
dot:
$(PYTHON) tools/dot.py taskcoachlib/gui/viewer > doc/viewer.dot
$(PYTHON) tools/dot.py taskcoachlib/gui/dialog > doc/dialog.dot
$(DOT) -Tpng -Kdot -O doc/*.dot
i18n: templates taskcoachlib/i18n/nl.py
taskcoachlib/i18n/nl.py: i18n.in/messages.pot $(shell find i18n.in -name '*.po')
cd i18n.in; $(PYTHON) make.py
i18n.in/messages.pot: $(shell find taskcoachlib -name '*.py' | grep -v i18n)
$(PYTHON) tools/pygettext.py --output-dir i18n.in taskcoachlib
changes:
$(PYTHON) changes.in/make.py text > CHANGES.txt
$(PYTHON) changes.in/make.py debian > changelog_content
$(PYTHON) changes.in/make.py html 7 > website.in/changes.html
$(PYTHON) changes.in/make.py html > website.in/all_changes.html
unittests: thirdpartymodules icons templates
cd tests; $(PYTHON) test.py --unittests
integrationtests: thirdpartymodules icons templates
cd tests; $(PYTHON) test.py --integrationtests
languagetests: thirdpartymodules icons i18n
cd tests; $(PYTHON) test.py --languagetests
releasetests: thirdpartymodules icons i18n sdist_linux
cd tests; $(PYTHON) test.py --releasetests
# FIXME: disttests should depend on either windist, deb, rpm or dmg...
disttests:
cd tests; $(PYTHON) test.py --disttests
alltests: prepare sdist_linux
cd tests; $(PYTHON) test.py --alltests
coverage: coverage_run coverage_report
coverage_run:
cd tests; coverage run --source=../taskcoachlib,unittests test.py
coverage_report:
cd tests; coverage html -d coverage.out --omit=../taskcoachlib/i18n/po2dict.py,../taskcoachlib/i18n/??.py,../taskcoachlib/i18n/???.py,../taskcoachlib/i18n/??_??.py,../taskcoachlib/thirdparty/*.py,../taskcoachlib/meta/debug.py,test.py
pylint:
-pylint --rcfile=.pylintrc -f html taskcoachlib > pylint.html
CLEANFILES=build build-* website.out MANIFEST README.txt INSTALL.txt LICENSE.txt CHANGES.txt @webchecker.pickle .profile tests/.coverage tests/coverage.out
REALLYCLEANFILES=dist taskcoachlib/gui/icons.py taskcoachlib/persistence/xml/templates.py \
taskcoachlib/i18n/??.py taskcoachlib/i18n/???.py taskcoachlib/i18n/??_??.py .\#* */.\#* */*/.\#*
clean:
$(PYTHON) make.py clean
rm -rf $(CLEANFILES)
reallyclean:
$(PYTHON) make.py clean --really-clean
rm -rf $(CLEANFILES) $(REALLYCLEANFILES)
nuke:
$(PYTHON) nuke.py
|