summary refs log tree commit diff
path: root/pkgs/tools/bootloaders/refind
diff options
context:
space:
mode:
authorJoachim Fasting <joachifm@fastmail.fm>2016-08-28 19:07:43 +0200
committerJoachim Fasting <joachifm@fastmail.fm>2016-09-01 14:51:32 +0200
commit191a85349b09a6b360c779ae05a980a8a8e48134 (patch)
treef8f4d2d092c309e4bb8bb0c41833ba6f33db677c /pkgs/tools/bootloaders/refind
parent8c90b7db89b4dbd9e29496e8a67a727d87357566 (diff)
downloadnixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar.gz
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar.bz2
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar.lz
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar.xz
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.tar.zst
nixpkgs-191a85349b09a6b360c779ae05a980a8a8e48134.zip
refind: refactorings
- Remove redundant build inputs
  These are (optional) run-time dependencies, adding them to build inputs
  does nothing.
- Use standard buildPhase
  Note that specifying linker script is unnecessary.  Also specify correct
  host arch and efi platform.
- Replace non-working ad-hoc patch with wrapper
  The ad-hoc patching of refind-install didn't actually substitute anything;
  with a wrapper script patching becomes unnecessary
- Remove use of deprecated meta.version

Closes https://github.com/NixOS/nixpkgs/pull/18103
Diffstat (limited to 'pkgs/tools/bootloaders/refind')
-rw-r--r--pkgs/tools/bootloaders/refind/default.nix82
1 files changed, 49 insertions, 33 deletions
diff --git a/pkgs/tools/bootloaders/refind/default.nix b/pkgs/tools/bootloaders/refind/default.nix
index 5121ecc9477..ecc6bec3005 100644
--- a/pkgs/tools/bootloaders/refind/default.nix
+++ b/pkgs/tools/bootloaders/refind/default.nix
@@ -1,15 +1,23 @@
-{ stdenv, fetchurl, fetchpatch
-, gnu-efi, efibootmgr, dosfstools, imagemagick }:
+{ stdenv, fetchurl, fetchpatch, gnu-efi }:
 
-assert (stdenv.system == "x86_64-linux" ||stdenv.system == "i686-linux");
+let
+  archids = {
+    "x86_64-linux" = { hostarch = "x86_64"; efiPlatform = "x64"; };
+    "i686-linux" = rec { hostarch = "ia32"; efiPlatform = hostarch; };
+  };
 
