summary refs log tree commit diff
path: root/pkgs/tools/misc/grub/2.0x.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/misc/grub/2.0x.nix')
-rw-r--r--pkgs/tools/misc/grub/2.0x.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/pkgs/tools/misc/grub/2.0x.nix b/pkgs/tools/misc/grub/2.0x.nix
new file mode 100644
index 000000000000..4186a4405353
--- /dev/null
+++ b/pkgs/tools/misc/grub/2.0x.nix
@@ -0,0 +1,91 @@
+{ fetchurl, stdenv, flex, bison, gettext, ncurses, libusb, freetype, qemu
+, devicemapper, EFIsupport ? false }:
+
+let
+
+  prefix = "grub${if EFIsupport then "-efi" else ""}";
+  
+  version = "2.00";
+  
+  unifont_bdf = fetchurl {
+    url = "http://unifoundry.com/unifont-5.1.20080820.bdf.gz";
+    sha256 = "0s0qfff6n6282q28nwwblp5x295zd6n71kl43xj40vgvdqxv0fxx";
+  };
+  
+in
+
+stdenv.mkDerivation rec {
+  name = "${prefix}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/grub/grub-${version}.tar.xz";
+    sha256 = "0n64hpmsccvicagvr0c6v0kgp2yw0kgnd3jvsyd26cnwgs7c6kkq";
+  };
+
+  buildNativeInputs = [ flex bison ];
+  buildInputs = [ ncurses libusb freetype gettext devicemapper ]
+    ++ stdenv.lib.optional doCheck qemu;
+
+  preConfigure =
+    '' for i in "tests/util/"*.in
+       do
+         sed -i "$i" -e's|/bin/bash|/bin/sh|g'
+       done
+
+       # Apparently, the QEMU executable is no longer called
+       # `qemu-system-i386', even on i386.
+       #
+       # In addition, use `-nodefaults' to avoid errors like:
+       #
+       #  chardev: opening backend "stdio" failed
+       #  qemu: could not open serial device 'stdio': Invalid argument
+       #
+       # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
+       sed -i "tests/util/grub-shell.in" \
+           -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
+    '';
+
+  prePatch =
+    '' gunzip < "${unifont_bdf}" > "unifont.bdf"
+       sed -i "configure" \
+           -e "s|/usr/src/unifont.bdf|$PWD/unifont.bdf|g"
+    '';
+
+  configureFlags =
+    let arch = if stdenv.system == "i686-linux" then "i386"
+               else if stdenv.system == "x86_64-linux" then "x86_64"
+               else throw "unsupported EFI firmware architecture";
+    in
+      stdenv.lib.optionals EFIsupport
+        [ "--with-platform=efi" "--target=${arch}" "--program-prefix=" ];
+
+  doCheck = false;
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "GNU GRUB, the Grand Unified Boot Loader (2.x beta)";
+
+    longDescription =
+      '' 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).
+      '';
+
+    homepage = http://www.gnu.org/software/grub/;
+
+    license = "GPLv3+";
+
+    maintainers = with stdenv.lib.maintainers; [ ludo shlevy ];
+
+    platforms = if EFIsupport then
+      [ "i686-linux" "x86_64-linux" ]
+    else
+      stdenv.lib.platforms.gnu;
+  };
+}