-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsconstruct
More file actions
109 lines (88 loc) · 4.23 KB
/
Copy pathsconstruct
File metadata and controls
109 lines (88 loc) · 4.23 KB
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
# NVDA add-on template SCONSTRUCT file
# Copyright (C) 2012 Rui Batista <ruiandrebatista@gmail.com>
# This file is covered by the GNU General Public License.
# See the file COPYING.txt for more details.
import codecs
import gettext
import os.path
import zipfile
import configobj
import buildVars
env = Environment(ENV=os.environ)
# Updated to use correct keys from buildVars.py
addonFile = env.File("{addon_name}-{addon_version}.nvda-addon".format(**buildVars.addon_info))
def addonGenerator(target, source, env, for_signature):
action = env.Action(lambda target, source, env : createAddonBundleFromPath(source[0].abspath, target[0].abspath) and None,
lambda target, source, env : "Generating Addon %s" % target[0])
return action
def manifestGenerator(target, source, env, for_signature):
action = env.Action(lambda target, source, env : generateManifest(source[0].abspath, target[0].abspath) and None,
lambda target, source, env : "Generating manifest %s" % target[0])
return action
def translatedManifestGenerator(target, source, env, for_signature):
dir = os.path.abspath(os.path.join(os.path.dirname(str(source[0])), ".."))
lang = os.path.basename(dir)
action = env.Action(lambda target, source, env : generateTranslatedManifest(source[1].abspath, lang, target[0].abspath) and None,
lambda target, source, env : "Generating translated manifest %s" % target[0])
return action
env['BUILDERS']['NVDAAddon'] = Builder(generator=addonGenerator)
env['BUILDERS']['NVDAManifest'] = Builder(generator=manifestGenerator)
env['BUILDERS']['NVDATranslatedManifest'] = Builder(generator=translatedManifestGenerator)
env['BUILDERS']['gettextMoFile'] = env.Builder(
action=env.Action(["msgfmt -o $TARGETS $SOURCES"], lambda t, s, e : "Compiling translation %s" % s[0]),
suffix=".mo",
src_suffix=".po"
)
env['BUILDERS']['gettextPotFile'] = env.Builder(
action=env.Action(["xgettext --msgid-bugs-address='%s' --package-name='%s' --package-version='%s' -c -o $TARGETS $SOURCES" %
("nvda-translations@freelists.org", buildVars.addon_info['addon_name'], buildVars.addon_info['addon_version'])
], lambda t, s, e : "Generating pot file %s" % t[0]),
suffix=".pot")
def createAddonBundleFromPath(path, dest):
basedir = os.path.abspath(path)
with zipfile.ZipFile(dest, 'w', zipfile.ZIP_DEFLATED) as z:
for dir, dirnames, filenames in os.walk(basedir):
relativePath = os.path.relpath(dir, basedir)
for filename in filenames:
pathInBundle = os.path.join(relativePath, filename)
absPath = os.path.join(dir, filename)
z.write(absPath, pathInBundle)
return dest
def generateManifest(source, dest):
with codecs.open(source, "r", "utf-8") as f:
manifest_template = f.read()
manifest = manifest_template.format(**buildVars.addon_info)
with codecs.open(dest, "w", "utf-8") as f:
f.write(manifest)
def generateTranslatedManifest(source, language, out):
_ = gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[language]).gettext
vars = {}
for var in ("summary", "description"):
vars["addon-" + var] = _(buildVars.addon_info[var])
with codecs.open(source, "r", "utf-8") as f:
manifest_template = f.read()
result = manifest_template.format(**vars)
with codecs.open(out, "w", "utf-8") as f:
f.write(result)
def expandGlobs(files):
return [f for pattern in files for f in env.Glob(pattern)]
addon = env.NVDAAddon(addonFile, env.Dir('addon'))
langDirs = [f for f in env.Glob(os.path.join("addon", "locale", "*"))]
for dir in langDirs:
poFile = dir.File(os.path.join("LC_MESSAGES", "nvda.po"))
moFile = env.gettextMoFile(poFile)
env.Depends(moFile, poFile)
translatedManifest = env.NVDATranslatedManifest(dir.File("manifest.ini"), [moFile, os.path.join("manifest-translated.ini.tpl")])
env.Depends(translatedManifest, 'buildVars.py')
env.Depends(addon, [translatedManifest, moFile])
pythonFiles = expandGlobs(buildVars.pythonSources)
for file in pythonFiles:
env.Depends(addon, file)
i18nFiles = expandGlobs(buildVars.i18nSources)
pot = env.gettextPotFile("%s.pot" % buildVars.addon_info["addon_name"], i18nFiles)
env.Alias('pot', pot)
env.Depends(pot, i18nFiles)
manifest = env.NVDAManifest(os.path.join("addon", "manifest.ini"), os.path.join("manifest.ini.tpl"))
env.Depends(manifest, 'buildVars.py')
env.Depends(addon, manifest)
env.Default(addon)