From ffde82c9ecf99524220e463055f4f18c8c9e7a81 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 25 Oct 2016 00:58:26 +0200 Subject: system: grub: Use Guile-{RSVG,Cairo} instead of Inkscape + ImageMagick. Based on a suggestion by Andy Wingo at . * gnu/build/svg.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * gnu/system/grub.scm (svg->png): Add #:width and #:height. Rewrite to use (gnu build svg). (resize-image): Remove. (grub-background-image): Adjust accordingly. --- gnu/system/grub.scm | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index ead48f0e32..249b415ab4 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -27,9 +27,8 @@ #:use-module (gnu artwork) #:use-module (gnu system file-systems) #:autoload (gnu packages grub) (grub) - #:autoload (gnu packages inkscape) (inkscape) - #:autoload (gnu packages imagemagick) (imagemagick) #:autoload (gnu packages compression) (gzip) + #:autoload (gnu packages gtk) (guile-cairo guile-rsvg) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) @@ -132,25 +131,23 @@ object denoting a file name." ;;; Background image & themes. ;;; -(define (svg->png svg) - "Build a PNG from SVG." - ;; Don't use #:local-build? so that it's substitutable. +(define* (svg->png svg #:key width height) + "Build a PNG of HEIGHT x WIDTH from SVG." (gexp->derivation "grub-image.png" - #~(zero? - (system* (string-append #$inkscape "/bin/inkscape") - "--without-gui" - (string-append "--export-png=" #$output) - #$svg)))) - -(define (resize-image image width height) - "Resize IMAGE to WIDTHxHEIGHT." - ;; Don't use #:local-build? so that it's substitutable. - (let ((size (string-append (number->string width) - "x" (number->string height)))) - (gexp->derivation "grub-image.resized.png" - #~(zero? - (system* (string-append #$imagemagick "/bin/convert") - "-resize" #$size #$image #$output))))) + (with-imported-modules '((gnu build svg)) + #~(begin + ;; We need these two libraries. + (add-to-load-path (string-append #$guile-rsvg + "/share/guile/site/" + (effective-version))) + (add-to-load-path (string-append #$guile-cairo + "/share/guile/site/" + (effective-version))) + + (use-modules (gnu build svg)) + (svg->png #$svg #$output + #:width #$width + #:height #$height))))) (define* (grub-background-image config #:key (width 1024) (height 768)) "Return the GRUB background image defined in CONFIG with a ratio of @@ -160,8 +157,8 @@ WIDTH/HEIGHT, or #f if none was found." (= (grub-image-aspect-ratio image) ratio)) (grub-theme-images (grub-configuration-theme config))))) (if image - (mlet %store-monad ((png (svg->png (grub-image-file image)))) - (resize-image png width height)) + (svg->png (grub-image-file image) + #:width width #:height height) (with-monad %store-monad (return #f))))) -- cgit v1.2.3