about summary refs log tree commit diff
path: root/pkgs/os-specific/linux/zfs
diff options
context:
space:
mode:
authorBen Wolsieffer <benwolsieffer@gmail.com>2018-12-21 17:26:34 -0500
committerBen Wolsieffer <benwolsieffer@gmail.com>2019-07-22 19:09:57 -0400
commit27e830fff99ae2d5547ffba96620679d7e03431d (patch)
treee63c46fbbe24aabec202dfca438554ac5d733479 /pkgs/os-specific/linux/zfs
parenta0dcccc67acde175554fd23ce36e93275cedcdf1 (diff)
downloadnixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar.gz
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar.bz2
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar.lz
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar.xz
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.tar.zst
nixlib-27e830fff99ae2d5547ffba96620679d7e03431d.zip
zfs: fix cross compilation
Diffstat (limited to 'pkgs/os-specific/linux/zfs')
-rw-r--r--pkgs/os-specific/linux/zfs/default.nix71
1 files changed, 32 insertions, 39 deletions
diff --git a/pkgs/os-specific/linux/zfs/default.nix b/pkgs/os-specific/linux/zfs/default.nix
index ce2f788338e3..03e11d1a8ed9 100644
--- a/pkgs/os-specific/linux/zfs/default.nix
+++ b/pkgs/os-specific/linux/zfs/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub, autoreconfHook, utillinux, nukeReferences, coreutils
-, perl
+, perl, buildPackages
 , configFile ? "all"
 
 # Userspace dependencies
@@ -43,53 +43,43 @@ let
 
       postPatch = optionalString buildKernel ''
         patchShebangs scripts
-      '' + optionalString stdenv.hostPlatform.isMusl ''
-        substituteInPlace config/user-libtirpc.m4 \
-          --replace /usr/include/tirpc ${libtirpc}/include/tirpc
-      '';
-
-      nativeBuildInputs = [ autoreconfHook nukeReferences ]
-        ++ optional buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
-      buildInputs = optionals buildUser [ zlib libuuid python3 attr ]
-        ++ optionals (buildUser) [ openssl ]
-        ++ optional stdenv.hostPlatform.isMusl [ libtirpc ];
-
-      # for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work
-      NIX_CFLAGS_LINK = "-lgcc_s";
-
-      hardeningDisable = [ "fortify" "stackprotector" "pic" ];
-
-      preConfigure = ''
-        substituteInPlace ./module/zfs/zfs_ctldir.c   --replace "umount -t zfs"           "${utillinux}/bin/umount -t zfs"
-        substituteInPlace ./module/zfs/zfs_ctldir.c   --replace "mount -t zfs"            "${utillinux}/bin/mount -t zfs"
-        substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/umount"             "${utillinux}/bin/umount"
-        substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/mount"              "${utillinux}/bin/mount"
+        # The arrays must remain the same length, so we repeat a flag that is
+        # already part of the command and therefore has no effect.
+        substituteInPlace ./module/zfs/zfs_ctldir.c --replace '"/usr/bin/env", "umount"' '"${utillinux}/bin/umount", "-n"' \
+                                                    --replace '"/usr/bin/env", "mount"'  '"${utillinux}/bin/mount", "-n"'
+      '' + optionalString buildUser ''
+        substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/umount"             "${utillinux}/bin/umount" \
+                                                      --replace "/bin/mount"              "${utillinux}/bin/mount"
         substituteInPlace ./lib/libshare/nfs.c        --replace "/usr/sbin/exportfs"      "${nfs-utils}/bin/exportfs"
-        substituteInPlace ./cmd/ztest/ztest.c         --replace "/usr/sbin/ztest"         "$out/sbin/ztest"
-        substituteInPlace ./cmd/ztest/ztest.c         --replace "/usr/sbin/zdb"           "$out/sbin/zdb"
         substituteInPlace ./config/user-systemd.m4    --replace "/usr/lib/modules-load.d" "$out/etc/modules-load.d"
         substituteInPlace ./config/zfs-build.m4       --replace "\$sysconfdir/init.d"     "$out/etc/init.d"
         substituteInPlace ./etc/zfs/Makefile.am       --replace "\$(sysconfdir)"          "$out/etc"
         substituteInPlace ./cmd/zed/Makefile.am       --replace "\$(sysconfdir)"          "$out/etc"