-stdenv.mkDerivation rec {
+  inherit
+    (archids.${stdenv.system} or (throw "unsupported system: ${stdenv.system}"))
+    hostarch efiPlatform;
+in
 
-  name = "refind-${meta.version}";
-  srcName = "refind-src-${meta.version}";
+stdenv.mkDerivation rec {
+  name = "refind-${version}";
+  version = "0.10.3";
+  srcName = "refind-src-${version}";
 
   src = fetchurl {
-    url = "mirror://sourceforge/project/refind/${meta.version}/${srcName}.tar.gz";
+    url = "mirror://sourceforge/project/refind/${version}/${srcName}.tar.gz";
     sha256 = "1r2qp29mz08lx36i7x52i2598773bxvfhwryd954ssq2baifjav5";
   };
 
@@ -21,33 +29,31 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  buildInputs = [ gnu-efi efibootmgr dosfstools imagemagick ];
+  buildInputs = [ gnu-efi ];
 
   hardeningDisable = [ "stackprotector" ];
 
-  HOSTARCH =
-    if stdenv.system == "x86_64-linux" then "x64"
-    else if stdenv.system == "i686-linux" then "ia32"
-    else "null";
-
   postPatch = ''
     sed -e 's|-DEFI_FUNCTION_WRAPPER|-DEFI_FUNCTION_WRAPPER -maccumulate-outgoing-args|g' -i Make.common
     sed -e 's|-DEFIX64|-DEFIX64 -maccumulate-outgoing-args|g' -i Make.common
     sed -e 's|-m64|-maccumulate-outgoing-args -m64|g' -i filesystems/Make.gnuefi
   '';
 
-  buildPhase =
-    let ldScript =
-      if stdenv.system == "x86_64-linux" then "elf_x86_64_efi.lds"
-      else if stdenv.system == "i686-linux" then "elf_ia32_efi.lds" else "null";
-    in ''
-      make prefix= EFIINC=${gnu-efi}/include/efi EFILIB=${gnu-efi}/lib GNUEFILIB=${gnu-efi}/lib EFICRT0=${gnu-efi}/lib LDSCRIPT=${gnu-efi}/lib/${ldScript} gnuefi fs_gnuefi
-    '';
+  makeFlags =
+    [ "prefix="
+      "EFIINC=${gnu-efi}/include/efi"
+      "EFILIB=${gnu-efi}/lib"
+      "GNUEFILIB=${gnu-efi}/lib"
+      "EFICRT0=${gnu-efi}/lib"
+      "HOSTARCH=${hostarch}"
+    ];
+
+  buildFlags = [ "gnuefi" "fs_gnuefi" ];
 
   installPhase = ''
     install -d $out/bin/
-    install -d $out/share/refind/drivers_${HOSTARCH}/
-    install -d $out/share/refind/tools_${HOSTARCH}/
+    install -d $out/share/refind/drivers_${efiPlatform}/
+    install -d $out/share/refind/tools_${efiPlatform}/
     install -d $out/share/refind/docs/html/
     install -d $out/share/refind/docs/Styles/
     install -d $out/share/refind/fonts/
@@ -56,16 +62,16 @@ stdenv.mkDerivation rec {
     install -d $out/share/refind/keys/
 
     # refind uefi app
-    install -D -m0644 refind/refind_${HOSTARCH}.efi $out/share/refind/refind_${HOSTARCH}.efi
+    install -D -m0644 refind/refind_${efiPlatform}.efi $out/share/refind/refind_${efiPlatform}.efi
 
     # uefi drivers
-    install -D -m0644 drivers_${HOSTARCH}/*.efi $out/share/refind/drivers_${HOSTARCH}/
+    install -D -m0644 drivers_${efiPlatform}/*.efi $out/share/refind/drivers_${efiPlatform}/
 
     # uefi apps
-    install -D -m0644 gptsync/gptsync_${HOSTARCH}.efi $out/share/refind/tools_${HOSTARCH}/gptsync_${HOSTARCH}.efi
+    install -D -m0644 gptsync/gptsync_${efiPlatform}.efi $out/share/refind/tools_${efiPlatform}/gptsync_${efiPlatform}.efi
 
     # helper scripts
-    install -D -m0755 refind-install $out/bin/refind-install
+    install -D -m0755 refind-install $out/share/refind/refind-install
     install -D -m0755 mkrlconf $out/bin/refind-mkrlconf
     install -D -m0755 mvrefind $out/bin/refind-mvrefind
     install -D -m0755 fonts/mkfont.sh $out/bin/refind-mkfont
@@ -94,16 +100,26 @@ stdenv.mkDerivation rec {
     # keys
     install -D -m0644 keys/* $out/share/refind/keys/
 
-    # fix sharp-bang paths
-    patchShebangs $out/bin/refind-*
-
-    # Post-install fixes
-    sed -e "s|^ThisDir=.*|ThisDir=$out/share/refind/|g" -i $out/bin/refind-install
-    sed -e "s|^RefindDir=.*|RefindDir=$out/share/refind/|g" -i $out/bin/refind-install
+    # The refind-install script assumes that all resource files are
+    # installed under the same directory as the script itself. To avoid
+    # having to patch around this assumption, generate a wrapper that
+    # cds into $out/share/refind and executes the real script from
+    # there.
+    cat >$out/bin/refind-install <<EOF
+#! ${stdenv.shell}
+cd $out/share/refind && exec -a $out/bin/refind-install ./refind-install \$*
+EOF
+    chmod +x $out/bin/refind-install
+
+    # Patch uses of `which`.  We could patch in calls to efibootmgr,
+    # openssl, convert, and openssl, but that would greatly enlarge
+    # refind's closure (from ca 28MB to over 400MB).
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/share/refind/refind-install
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mvrefind
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mkfont
   '';
 
   meta = with stdenv.lib; {
-    version = "0.10.3";
     description = "A graphical {,U}EFI boot manager";
     longDescription = ''
       rEFInd is a graphical boot manager for EFI- and UEFI-based