gnu: sudo: Apply workaround to build system for MIPS.
[jackhill/guix/guix.git] / gnu / packages / grub.scm
index af9c135..fabbbc4 100644 (file)
   #:use-module (gnu packages)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages bison)
-  #:use-module ((gnu packages gettext) #:renamer (symbol-prefix-proc 'gnu:))
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages qemu)
   #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages cdrom))
+  #:use-module (gnu packages cdrom)
+  #:use-module (srfi srfi-1))
+
+(define qemu-for-tests
+  ;; Newer QEMU versions, such as 1.5.1, no longer support the 'shutdown'
+  ;; instruction.  This leads to test hangs, as reported at
+  ;; <https://bugs.launchpad.net/bugs/947597> and fixed at
+  ;; <http://bzr.savannah.gnu.org/lh/grub/trunk/grub/revision/4828>.
+  ;; Work around it by using an older QEMU.
+  (package (inherit qemu-headless)
+    (version "1.3.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://wiki.qemu-project.org/download/qemu-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "1bqfrb5dlsxm8gxhkksz8qzi5fhj3xqhxyfwbqcphhcv1kpyfwip"))))
+
+    ;; With recent GLib versions, we get a test failure:
+    ;;   ERROR:tests/rtc-test.c:176:check_time: assertion failed (ABS(t - s) <= wiggle): (382597824 <= 2)
+    ;; Simply disable the tests.
+    (arguments `(#:tests? #f
+                          ,@(package-arguments qemu)))
+
+    ;; The manual fails to build with Texinfo 5.x.
+    (native-inputs (alist-delete "texinfo" (package-native-inputs qemu)))))
 
 (define-public grub
   (package
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0n64hpmsccvicagvr0c6v0kgp2yw0kgnd3jvsyd26cnwgs7c6kkq"))))
+               "0n64hpmsccvicagvr0c6v0kgp2yw0kgnd3jvsyd26cnwgs7c6kkq"))
+             (patches (list (search-patch "grub-gets-undeclared.patch")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:patches (list (assoc-ref %build-inputs "patch/gets"))
-       #:configure-flags '("--disable-werror")
+     '(#:configure-flags '("--disable-werror")
        #:phases (alist-cons-before
                  'patch-source-shebangs 'patch-stuff
                  (lambda _
                  %standard-phases)))
     (inputs
      `(;; ("lvm2" ,lvm2)
-       ("gettext" ,gnu:gettext)
+       ("gettext" ,gnu-gettext)
        ("freetype" ,freetype)
        ;; ("libusb" ,libusb)
-       ("ncurses" ,ncurses)
-
-       ("patch/gets" ,(search-patch "grub-gets-undeclared.patch"))))
+       ("ncurses" ,ncurses)))
     (native-inputs
      `(("bison" ,bison)
        ("flex" ,flex)
 
        ;; Dependencies for the test suite.  The "real" QEMU is needed here,
        ;; because several targets are used.
-       ("qemu" ,qemu)
+       ("qemu" ,qemu-for-tests)
        ("xorriso" ,xorriso)))
     (home-page "http://www.gnu.org/software/grub/")
-    (synopsis "GRand unified boot loader")
+    (synopsis "GRand Unified Boot loader")
     (description
-     "GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand
-Unified Bootloader, which was originally designed and implemented by Erich
-Stefan Boleyn.
-
-Briefly, the boot loader is the first software program that runs when a
-computer starts.  It is responsible for loading and transferring control to
-the operating system kernel software (such as the Hurd or the Linux).  The
-kernel, in turn, initializes the rest of the operating system (e.g., GNU).")
+     "GRUB is a multiboot bootloader.  It is used for initially loading the
+kernel of an operating system and then transferring control to it. The kernel
+then goes on to load the rest of the operating system. As a multiboot
+bootloader, GRUB handles the presence of multiple operating systems installed
+on the same computer; upon booting the computer, the user is presented with a
+menu to select one of the installed operating systems.")
     (license gpl3+)))