-        substituteInPlace ./module/Makefile.in        --replace "/bin/cp"                 "cp"
         substituteInPlace ./etc/systemd/system/zfs-share.service.in \
           --replace "/bin/rm " "${coreutils}/bin/rm "
 
-        for f in ./udev/rules.d/*
-        do
-          substituteInPlace "$f" --replace "/lib/udev/vdev_id" "$out/lib/udev/vdev_id"
-        done
         substituteInPlace ./cmd/vdev_id/vdev_id \
           --replace "PATH=/bin:/sbin:/usr/bin:/usr/sbin" \
           "PATH=${makeBinPath [ coreutils gawk gnused gnugrep systemd ]}"
-
-        ./autogen.sh
-        configureFlagsArray+=("--libexecdir=$out/libexec")
+      '' + optionalString stdenv.hostPlatform.isMusl ''
+        substituteInPlace config/user-libtirpc.m4 \
+          --replace /usr/include/tirpc ${libtirpc}/include/tirpc
       '';
 
+      nativeBuildInputs = [ autoreconfHook nukeReferences ]
+        ++ optionals buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
+      buildInputs = optionals buildUser [ zlib libuuid attr ]
+        ++ optionals (buildUser) [ openssl python3 ]
+        ++ optional stdenv.hostPlatform.isMusl libtirpc;
+
+      # for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work
+      NIX_CFLAGS_LINK = "-lgcc_s";
+
+      hardeningDisable = [ "fortify" "stackprotector" "pic" ];
+
       configureFlags = [
         "--with-config=${configFile}"
-        "--with-python=${python3.interpreter}"
+        (withFeatureAs buildUser "python" python3.interpreter)
       ] ++ optionals buildUser [
         "--with-dracutdir=$(out)/lib/dracut"
         "--with-udevdir=$(out)/lib/udev"
@@ -97,13 +87,16 @@ let
         "--with-systemdpresetdir=$(out)/etc/systemd/system-preset"
         "--with-systemdgeneratordir=$(out)/lib/systemd/system-generator"
         "--with-mounthelperdir=$(out)/bin"
+        "--libexecdir=$(out)/libexec"
         "--sysconfdir=/etc"
         "--localstatedir=/var"
         "--enable-systemd"
-      ] ++ optionals buildKernel [
+      ] ++ optionals buildKernel ([
         "--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
         "--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
-      ];
+      ] ++ kernel.makeFlags);
+
+      makeFlags = optionals buildKernel kernel.makeFlags;
 
       enableParallelBuilding = true;
 
@@ -112,9 +105,10 @@ let
         "DEFAULT_INITCONF_DIR=\${out}/default"
       ];
 
-      postInstall = ''
-        # Prevent kernel modules from depending on the Linux -dev output.
-        nuke-refs $(find $out -name "*.ko")
+      postInstall = optionalString buildKernel ''
+        # Add reference that cannot be detected due to compressed kernel module
+        mkdir -p "$out/nix-support"
+        echo "${utillinux}" >> "$out/nix-support/extra-refs"
       '' + optionalString buildUser ''
         # Remove provided services as they are buggy
         rm $out/etc/systemd/system/zfs-import-*.service
@@ -174,7 +168,6 @@ in {
     # incompatibleKernelVersion = "4.19";
 
     # this package should point to a version / git revision compatible with the latest kernel release
-    # This is now "stable". Move to zfsStable after it's tested more.
     version = "0.8.1";
 
     sha256 = "0wlbziijx08a9bmbyq4gfz4by9l5jrx44g18i99qnfm78k2q8a84";