Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions buildVars.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@
# Build customizations
# Change this file instead of sconstruct or manifest files, whenever possible.


# Full getext (please don't change)
_ = lambda x: x
def _(arg):
return arg


# Add-on information variables
addon_info = {
# add-on Name/identifier, internal for NVDA
"addon_name": "addonTemplate",
# Add-on summary, usually the user visible name of the addon.
# Translators: Summary for this add-on to be shown on installation and add-on information found in Add-ons Manager.
# Translators: Summary for this add-on
# to be shown on installation and add-on information found in Add-ons Manager.
"addon_summary": _("Add-on user visible name"),
# Add-on description
# Translators: Long description to be shown for this add-on on add-on information from add-ons manager
Expand All @@ -29,12 +33,15 @@
"addon_minimumNVDAVersion": None,
# Last NVDA version supported/tested (e.g. "2018.4.0", ideally more recent than minimum version)
"addon_lastTestedNVDAVersion": None,
# Add-on update channel (default is None, denoting stable releases, and for development releases, use "dev"; do not change unless you know what you are doing)
# Add-on update channel (default is None, denoting stable releases,
# and for development releases, use "dev".)
# Do not change unless you know what you are doing!
"addon_updateChannel": None,
}


import os.path
import os.path # NOQA


# Define the python files that are the sources of your add-on.
# You can use glob expressions here, they will be expanded.
Expand Down
74 changes: 50 additions & 24 deletions sconstruct
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ sys.dont_write_bytecode = True

import buildVars


def md2html(source, dest):
import markdown
lang = os.path.basename(os.path.dirname(source)).replace('_', '-')
title="{addonSummary} {addonVersion}".format(addonSummary=buildVars.addon_info["addon_summary"], addonVersion=buildVars.addon_info["addon_version"])
title = "{addonSummary} {addonVersion}".format(
addonSummary=buildVars.addon_info["addon_summary"], addonVersion=buildVars.addon_info["addon_version"]
)
headerDic = {
"[[!meta title=\"": "# ",
"\"]]": " #",
Expand All @@ -39,17 +42,19 @@ def md2html(source, dest):
f.write(htmlText)
f.write("\n</body>\n</html>")


def mdTool(env):
mdAction=env.Action(
lambda target,source,env: md2html(source[0].path, target[0].path),
lambda target,source,env: 'Generating %s'%target[0],
mdAction = env.Action(
lambda target, source, env: md2html(source[0].path, target[0].path),
lambda target, source, env: 'Generating % s' % target[0],
)
mdBuilder=env.Builder(
mdBuilder = env.Builder(
action=mdAction,
suffix='.html',
src_suffix='.md',
)
env['BUILDERS']['markdown']=mdBuilder
env['BUILDERS']['markdown'] = mdBuilder


vars = Variables()
vars.Add("version", "The version of this build", buildVars.addon_info["addon_version"])
Expand All @@ -75,27 +80,38 @@ buildVars.addon_info["addon_updateChannel"] = env["addon_updateChannel"]

addonFile = env.File("${addon_name}-${addon_version}.nvda-addon")


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])
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])
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])
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)


def createAddonHelp(dir):
docsDir = os.path.join(dir, "doc")
if os.path.isfile("style.css"):
Expand All @@ -107,6 +123,7 @@ def createAddonHelp(dir):
readmeTarget = env.Command(readmePath, "readme.md", Copy("$TARGET", "$SOURCE"))
env.Depends(addon, readmeTarget)


def createAddonBundleFromPath(path, dest):
""" Creates a bundle from a directory that contains an addon manifest file."""
basedir = os.path.abspath(path)
Expand All @@ -117,9 +134,11 @@ def createAddonBundleFromPath(path, dest):
for filename in filenames:
pathInBundle = os.path.join(relativePath, filename)
absPath = os.path.join(dir, filename)
if pathInBundle not in buildVars.excludedFiles: z.write(absPath, pathInBundle)
if pathInBundle not in buildVars.excludedFiles:
z.write(absPath, pathInBundle)
return dest


def generateManifest(source, dest):
addon_info = buildVars.addon_info
with codecs.open(source, "r", "utf-8") as f:
Expand All @@ -128,6 +147,7 @@ def generateManifest(source, dest):
with codecs.open(dest, "w", "utf-8") as f:
f.write(manifest)


def generateTranslatedManifest(source, language, out):
# No ugettext in Python 3.
if sys.version_info.major == 2:
Expand All @@ -143,40 +163,46 @@ def generateTranslatedManifest(source, language, out):
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", "*"))]

#Allow all NVDA's gettext po files to be compiled in source/locale, and manifest files to be generated
# Allow all NVDA's gettext po files to be compiled in source/locale, and manifest files to be generated
for dir in langDirs:
poFile = dir.File(os.path.join("LC_MESSAGES", "nvda.po"))
moFile=env.gettextMoFile(poFile)
moFile = env.gettextMoFile(poFile)
env.Depends(moFile, poFile)
translatedManifest = env.NVDATranslatedManifest(dir.File("manifest.ini"), [moFile, os.path.join("manifest-translated.ini.tpl")])
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)

#Convert markdown files to html
createAddonHelp("addon") # We need at least doc in English and should enable the Help button for the add-on in Add-ons Manager
# Convert markdown files to html
# We need at least doc in English and should enable the Help button for the add-on in Add-ons Manager
createAddonHelp("addon")
for mdFile in env.Glob(os.path.join('addon', 'doc', '*', '*.md')):
htmlFile = env.markdown(mdFile)
env.Depends(htmlFile, mdFile)
env.Depends(addon, htmlFile)

# Pot target
i18nFiles = expandGlobs(buildVars.i18nSources)
gettextvars={
'gettext_package_bugs_address' : 'nvda-translations@groups.io',
'gettext_package_name' : buildVars.addon_info['addon_name'],
'gettext_package_version' : buildVars.addon_info['addon_version']
}
gettextvars = {
'gettext_package_bugs_address': 'nvda-translations@groups.io',
'gettext_package_name': buildVars.addon_info['addon_name'],
'gettext_package_version': buildVars.addon_info['addon_version']
}

pot = env.gettextPotFile("${addon_name}.pot", i18nFiles, **gettextvars)
env.Alias('pot', pot)
Expand All @@ -192,4 +218,4 @@ env.Depends(manifest, "buildVars.py")

env.Depends(addon, manifest)
env.Default(addon)
env.Clean (addon, ['.sconsign.dblite', 'addon/doc/en/'])
env.Clean(addon, ['.sconsign.dblite', 'addon/doc/en/'])
9 changes: 6 additions & 3 deletions site_scons/site_tools/gettexttool/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ def generate(env):
suffix=".pot")

env['BUILDERS']['gettextMergePotFile'] = env.Builder(
action=Action("xgettext " + "--omit-header --no-location " + XGETTEXT_COMMON_ARGS,
"Generating pot file $TARGET"),
suffix=".pot")
action=Action(
"xgettext " + "--omit-header --no-location " + XGETTEXT_COMMON_ARGS,
"Generating pot file $TARGET"
),
suffix=".pot"
)