[Pkg-mozext-commits] [mozilla-devscripts] 01/01: Initial support for webextensions via dh_webext

Ximin Luo infinity0 at debian.org
Thu Dec 28 17:13:23 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch pu/webext
in repository mozilla-devscripts.

commit 19ce75757f7f63669abdfdbfc7c1e7f42964b2e7
Author: Ximin Luo <infinity0 at debian.org>
Date:   Thu Dec 28 18:11:58 2017 +0100

    Initial support for webextensions via dh_webext
---
 debian/changelog                               |   8 ++
 dh_webext                                      | 153 +++++++++++++++++++++++++
 perl/Debian/Sequence/{xul_ext.pm => webext.pm} |   2 +-
 3 files changed, 162 insertions(+), 1 deletion(-)

diff --git a/debian/changelog b/debian/changelog
index 37bb1d7..ed94fa5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+mozilla-devscripts (0.48) UNRELEASED; urgency=medium
+
+  * Team upload.
+  * Add a dh_webext(1) addon to support WebExtensions.
+    (Eventually will close #866997, currently WIP.)
+
+ -- Ximin Luo <infinity0 at debian.org>  Thu, 28 Dec 2017 18:10:15 +0100
+
 mozilla-devscripts (0.47) unstable; urgency=low
 
   * When using the xul_ext dh buildsystem, params passed to
diff --git a/dh_webext b/dh_webext
new file mode 100755
index 0000000..29b6cc8
--- /dev/null
+++ b/dh_webext
@@ -0,0 +1,153 @@
+#!/usr/bin/python
+
+# Copyright (c) 2017, Ximin Luo <infinity0 at debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+from __future__ import print_function
+
+import argparse
+import json
+import os
+import shlex
+import subprocess
+import sys
+
+self_script = "dh_webext"
+
+app_packages_debian = {
+    "gecko": [
+        "firefox",
+        #"thunderbird", thunderbird does not support webext yet
+    ],
+    "chromium": ["chromium"],
+}
+
+app_extension_paths = {
+    "gecko": [
+        "/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}",
+        #"/usr/share/mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}", thunderbird does not support webext yet
+    ],
+    "chromium": ["/usr/share/chromium/extensions"],
+}
+
+def log(*args):
+    print(self_script + ":", *args)
+
+def run(cmdline, verbose=False):
+    if verbose:
+        print("  ", " ".join(shlex.quote(a) for a in cmdline))
+    subprocess.check_call(cmdline)
+
+def get_all_packages():
+    lines = open("debian/control").readlines()
+    package_lines = [x for x in lines if x.find("Package:") >= 0]
+    packages = [p[p.find(":")+1:].strip() for p in package_lines]
+    return packages
+
+def generate_substvars(package, name, supported, verbose=False):
+    ext_name = name
+    for prefix in ("webext-",):
+        if ext_name.startswith(prefix):
+            ext_name = ext_name[len(prefix):]
+
+    filename = "debian/%s.substvars" % package
+    # TODO: read old file and merge the new values in
+
+    lines = []
+    debian_apps = sorted(set(deb for app in supported
+        for deb in app_packages_debian[app]))
+
+    # TODO: depends, recommends, breaks
+
+    enhances = debian_apps
+    lines.append("webext:Enhances=" + ", ".join(enhances) + "\n")
+
+    provided = [prefix + "-" + ext_name for prefix in debian_apps]
+    lines.append("webext:Provides=" + ", ".join(provided) + "\n")
+
+    with open(filename, 'w+') as fp:
+        fp.writelines(lines)
+
+def install_for_app(extname, appname, appextname, supported, verbose=False):
+    for p in app_extension_paths[appname]:
+        run(["dh_link", "/usr/share/webext/%s" % extname,
+            os.path.join(p, appextname)], verbose=verbose)
+    supported.append(appname)
+
+def install_webext(*args):
+    parser = argparse.ArgumentParser(
+        description="Debhelper command to install an unpacked WebExtension")
+    parser.add_argument(
+        "-p", "--package", dest="packages", metavar="PACKAGE", action="append", default=[],
+        help="calculate substvars only for the specified PACKAGE")
+    parser.add_argument(
+        "-v", "--verbose", action="store_true", dest="verbose", default=False,
+        help="print more information")
+    parser.add_argument(
+        'home', metavar='PATH', default='.',
+        help='Path to the main directory. (Default: %(default)s)')
+    parser.add_argument(
+        'name', metavar='NAME', nargs='?', default=None,
+        help='Short name of the extension.')
+    # TODO: need to handle/ignore other debhelper options, see dh_xul-ext
+    # for an example and `man debhelper` "COMMON DEBHELPER OPTIONS" for full list
+    args = parser.parse_args(args)
+    args.packages = args.packages or get_all_packages()
+
+    home = args.home
+    name = args.name
+    manifest = os.path.join(home, "manifest.json")
+    if not os.path.exists(manifest):
+        raise ValueError("does not exist: %s" % manifest)
+
+    with open(manifest) as fp:
+        manifest = json.load(fp)
+
+        if name is None:
+            name = manifest["name"]
+        if name.startswith("_"):
+            raise ValueError("name in manifest.json starts with _, please give actual name to %s" % self_script)
+
+        run(["dh_install", "-X.git", "-Xdebian", home,
+             "usr/share/webext/%s" % name], verbose=args.verbose)
+
+        supported = []
+
+        for appname, details in manifest["applications"].items():
+            if appname in app_extension_paths:
+                install_for_app(name, appname, details["id"], supported, args.verbose)
+            else:
+                log("unrecognised application in manifest: %s", appname)
+
+        if "minimum_chrome_version" in manifest:
+            install_for_app(name, "chromium", name, supported, args.verbose)
+
+        if os.path.exists("debian/install-webext"):
+            with open("debian/install-webext") as install_fp:
+                for line in install_fp.readlines():
+                    line = line.rstrip("\n")
+                    if " " in line:
+                        appname, extid = line.split(" ")
+                    else:
+                        appname, extid = line, name
+                    install_for_app(name, appname, extid, supported, args.verbose)
+
+        for package in args.packages:
+            generate_substvars(package, name, supported, args.verbose)
+
+        return 0
+    return 1
+
+if __name__ == '__main__':
+    sys.exit(install_webext(*sys.argv[1:]))
diff --git a/perl/Debian/Sequence/xul_ext.pm b/perl/Debian/Sequence/webext.pm
similarity index 65%
copy from perl/Debian/Sequence/xul_ext.pm
copy to perl/Debian/Sequence/webext.pm
index 515deea..251a874 100644
--- a/perl/Debian/Sequence/xul_ext.pm
+++ b/perl/Debian/Sequence/webext.pm
@@ -3,6 +3,6 @@ use warnings;
 use strict;
 use Debian::Debhelper::Dh_Lib;
 
-insert_after("dh_install", "dh_xul-ext");
+insert_after("dh_install", "dh_webext");
 
 1;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/mozilla-devscripts.git



More information about the Pkg-mozext-commits mailing list