From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id qMSZA0sjNmWxfQEAG6o9tA:P1 (envelope-from ) for ; Mon, 23 Oct 2023 09:39:55 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id qMSZA0sjNmWxfQEAG6o9tA (envelope-from ) for ; Mon, 23 Oct 2023 09:39:55 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 5356640A5F for ; Mon, 23 Oct 2023 09:39:54 +0200 (CEST) Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=trop.in header.s=gm1 header.b=APAvMhuY; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1698046795; a=rsa-sha256; cv=none; b=WFNbxaN10nrFBKTbk+xu+TR2Vj9zr+Klu38EjYFd7ik2zKocNDo5NGNFhx8JqqRjl2AwDF ECUp1pHc/6nEjvIXVxw1h3vbrl00hPkhRVdqFzu5tZtC+K2+fmwdx6JVPhq+ldoSjbz3U+ Stnd8lmTASWnJeZlow5KPIzyjrsxSZbqoVMxBCvsPNYv/h5jWm17u7yA2HA+XYgGGBZpLa 45ltjkZ7/NDkB3KOeCLEg7SARWggZ10bmB4KmopIlPGgvWHVnaUxsVj2oHKbCygDK2icrr gNsvYOOfWDi0THDMj7Pax+6cRbUJ1aVSijeaB4OAyhjpYC77iq45yaeHI76x8w== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=trop.in header.s=gm1 header.b=APAvMhuY; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1698046795; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=RiA/gX1o1hoHqMYXHz8uyKrayddJ/RTHNlAitBIcRr4=; b=oFRSBNW85Pu50HANXhM0X4VjLEsve+X2lvZMqCjH9+JIryUV/YiPvp++n6vxGnJa86R2hK kk/WLAZnQHSwm9tfeA2bxLwwWmEDLOUshzSHlf0Eh45+GIC9BtuMfHBNFfVgZ2nMiMQWEq 0FS4Z/v8R7VzunMQMZQ6rgmcrHa/87XphrTShQVuSFGOIFZ6wgcK3+RW7DaaVCovIa244y HnMIATx9UyQr7SJp+KwswSFZlFNgWH7cgoPufGHOLScT5qLLtH6OXQolDxjAZHMEMomjOz WzBJQ/eJdkIOeOm3NT6tsMWW72J1q3yuMy5TtExy5uuOTU7skd8HPDjqwTUsgg== Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qupXE-0007QA-8X; Mon, 23 Oct 2023 03:39:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qupXB-0007He-Bm for guix-patches@gnu.org; Mon, 23 Oct 2023 03:39:33 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qupXB-0001dT-3R for guix-patches@gnu.org; Mon, 23 Oct 2023 03:39:33 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qupXd-0000u2-JY for guix-patches@gnu.org; Mon, 23 Oct 2023 03:40:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#66408] [PATCH v3] gnu: icecat: Add support for Guix packaged extensions. Resent-From: Andrew Tropin Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 23 Oct 2023 07:40:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66408 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: =?UTF-8?Q?Cl=C3=A9ment?= Lassieur , 66408@debbugs.gnu.org Cc: Jonathan Brielmaier , =?UTF-8?Q?Cl=C3=A9ment?= Lassieur Received: via spool by 66408-submit@debbugs.gnu.org id=B66408.16980467463405 (code B ref 66408); Mon, 23 Oct 2023 07:40:01 +0000 Received: (at 66408) by debbugs.gnu.org; 23 Oct 2023 07:39:06 +0000 Received: from localhost ([127.0.0.1]:48942 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qupWj-0000sp-Jj for submit@debbugs.gnu.org; Mon, 23 Oct 2023 03:39:06 -0400 Received: from relay6-d.mail.gandi.net ([2001:4b98:dc4:8::226]:50203) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qupWf-0000sG-90 for 66408@debbugs.gnu.org; Mon, 23 Oct 2023 03:39:03 -0400 Received: by mail.gandi.net (Postfix) with ESMTPSA id 007AFC0005; Mon, 23 Oct 2023 07:38:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=trop.in; s=gm1; t=1698046705; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=RiA/gX1o1hoHqMYXHz8uyKrayddJ/RTHNlAitBIcRr4=; b=APAvMhuYa65jU6fosmCQKaHAO4DN5kMJ/HXNY27bJ16HrinpKM9H/VPx/KMYjKeeGTYWgN GDpAaOxI3kPLZOKBx4AmsF/zzhm/Ifv9/fc4sSAzeTmmjsRoHtaZbL4XKd7/RTCNgO+4Yo rfE7aiON+/e46bgbI7Ja9Qj/Lp7j3S5lNr4mhmu6raLOAlL+9czZw+ZuqV2JlXm+eTez+C 8hAzmTrzVcWsuGsozwTcPcT7ADLHAtVJJhZEEBNkxXjQA7QKU2guzD2QwPsx197PO67AFt FMdOh/HX7wS1k5M1v4auN3pGJbAsN0YX5yh5ftQuh6CQkoZ8v/i/v4j9UiWCRQ== From: Andrew Tropin In-Reply-To: <43b86867b651d877c805d7e5963b42319606e0d1.1697027198.git.clement@lassieur.org> References: <43b86867b651d877c805d7e5963b42319606e0d1.1697027198.git.clement@lassieur.org> Date: Mon, 23 Oct 2023 11:37:44 +0400 Message-ID: <87cyx5u6uv.fsf@trop.in> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-GND-Sasl: andrew@trop.in X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Scanner: mx1.migadu.com X-Migadu-Spam-Score: -1.33 X-Spam-Score: -1.33 X-Migadu-Queue-Id: 5356640A5F X-TUID: bl1HxL7YPgDu --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2023-10-11 14:26, Cl=C3=A9ment Lassieur wrote: > * gnu/build/icecat-extension.scm: New file with a MAKE-ICECAT-EXTENSION > procedure that makes sure the add-on directory is a symlink, so that Icec= at > can normalize it into a package store path. > * gnu/local.mk (dist_patch_DATA): Register it, as well as new patches. > * gnu/packages/browser-extensions.scm (ublock-origin)[properties]: Store = the > add-on ID so that it is accessible in MAKE-ICECAT-EXTENSION. > [arguments]: Use the add-on ID as root directory. > (ublock-origin/icecat): New procedure. > * gnu/packages/gnuzilla.scm (icecat-minimal)[arguments]: Rewrite the unus= ed > 'apply-guix-specific-patches' phase so that it applies the following two > patches. > [native-search-paths]: New field. > * gnu/packages/patches/icecat-compare-paths.patch: New patch that compares > add-on paths (which are package store paths) to detect package changes. > * gnu/packages/patches/icecat-use-guix-extensions.patch: New patch that > replaces "/usr/share/mozilla/extensions" with "$ICECAT_EXTENSION_DIR". > --- > gnu/build/icecat-extension.scm | 71 +++++++++++++++++++ > gnu/local.mk | 3 + > gnu/packages/browser-extensions.scm | 13 +++- > gnu/packages/gnuzilla.scm | 22 +++--- > .../patches/icecat-compare-paths.patch | 19 +++++ > .../patches/icecat-use-guix-extensions.patch | 52 ++++++++++++++ > 6 files changed, 167 insertions(+), 13 deletions(-) > create mode 100644 gnu/build/icecat-extension.scm > create mode 100644 gnu/packages/patches/icecat-compare-paths.patch > create mode 100644 gnu/packages/patches/icecat-use-guix-extensions.patch > > diff --git a/gnu/build/icecat-extension.scm b/gnu/build/icecat-extension.= scm > new file mode 100644 > index 000000000000..8ecd8a505f72 > --- /dev/null > +++ b/gnu/build/icecat-extension.scm > @@ -0,0 +1,71 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2020, 2021 Marius Bakke > +;;; Copyright =C2=A9 2023 Cl=C3=A9ment Lassieur > +;;; > +;;; This file is part of GNU Guix. > +;;; > +;;; GNU Guix is free software; you can redistribute it and/or modify it > +;;; under the terms of the GNU General Public License as published by > +;;; the Free Software Foundation; either version 3 of the License, or (at > +;;; your option) any later version. > +;;; > +;;; GNU Guix is distributed in the hope that it will be useful, but > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +;;; GNU General Public License for more details. > +;;; > +;;; You should have received a copy of the GNU General Public License > +;;; along with GNU Guix. If not, see . > + > +(define-module (gnu build icecat-extension) > + #:use-module (guix gexp) > + #:use-module (guix packages) > + #:use-module (guix build-system trivial) > + #:export (make-icecat-extension)) > + > +(define* (make-icecat-extension pkg #:optional (pkg-output "out")) > + "Create an Icecat extension from package PKG and return a package that, > +when installed, will make the extension contained in PKG available as an > +Icecat browser extension. PKG-OUTPUT specifies which output of PKG to u= se." > + (package > + (inherit pkg) > + (name (string-append (package-name pkg) "-icecat")) > + (native-inputs '()) > + (inputs '()) > + (propagated-inputs '()) > + (outputs '("out")) > + (build-system trivial-build-system) > + (arguments > + (list > + #:modules '((guix build utils)) > + #:builder > + #~(begin > + (use-modules (guix build utils)) > + (let* ((id #$(assq-ref (package-properties pkg) 'id)) > + (moz-app-id "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}") > + (search-dir (string-append #$output > + "/share/icecat/extensions/" > + moz-app-id))) > + ;; Icecat's iterates over `search-dir` for directories. If a > + ;; directory's name is not a valid add-on ID, it is ignored.= See > + ;; `DirectoryLocation::readAddons()` in XPIProvider.jsm. > + > + ;; This directory has to be a symlink, because Icecat's > + ;; `_readLinkFile(aFile)` calls `normalize()` only if `aFile= ` is a > + ;; symlink. > + > + ;; Normalizing is required because Icecat compares the add-o= n path > + ;; against its local database to know if there is an extensi= on > + ;; update. We want the add-on path to be the package store = path, > + ;; so that a path change is detected every time the package = is > + ;; updated. See `updateExistingAddon()` in XPIDatabase.jsm,= with > + ;; our patch `icecat-compare-paths.patch`. > + > + ;; We don't want the add-on path to be the profile store pat= h, > + ;; which would change too often. We don't want the add-on p= ath to > + ;; be hard-coded ("/usr/share/mozilla/extensions") either be= cause > + ;; it would never change. > + > + (mkdir-p search-dir) > + (symlink (in-vicinity (ungexp pkg pkg-output) id) > + (in-vicinity search-dir id)))))))) > diff --git a/gnu/local.mk b/gnu/local.mk > index 9fa52833cbc5..1bf925a57d9e 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -761,6 +761,7 @@ GNU_SYSTEM_MODULES =3D \ > %D%/build/chromium-extension.scm \ > %D%/build/cross-toolchain.scm \ > %D%/build/dbus-service.scm \ > + %D%/build/icecat-extension.scm \ > %D%/build/image.scm \ > %D%/build/jami-service.scm \ > %D%/build/file-systems.scm \ > @@ -1415,6 +1416,8 @@ dist_patch_DATA =3D \ > %D%/packages/patches/icecat-makeicecat.patch \ > %D%/packages/patches/icecat-102-makeicecat.patch \ > %D%/packages/patches/icecat-avoid-bundled-libraries.patch \ > + %D%/packages/patches/icecat-compare-paths.patch \ > + %D%/packages/patches/icecat-use-guix-extensions.patch \ > %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch \ > %D%/packages/patches/icecat-use-system-media-libs.patch \ > %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch \ > diff --git a/gnu/packages/browser-extensions.scm b/gnu/packages/browser-e= xtensions.scm > index 3f6da8d77a3f..8a76f3a3e042 100644 > --- a/gnu/packages/browser-extensions.scm > +++ b/gnu/packages/browser-extensions.scm > @@ -1,6 +1,7 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright =C2=A9 2020, 2021 Marius Bakke > ;;; Copyright =C2=A9 2023 Nicolas Graves > +;;; Copyright =C2=A9 2023 Cl=C3=A9ment Lassieur > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -25,6 +26,7 @@ (define-module (gnu packages browser-extensions) > #:use-module (guix build-system gnu) > #:use-module ((guix licenses) #:prefix license:) > #:use-module (gnu build chromium-extension) > + #:use-module (gnu build icecat-extension) > #:use-module (gnu packages compression) > #:use-module (gnu packages python)) >=20=20 > @@ -98,6 +100,7 @@ (define ublock-origin > "1i8rnij3sbwg6vj6znprrsca0n5xjzhmhppaa8v6jyxg6wrrfch1"))= )) > (build-system gnu-build-system) > (outputs '("xpi" "firefox" "chromium")) > + (properties '((id . "uBlock0@raymondhill.net"))) > (arguments > (list > #:tests? #f ;no tests > @@ -125,9 +128,10 @@ (define ublock-origin > (invoke "./tools/make-chromium.sh"))) > (add-after 'build-chromium 'install > (lambda* (#:key outputs #:allow-other-keys) > - (let ((firefox (assoc-ref outputs "firefox")) > - (xpi (assoc-ref outputs "xpi")) > - (chromium (assoc-ref outputs "chromium"))) > + (let* ((id #$(assq-ref (package-properties this-package) '= id)) > + (firefox (in-vicinity (assoc-ref outputs "firefox")= id)) > + (xpi (assoc-ref outputs "xpi")) > + (chromium (assoc-ref outputs "chromium"))) > (install-file "dist/build/uBlock0.firefox.xpi" > (string-append xpi "/lib/mozilla/extension= s")) > (copy-recursively "dist/build/uBlock0.firefox" firefox) > @@ -142,3 +146,6 @@ (define ublock-origin >=20=20 > (define-public ublock-origin/chromium > (make-chromium-extension ublock-origin "chromium")) > + > +(define-public ublock-origin/icecat > + (make-icecat-extension ublock-origin "firefox")) > diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm > index a367d7a00ff6..608219c97303 100644 > --- a/gnu/packages/gnuzilla.scm > +++ b/gnu/packages/gnuzilla.scm > @@ -885,16 +885,13 @@ (define-public icecat-minimal > #:phases > #~(modify-phases %standard-phases > (add-after 'unpack 'apply-guix-specific-patches > - (lambda* (#:key inputs native-inputs #:allow-other-keys) > - (let ((patch (search-input-file inputs "bin/patch"))) > - (for-each (match-lambda > - ((label . file) > - (when (and (string-prefix? "icecat-" label) > - (string-suffix? ".patch" label)) > - (format #t "applying '~a'...~%" file) > - (invoke patch "--force" "--no-backup-if-m= ismatch" > - "-p1" "--input" file)))) > - (or native-inputs inputs))))) > + (lambda _ > + (for-each > + (lambda (file) (invoke "patch" "--force" "-p1" "-i" file)) > + '(#$(local-file > + (search-patch "icecat-compare-paths.patch")) > + #$(local-file > + (search-patch "icecat-use-guix-extensions.patch"))))= )) > (add-after 'apply-guix-specific-patches 'remove-bundled-librar= ies > (lambda _ > ;; Remove bundled libraries that we don't use, since they = may > @@ -1138,6 +1135,11 @@ (define-public icecat-minimal > '("default16.png" "default22.png" "default24.png" > "default32.png" "default48.png" "content/icon64.png" > "mozicon128.png" "default256.png")))))))) > + (native-search-paths > + (list (search-path-specification > + (variable "ICECAT_EXTENSION_DIR") > + (separator #f) ;single entry > + (files '("share/icecat/extensions"))))) > (home-page "https://www.gnu.org/software/gnuzilla/") > (synopsis "Entirely free browser derived from Mozilla Firefox") > (description > diff --git a/gnu/packages/patches/icecat-compare-paths.patch b/gnu/packag= es/patches/icecat-compare-paths.patch > new file mode 100644 > index 000000000000..9205899dc0c4 > --- /dev/null > +++ b/gnu/packages/patches/icecat-compare-paths.patch > @@ -0,0 +1,19 @@ > +--- a/toolkit/mozapps/extensions/internal/XPIDatabase.jsm > ++++ b/toolkit/mozapps/extensions/internal/XPIDatabase.jsm > +@@ -3452,6 +3452,7 @@ const XPIDatabaseReconcile =3D { > + if ( > + newAddon || > + oldAddon.updateDate !=3D xpiState.mtime || > ++ oldAddon.path !=3D xpiState.path || > + (aUpdateCompatibility && this.isAppBundledLocation(installLocatio= n)) > + ) { > + newAddon =3D this.updateMetadata( > +@@ -3460,8 +3461,6 @@ const XPIDatabaseReconcile =3D { > + xpiState, > + newAddon > + ); > +- } else if (oldAddon.path !=3D xpiState.path) { > +- newAddon =3D this.updatePath(installLocation, oldAddon, xpiState); > + } else if (aUpdateCompatibility || aSchemaChange) { > + newAddon =3D this.updateCompatibility( > + installLocation, > diff --git a/gnu/packages/patches/icecat-use-guix-extensions.patch b/gnu/= packages/patches/icecat-use-guix-extensions.patch > new file mode 100644 > index 000000000000..f2fe4260c2cd > --- /dev/null > +++ b/gnu/packages/patches/icecat-use-guix-extensions.patch > @@ -0,0 +1,52 @@ > +--- a/toolkit/xre/nsXREDirProvider.cpp > ++++ b/toolkit/xre/nsXREDirProvider.cpp > +@@ -415,13 +415,7 @@ nsXREDirProvider::GetFile(const char* aProperty, bo= ol* aPersistent, > + #if defined(XP_UNIX) && !defined(XP_MACOSX) > + else if (!strcmp(aProperty, XRE_SYS_SHARE_EXTENSION_PARENT_DIR)) { > + # ifdef ENABLE_SYSTEM_EXTENSION_DIRS > +-# if defined(__OpenBSD__) || defined(__FreeBSD__) > +- static const char* const sysLExtDir =3D "/usr/local/share/mozilla/e= xtensions"; > +-# else > +- static const char* const sysLExtDir =3D "/usr/share/mozilla/extensi= ons"; > +-# endif > +- rv =3D NS_NewNativeLocalFile(nsDependentCString(sysLExtDir), false, > +- getter_AddRefs(file)); > ++ rv =3D GetGuixExtensionDir(getter_AddRefs(file)); > + # endif > + } > + #endif // defined(XP_UNIX) && !defined(XP_MACOSX) > +@@ -1198,6 +1192,24 @@ nsresult nsXREDirProvider::SetUserDataProfileDire= ctory(nsCOMPtr& aFile, > + return NS_OK; > + } > +=20 > ++nsresult nsXREDirProvider::GetGuixExtensionDir(nsIFile** aFile) { > ++ nsresult rv; > ++ nsCOMPtr localDir; > ++ > ++#if defined(XP_UNIX) > ++ const char* extensionDir =3D getenv("ICECAT_EXTENSION_DIR"); > ++ if (!extensionDir || !*extensionDir) return NS_ERROR_FAILURE; > ++ > ++ rv =3D NS_NewNativeLocalFile(nsDependentCString(extensionDir), true, > ++ getter_AddRefs(localDir)); > ++#else > ++# error "Don't know how to get product dir on your platform" > ++#endif > ++ > ++ NS_IF_ADDREF(*aFile =3D localDir); > ++ return rv; > ++} > ++ > + nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, > + bool aLocal) { > + // Copied from nsAppFileLocationProvider (more or less) > +--- a/toolkit/xre/nsXREDirProvider.h > ++++ b/toolkit/xre/nsXREDirProvider.h > +@@ -112,6 +112,7 @@ class nsXREDirProvider final : public nsIDirectorySe= rviceProvider2, > + private: > + nsresult GetFilesInternal(const char* aProperty, > + nsISimpleEnumerator** aResult); > ++ static nsresult GetGuixExtensionDir(nsIFile** aFile); > + static nsresult GetUserDataDirectoryHome(nsIFile** aFile, bool aLocal= ); > + static nsresult GetSysUserExtensionsDirectory(nsIFile** aFile); > + #if defined(XP_UNIX) || defined(XP_MACOSX) > > base-commit: 9ad9113fc238ee8de5191a5e15b5153fd149e9fa Looks good! =2D-=20 Best regards, Andrew Tropin --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmU2IsgACgkQIgjSCVjB 3rB8/Q//fbgL8NJ2qhnuT++xfrOMGY5jp0o23n5e4B6rDvNNMbtFxCSGyWPdW+ss 98l8iJUWcApod8NBEgLou9E9tLoYQGSc73kbpqYt72OFJAHpp0rZDKsNFsoWha0C ctNkuLdJLu2tG7eOLa9xwJO9lzIzkcDTwwrn7fkvZYNFVB9hiI8vyxpNW9lJucpI dinarw+/hYMPvkW1LN0bmMyQLXhc2I2lSGBXhWDImNYXJK41H5TZOTTNALtgASUq PDN09AddO6pHAoZ6dJNs1aAq/4ToT2TRu5UM3ihQqY/lvhwcs8/a2TZJ7sJM4SiS HkjyTj9WCFl4yWqmObPqgCmZejVHHGGZVOwbkisN06gObjg7No9Uyi71KR3+uH1U mofMb/G1F4qFLik8Iy1Sjw54XfebdftapJX0ULs+qvmAFPy8t27LiKsWRWEr4DXg Kifr3fRPtw+WtfhN8Bv5O/KvcT2nuo5RWJ/EzG4KM82BB9wVhseDeaY8oy9gmaEO msI3JxwEJ+xMDRnhmEG+1ZWLFA6GIWoOpQ2KqaXdleAkMsGx1Il20dqPY2yNz47s EH+BNXUdCtf5V8iycZ4C6QUT+d5HuicumVBkwADtp3Y4zqXWdNE8bg9wtxG4vf1D AYo+vSpaH8fftMqP7x3lIf2J1AAN42iR8W1ynCGZ6BksMsGu3tc= =8FqG -----END PGP SIGNATURE----- --=-=-=--