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