diff options
author | Giacomo Leidi <goodoldpaul@autistici.org> | 2023-05-19 01:04:31 +0200 |
---|---|---|
committer | Jonathan Brielmaier <jonathan.brielmaier@web.de> | 2023-07-12 23:18:05 +0200 |
commit | f2970727de9bdbb503846705b53720660c14273b (patch) | |
tree | 1ffc4cb173978323c997065a030b173cd2f03434 /nonguix/build | |
parent | 5622013d28e16241b23155739925d2856022488d (diff) |
nonguix: Add chromium-binary-build-system.
This build system is an extension to the binary-build-system, designed
to abstract some common boilerplate necessary for packaging Chromium
based software.
* nonguix/build-system/chromium-binary.scm: New file;
* nonguix/build/chromium-binary-build-system.scm: new file;
* nonguix/build/utils.scm (build-paths-for-input): new variable;
(build-paths-from-inputs): New variable.
Signed-off-by: Jonathan Brielmaier <jonathan.brielmaier@web.de>
Diffstat (limited to 'nonguix/build')
-rw-r--r-- | nonguix/build/chromium-binary-build-system.scm | 75 | ||||
-rw-r--r-- | nonguix/build/utils.scm | 25 |
2 files changed, 99 insertions, 1 deletions
diff --git a/nonguix/build/chromium-binary-build-system.scm b/nonguix/build/chromium-binary-build-system.scm new file mode 100644 index 0000000..0fed9bf --- /dev/null +++ b/nonguix/build/chromium-binary-build-system.scm @@ -0,0 +1,75 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> + +(define-module (nonguix build chromium-binary-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module ((nonguix build binary-build-system) #:prefix binary:) + #:use-module (nonguix build utils) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:export (%standard-phases + chromium-binary-build)) + +;; Commentary: +;; +;; Builder-side code of the Chromium binary build procedure. +;; +;; Code: + +(define* (install-wrapper #:key inputs outputs #:allow-other-keys) + (let* ((output (assoc-ref outputs "out")) + (bin (string-append output "/bin")) + (fontconfig-minimal (assoc-ref inputs "fontconfig")) + (nss (assoc-ref inputs "nss")) + (wrap-inputs (map cdr inputs)) + (lib-directories + (build-paths-from-inputs '("lib") wrap-inputs)) + (bin-directories + (build-paths-from-inputs + '("bin" "sbin" "libexec") + wrap-inputs))) + (for-each + (lambda (exe) + (display (string-append "Wrapping " exe "\n")) + (wrap-program exe + `("FONTCONFIG_PATH" ":" prefix + (,(string-join + (list + (string-append fontconfig-minimal "/etc/fonts") + output) + ":"))) + `("PATH" ":" prefix + (,(string-join + (append + bin-directories + (list + bin)) + ":"))) + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (append + lib-directories + (list + (string-append nss "/lib/nss") + output)) + ":"))))) + (map + (lambda (exe) (string-append bin "/" exe)) + (filter + (lambda (exe) (not (string-prefix? "." exe))) + (scandir bin)))) + #t)) + +(define %standard-phases + ;; Everything is as with the binary-build-system except for the + ;; `install-wrapper' phase. + (modify-phases binary:%standard-phases + (add-after 'install 'install-wrapper install-wrapper))) + +(define* (chromium-binary-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; chromium-binary-build-system.scm ends here diff --git a/nonguix/build/utils.scm b/nonguix/build/utils.scm index fd92a12..e7d6966 100644 --- a/nonguix/build/utils.scm +++ b/nonguix/build/utils.scm @@ -1,15 +1,18 @@ ;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> +;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org> (define-module (nonguix build utils) #:use-module (ice-9 match) #:use-module (ice-9 binary-ports) #:use-module (guix build utils) + #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:export (64-bit? make-wrapper - concatenate-files)) + concatenate-files + build-paths-from-inputs)) (define (64-bit? file) "Return true if ELF file is in 64-bit format, false otherwise. @@ -94,3 +97,23 @@ contents: (call-with-output-file result (lambda (port) (for-each (cut dump <> port) files)))) + +(define build-paths-for-input + (lambda (dirs input) + (filter-map + (lambda (sub-directory) + (let ((directory + (string-append + input "/" sub-directory))) + (and + (directory-exists? directory) + directory))) + dirs))) + +(define build-paths-from-inputs + (lambda (dirs inputs) + (reduce append '() + (map + (lambda (input) + (build-paths-for-input dirs input)) + inputs)))) |