annotate roundup/dist/command/build.py @ 4068:e233d7a66343

Refactor setup.py.
author Stefan Seefeld <stefan@seefeld.name>
date Mon, 23 Feb 2009 14:30:32 +0000
parents
children d4cd0a264098
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4068
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
1 #
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
2 # Copyright (C) 2009 Stefan Seefeld
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
3 # All rights reserved.
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
4 # For license terms see the file COPYING.txt.
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
5 #
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
6 from roundup import msgfmt
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
7 from distutils.command.build import build as base
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
8 import os
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
9 from glob import glob
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
10
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
11 def list_message_files(suffix=".po"):
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
12 """Return list of all found message files and their intallation paths"""
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
13 _files = glob("locale/*" + suffix)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
14 _list = []
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
15 for _file in _files:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
16 # basename (without extension) is a locale name
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
17 _locale = os.path.splitext(os.path.basename(_file))[0]
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
18 _list.append((_file, os.path.join(
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
19 "share", "locale", _locale, "LC_MESSAGES", "roundup.mo")))
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
20 return _list
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
21
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
22 def check_manifest():
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
23 """Check that the files listed in the MANIFEST are present when the
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
24 source is unpacked.
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
25 """
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
26 try:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
27 f = open('MANIFEST')
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
28 except:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
29 print '\n*** SOURCE WARNING: The MANIFEST file is missing!'
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
30 return
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
31 try:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
32 manifest = [l.strip() for l in f.readlines()]
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
33 finally:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
34 f.close()
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
35 err = [line for line in manifest if not os.path.exists(line)]
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
36 err.sort()
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
37 # ignore auto-generated files
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
38 if err == ['roundup-admin', 'roundup-demo', 'roundup-gettext',
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
39 'roundup-mailgw', 'roundup-server']:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
40 err = []
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
41 if err:
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
42 n = len(manifest)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
43 print '\n*** SOURCE WARNING: There are files missing (%d/%d found)!'%(
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
44 n-len(err), n)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
45 print 'Missing:', '\nMissing: '.join(err)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
46
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
47
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
48 class build(base):
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
49
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
50 def build_message_files(self):
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
51 """For each locale/*.po, build .mo file in target locale directory"""
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
52 for (_src, _dst) in list_message_files():
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
53 _build_dst = os.path.join("build", _dst)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
54 self.mkpath(os.path.dirname(_build_dst))
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
55 self.announce("Compiling %s -> %s" % (_src, _build_dst))
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
56 msgfmt.make(_src, _build_dst)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
57
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
58 def run(self):
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
59 check_manifest()
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
60 self.build_message_files()
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
61 base.run(self)
e233d7a66343 Refactor setup.py.
Stefan Seefeld <stefan@seefeld.name>
parents:
diff changeset
62

Roundup Issue Tracker: http://roundup-tracker.org/