summary refs log tree commit diff
path: root/pkgs/os-specific/linux/fuse/common.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific/linux/fuse/common.nix')
-rw-r--r--pkgs/os-specific/linux/fuse/common.nix58
1 files changed, 35 insertions, 23 deletions
diff --git a/pkgs/os-specific/linux/fuse/common.nix b/pkgs/os-specific/linux/fuse/common.nix
index 8938eaae8183..b18b6de0d140 100644
--- a/pkgs/os-specific/linux/fuse/common.nix
+++ b/pkgs/os-specific/linux/fuse/common.nix
@@ -1,8 +1,10 @@
 { version, sha256Hash, maintainers }:
 
 { stdenv, fetchFromGitHub, fetchpatch
-, utillinux, autoconf, automake, libtool, gettext
-, fusePackages }:
+, fusePackages, utillinux, gettext
+, autoconf, automake, libtool
+, meson, ninja, pkgconfig
+}:
 
 let
   isFuse3 = stdenv.lib.hasPrefix "3" version;
@@ -16,15 +18,25 @@ in stdenv.mkDerivation rec {
     sha256 = sha256Hash;
   };
 
-  patches = stdenv.lib.optional
-    (!isFuse3 && stdenv.isAarch64)
-    (fetchpatch {
-      url = "https://github.com/libfuse/libfuse/commit/914871b20a901e3e1e981c92bc42b1c93b7ab81b.patch";
-      sha256 = "1w4j6f1awjrycycpvmlv0x5v9gprllh4dnbjxl4dyl2jgbkaw6pa";
-  });
-
-  nativeBuildInputs = [ libtool autoconf automake ];
-  buildInputs = [ gettext utillinux ];
+  patches =
+    stdenv.lib.optional
+      (!isFuse3 && stdenv.isAarch64)
+      (fetchpatch {
+        url = "https://github.com/libfuse/libfuse/commit/914871b20a901e3e1e981c92bc42b1c93b7ab81b.patch";
+        sha256 = "1w4j6f1awjrycycpvmlv0x5v9gprllh4dnbjxl4dyl2jgbkaw6pa";
+      })
+    ++ stdenv.lib.optionals isFuse3 [
+      ./fuse3-no-udev.patch # only required for udevrulesdir
+      ./fuse3-install.patch
+      # install_man makes the build non-reproducible by encoding the date
+      ./fuse3-install_man.patch
+    ];
+
+
+  nativeBuildInputs = if isFuse3
+    then [ meson ninja pkgconfig ]
+    else [ autoconf automake libtool ];
+  buildInputs = stdenv.lib.optional (!isFuse3) gettext;
 
   outputs = [ "out" ] ++ stdenv.lib.optional isFuse3 "common";
 
@@ -39,27 +51,27 @@ in stdenv.mkDerivation rec {
     export NIX_CFLAGS_COMPILE="-DFUSERMOUNT_DIR=\"/run/wrappers/bin\""
 
     sed -e 's@/bin/@${utillinux}/bin/@g' -i lib/mount_util.c
-    sed -e 's@CONFIG_RPATH=/usr/share/gettext/config.rpath@CONFIG_RPATH=${gettext}/share/gettext/config.rpath@' -i makeconf.sh
-
-    ./makeconf.sh
-  '';
-
-  postFixup = if isFuse3 then ''
-    cd $out
-
+    '' + (if isFuse3 then ''
+      # The configure phase will delete these files (temporary workaround for
+      # ./fuse3-install_man.patch)
+      install -D -m444 doc/fusermount3.1 $out/share/man/man1/fusermount3.1
+      install -D -m444 doc/mount.fuse.8 $out/share/man/man8/mount.fuse.8
+    '' else ''
+      sed -e 's@CONFIG_RPATH=/usr/share/gettext/config.rpath@CONFIG_RPATH=${gettext}/share/gettext/config.rpath@' -i makeconf.sh
+      ./makeconf.sh
+    '');
+
+  postFixup = "cd $out\n" + (if isFuse3 then ''
     mv bin/mount.fuse3 bin/mount.fuse
-    mv etc/udev/rules.d/99-fuse3.rules etc/udev/rules.d/99-fuse.rules
 
     install -D -m555 bin/mount.fuse $common/bin/mount.fuse
     install -D -m444 etc/udev/rules.d/99-fuse.rules $common/etc/udev/rules.d/99-fuse.rules
     install -D -m444 share/man/man8/mount.fuse.8.gz $common/share/man/man8/mount.fuse.8.gz
   '' else ''
-    cd $out
-
     cp ${fusePackages.fuse_3.common}/bin/mount.fuse bin/mount.fuse
     cp ${fusePackages.fuse_3.common}/etc/udev/rules.d/99-fuse.rules etc/udev/rules.d/99-fuse.rules
     cp ${fusePackages.fuse_3.common}/share/man/man8/mount.fuse.8.gz share/man/man8/mount.fuse.8.gz
-  '';
+  '');
 
   enableParallelBuilding = true;