@@ -8,29 +8,19 @@ import gettext
88import os
99import os.path
1010import zipfile
11- import sys
12- sys.dont_write_bytecode = True
13-
1411import buildVars
1512
16-
1713def md2html(source, dest):
1814 import markdown
1915 lang = os.path.basename(os.path.dirname(source)).replace('_', '-')
20- localeLang = os.path.basename(os.path.dirname(source))
21- try:
22- _ = gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[localeLang]).ugettext if sys.version_info.major == 2 else gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[localeLang]).gettext
23- title=u"{0}".format(_(buildVars.addon_info["addon_summary"]))
24- except:
25- title="{0}".format(buildVars.addon_info["addon_summary"])
16+ title="{addonSummary} {addonVersion}".format(addonSummary=buildVars.addon_info["addon_summary"], addonVersion=buildVars.addon_info["addon_version"])
2617 headerDic = {
2718 "[[!meta title=\"": "# ",
2819 "\"]]": " #",
2920 }
3021 with codecs.open(source, "r", "utf-8") as f:
3122 mdText = f.read()
32- headerList = headerDic.iteritems () if sys.version_info.major == 2 else list(headerDic.items())
33- for k, v in headerList:
23+ for k, v in headerDic.items():
3424 mdText = mdText.replace(k, v, 1)
3525 htmlText = markdown.markdown(mdText)
3626 with codecs.open(dest, "w", "utf-8") as f:
@@ -47,14 +37,37 @@ def md2html(source, dest):
4737 f.write(htmlText)
4838 f.write("\n</body>\n</html>")
4939
50- def generateHelpFiles (source, target, env, for_signature):
51- action = env.Action(lambda target, source, env : md2html(source[0].abspath, target[0].abspath) and None,
52- lambda target, source, env : "Generating %s" % target[0])
53- return action
54-
55- env = Environment(ENV=os.environ, tools=['gettexttool'])
40+ def mdTool(env):
41+ mdAction=env.Action(
42+ lambda target,source,env: md2html(source[0].path, target[0].path),
43+ lambda target,source,env: 'Generating %s'%target[0],
44+ )
45+ mdBuilder=env.Builder(
46+ action=mdAction,
47+ suffix='.html',
48+ src_suffix='.md',
49+ )
50+ env['BUILDERS']['markdown']=mdBuilder
51+
52+ vars = Variables()
53+ vars.Add("version", "The version of this build", buildVars.addon_info["addon_version"])
54+ vars.Add(BoolVariable("dev", "Whether this is a daily development version", False))
55+ vars.Add("channel", "Update channel for this build", buildVars.addon_info["addon_updateChannel"])
56+
57+ env = Environment(variables=vars, ENV=os.environ, tools=['gettexttool', mdTool])
5658env.Append(**buildVars.addon_info)
5759
60+ if env["dev"]:
61+ import datetime
62+ buildDate = datetime.datetime.now()
63+ year, month, day = str(buildDate.year), str(buildDate.month), str(buildDate.day)
64+ env["addon_version"] = "".join([year, month.zfill(2), day.zfill(2), "-dev"])
65+ env["channel"] = "dev"
66+ elif env["version"] is not None:
67+ env["addon_version"] = env["version"]
68+ if "channel" in env and env["channel"] is not None:
69+ env["addon_updateChannel"] = env["channel"]
70+
5871addonFile = env.File("${addon_name}-${addon_version}.nvda-addon")
5972
6073def addonGenerator(target, source, env, for_signature):
@@ -67,7 +80,6 @@ def manifestGenerator(target, source, env, for_signature):
6780 lambda target, source, env : "Generating manifest %s" % target[0])
6881 return action
6982
70-
7183def translatedManifestGenerator(target, source, env, for_signature):
7284 dir = os.path.abspath(os.path.join(os.path.dirname(str(source[0])), ".."))
7385 lang = os.path.basename(dir)
@@ -76,9 +88,6 @@ def translatedManifestGenerator(target, source, env, for_signature):
7688 return action
7789
7890env['BUILDERS']['NVDAAddon'] = Builder(generator=addonGenerator)
79- env['BUILDERS']['markdown']=Builder(generator = generateHelpFiles,
80- suffix='.html',
81- src_suffix='.md')
8291env['BUILDERS']['NVDAManifest'] = Builder(generator=manifestGenerator)
8392env['BUILDERS']['NVDATranslatedManifest'] = Builder(generator=translatedManifestGenerator)
8493
@@ -93,8 +102,6 @@ def createAddonHelp(dir):
93102 readmeTarget = env.Command(readmePath, "readme.md", Copy("$TARGET", "$SOURCE"))
94103 env.Depends(addon, readmeTarget)
95104
96-
97-
98105def createAddonBundleFromPath(path, dest):
99106 """ Creates a bundle from a directory that contains an addon manifest file."""
100107 basedir = os.path.abspath(path)
@@ -109,14 +116,17 @@ def createAddonBundleFromPath(path, dest):
109116 return dest
110117
111118def generateManifest(source, dest):
119+ addon_info = buildVars.addon_info
120+ addon_info["addon_version"] = env["addon_version"]
121+ addon_info["addon_updateChannel"] = env["addon_updateChannel"]
112122 with codecs.open(source, "r", "utf-8") as f:
113123 manifest_template = f.read()
114- manifest = manifest_template.format(**buildVars. addon_info)
124+ manifest = manifest_template.format(**addon_info)
115125 with codecs.open(dest, "w", "utf-8") as f:
116126 f.write(manifest)
117127
118128def generateTranslatedManifest(source, language, out):
119- _ = gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[language]).ugettext if sys.version_info.major == 2 else gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[language]). gettext
129+ _ = gettext.translation("nvda", localedir=os.path.join("addon", "locale"), languages=[language]).gettext
120130 vars = {}
121131 for var in ("addon_summary", "addon_description"):
122132 vars[var] = _(buildVars.addon_info[var])
@@ -131,10 +141,28 @@ def expandGlobs(files):
131141
132142addon = env.NVDAAddon(addonFile, env.Dir('addon'))
133143
144+ langDirs = [f for f in env.Glob(os.path.join("addon", "locale", "*"))]
145+
146+ #Allow all NVDA's gettext po files to be compiled in source/locale, and manifest files to be generated
147+ for dir in langDirs:
148+ poFile = dir.File(os.path.join("LC_MESSAGES", "nvda.po"))
149+ moFile=env.gettextMoFile(poFile)
150+ env.Depends(moFile, poFile)
151+ translatedManifest = env.NVDATranslatedManifest(dir.File("manifest.ini"), [moFile, os.path.join("manifest-translated.ini.tpl")])
152+ env.Depends(translatedManifest, ["buildVars.py"])
153+ env.Depends(addon, [translatedManifest, moFile])
154+
134155pythonFiles = expandGlobs(buildVars.pythonSources)
135156for file in pythonFiles:
136157 env.Depends(addon, file)
137158
159+ #Convert markdown files to html
160+ createAddonHelp("addon") # We need at least doc in English and should enable the Help button for the add-on in Add-ons Manager
161+ for mdFile in env.Glob(os.path.join('addon', 'doc', '*', '*.md')):
162+ htmlFile = env.markdown(mdFile)
163+ env.Depends(htmlFile, mdFile)
164+ env.Depends(addon, htmlFile)
165+
138166# Pot target
139167i18nFiles = expandGlobs(buildVars.i18nSources)
140168gettextvars={
@@ -156,21 +184,4 @@ manifest = env.NVDAManifest(os.path.join("addon", "manifest.ini"), os.path.join(
156184env.Depends(manifest, "buildVars.py")
157185
158186env.Depends(addon, manifest)
159- createAddonHelp("addon") # We need at least doc in English and should enable the Help button for the add-on in Add-ons Manager
160- langDirs = [f for f in env.Glob(os.path.join("addon", "locale", "*"))]
161-
162- #Allow all NVDA's gettext po files to be compiled in source/locale, and manifest files to be generated
163- for dir in langDirs:
164- poFile = dir.File(os.path.join("LC_MESSAGES", "nvda.po"))
165- moFile=env.gettextMoFile(poFile)
166- env.Depends(moFile, poFile)
167- translatedManifest = env.NVDATranslatedManifest(dir.File("manifest.ini"), [moFile, os.path.join("manifest-translated.ini.tpl")])
168- env.Depends(translatedManifest, ["buildVars.py"])
169- env.Depends(addon, [translatedManifest, moFile])
170- #Convert markdown files to html
171- for mdFile in env.Glob(os.path.join('addon', 'doc', '*', '*.md')):
172- htmlFile = env.markdown(mdFile)
173- env.Depends(htmlFile, [mdFile, moFile])
174- env.Depends(addon, htmlFile)
175187env.Default(addon)
176- env.Clean (addon, ['.sconsign.dblite', 'addon/doc/en/'])
0 commit comments