Code

fixed reporting of source missing warnings
[roundup.git] / roundup / dist / command / build.py
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
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
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 = set([line for line in manifest if not os.path.exists(line)])
36     # ignore auto-generated files
37     err = err - set(['roundup-admin', 'roundup-demo', 'roundup-gettext',
38         'roundup-mailgw', 'roundup-server', 'roundup-xmlrpc-server'])
39     if err:
40         n = len(manifest)
41         print '\n*** SOURCE WARNING: There are files missing (%d/%d found)!'%(
42             n-len(err), n)
43         print 'Missing:', '\nMissing: '.join(err)
46 class build(base):
48     def build_message_files(self):
49         """For each locale/*.po, build .mo file in target locale directory"""
50         for (_src, _dst) in list_message_files():
51             _build_dst = os.path.join("build", _dst)
52             self.mkpath(os.path.dirname(_build_dst))
53             self.announce("Compiling %s -> %s" % (_src, _build_dst))
54             msgfmt.make(_src, _build_dst)
56     def run(self):
57         check_manifest()
58         self.build_message_files()
59         base.run(self)