summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/gen_built_in_addons.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/gen_built_in_addons.py')
-rw-r--r--toolkit/mozapps/extensions/gen_built_in_addons.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/gen_built_in_addons.py b/toolkit/mozapps/extensions/gen_built_in_addons.py
new file mode 100644
index 0000000000..9e8078f2bc
--- /dev/null
+++ b/toolkit/mozapps/extensions/gen_built_in_addons.py
@@ -0,0 +1,99 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import argparse
+import json
+import os.path
+import sys
+
+import buildconfig
+import mozpack.path as mozpath
+
+from mozpack.copier import FileRegistry
+from mozpack.manifests import InstallManifest
+
+
+# A list of build manifests, and their relative base paths, from which to
+# extract lists of install files. These vary depending on which backend we're
+# using, so nonexistent manifests are ignored.
+manifest_paths = (
+ ("", "_build_manifests/install/dist_bin"),
+ ("", "faster/install_dist_bin"),
+ ("browser", "faster/install_dist_bin_browser"),
+)
+
+
+def get_registry(paths):
+ used_paths = set()
+
+ registry = FileRegistry()
+ for base, path in paths:
+ full_path = mozpath.join(buildconfig.topobjdir, path)
+ if not os.path.exists(full_path):
+ continue
+
+ used_paths.add(full_path)
+
+ reg = FileRegistry()
+ InstallManifest(full_path).populate_registry(reg)
+
+ for p, f in reg:
+ path = mozpath.join(base, p)
+ try:
+ registry.add(path, f)
+ except Exception:
+ pass
+
+ return registry, used_paths
+
+
+def get_child(base, path):
+ """Returns the nearest parent of `path` which is an immediate child of
+ `base`"""
+
+ dirname = mozpath.dirname(path)
+ while dirname != base:
+ path = dirname
+ dirname = mozpath.dirname(path)
+ return path
+
+
+def main(output, *args):
+ parser = argparse.ArgumentParser(
+ description="Produces a JSON manifest of built-in add-ons"
+ )
+ parser.add_argument(
+ "--features",
+ type=str,
+ dest="featuresdir",
+ action="store",
+ help=("The distribution sub-directory " "containing feature add-ons"),
+ )
+ args = parser.parse_args(args)
+
+ registry, inputs = get_registry(manifest_paths)
+
+ dicts = {}
+ for path in registry.match("dictionaries/*.dic"):
+ base, ext = os.path.splitext(mozpath.basename(path))
+ dicts[base] = path
+
+ listing = {
+ "dictionaries": dicts,
+ }
+
+ if args.featuresdir:
+ features = set()
+ for p in registry.match("%s/*" % args.featuresdir):
+ features.add(mozpath.basename(get_child(args.featuresdir, p)))
+
+ listing["system"] = sorted(features)
+
+ json.dump(listing, output, sort_keys=True)
+
+ return inputs
+
+
+if __name__ == "__main__":
+ main(sys.stdout, *sys.argv[1:])