summaryrefslogtreecommitdiff
path: root/gnu/build
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2021-12-15 23:06:46 +0100
committerMarius Bakke <marius@gnu.org>2021-12-16 22:21:13 +0100
commitf59bb27557ee8d115efb120292112387a6d23490 (patch)
tree5ac8aae02d3a2d2441bcddbe190429f0f2fcd66f /gnu/build
parentfdd71babc73a3e5706f6d0c7aed579971109cf3e (diff)
downloadguix-patches-f59bb27557ee8d115efb120292112387a6d23490.tar
guix-patches-f59bb27557ee8d115efb120292112387a6d23490.tar.gz
chromium-extension: Simplify builder code.
* gnu/build/chromium-extension.scm (chromium-json->profile-object): Remove variable. (file-sha256): New variable. (make-chromium-extension): Rename OUTPUT parameter to prevent conflict. Adjust other variable names for clarity. [inputs]: Clear. [arguments]: Inline and simplify the final transformation with a gexp.
Diffstat (limited to 'gnu/build')
-rw-r--r--gnu/build/chromium-extension.scm93
1 files changed, 37 insertions, 56 deletions
diff --git a/gnu/build/chromium-extension.scm b/gnu/build/chromium-extension.scm
index d65df09f37..81c68f25a6 100644
--- a/gnu/build/chromium-extension.scm
+++ b/gnu/build/chromium-extension.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -127,66 +127,47 @@ format."
"--outder")
#:local-build? #t))
-(define (chromium-json->profile-object json signing-key)
- "Return a derivation that installs JSON to the directory searched by
-Chromium, using a file name (aka extension ID) derived from SIGNING-KEY."
- (define der (signing-key->public-der signing-key))
-
+(define (file-sha256sum file)
(with-extensions (list guile-gcrypt)
- (with-imported-modules '((guix build utils))
- (computed-file
- "chromium-extension"
- #~(begin
- (use-modules (guix build utils)
- (gcrypt base16)
- (gcrypt hash))
- (define (base16-string->chromium-base16 str)
- ;; Translate STR, a hexadecimal string, to a Chromium-style
- ;; representation using the letters a-p (where a=0, p=15).
- (define s1 "0123456789abcdef")
- (define s2 "abcdefghijklmnop")
- (let loop ((chars (string->list str))
- (converted '()))
- (if (null? chars)
- (list->string (reverse converted))
- (loop (cdr chars)
- (cons (string-ref s2 (string-index s1 (car chars)))
- converted)))))
-
- (let* ((checksum (bytevector->base16-string (file-sha256 #$der)))
- (file-name (base16-string->chromium-base16
- (string-take checksum 32)))
- (extension-directory (string-append #$output
- "/share/chromium/extensions")))
- (mkdir-p extension-directory)
- (symlink #$json (string-append extension-directory "/"
- file-name ".json"))))
- #:local-build? #t))))
+ #~(begin
+ (use-modules (gcrypt base16) (gcrypt hash))
+ (bytevector->base16-string (file-sha256 #$file)))))
-(define* (make-chromium-extension p #:optional (output "out"))
- "Create a Chromium extension from package P and return a package that,
-when installed, will make the extension contained in P available as a
-Chromium browser extension. OUTPUT specifies which output of P to use."
- (let* ((pname (package-name p))
- (version (package-version p))
- (signing-key (make-signing-key pname)))
+(define* (make-chromium-extension pkg #:optional (pkg-output "out"))
+ "Create a Chromium extension from package PKG and return a package that,
+when installed, will make the extension contained in PKG available as a
+Chromium browser extension. PKG-OUTPUT specifies which output of PKG to use."
+ (let* ((name (package-name pkg))
+ (version (package-version pkg))
+ (private-key (make-signing-key name))
+ (public-key (signing-key->public-der private-key))
+ (checksum (file-sha256sum public-key))
+ (crx (make-crx private-key pkg pkg-output))
+ (json (crx->chromium-json crx version)))
(package
- (inherit p)
- (name (string-append pname "-chromium"))
+ (inherit pkg)
+ (name (string-append name "-chromium"))
(source #f)
- (build-system trivial-build-system)
(native-inputs '())
- (inputs
- `(("extension" ,(chromium-json->profile-object
- (crx->chromium-json (make-crx signing-key p output)
- version)
- signing-key))))
+ (inputs '())
(propagated-inputs '())
(outputs '("out"))
+ (build-system trivial-build-system)
(arguments
- '(#:modules ((guix build utils))
- #:builder
- (begin
- (use-modules (guix build utils))
- (copy-recursively (assoc-ref %build-inputs "extension")
- (assoc-ref %outputs "out"))))))))
+ (list #:modules '((guix build utils))
+ #:builder
+ #~(begin
+ (use-modules (guix build utils))
+ (define (base16-char->chromium-base16 char)
+ ;; Translate CHAR, a hexadecimal character, to a Chromium-style
+ ;; representation using the letters a-p (where a=0, p=15).
+ (string-ref "abcdefghijklmnop"
+ (string-index "0123456789abcdef" char)))
+ (let ((file-name (string-map base16-char->chromium-base16
+ (string-take #$checksum 32)))
+ (extension-directory
+ (string-append #$output
+ "/share/chromium/extensions")))
+ (mkdir-p extension-directory)
+ (symlink #$json (string-append extension-directory "/"
+ file-name ".json")))))))))