about summary refs log tree commit diff
path: root/pkgs/tools/filesystems/ntfs-3g
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/filesystems/ntfs-3g')
-rw-r--r--pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch98
-rw-r--r--pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch48
-rw-r--r--pkgs/tools/filesystems/ntfs-3g/default.nix41
3 files changed, 171 insertions, 16 deletions
diff --git a/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch b/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch
new file mode 100644
index 000000000000..5e896063ba6a
--- /dev/null
+++ b/pkgs/tools/filesystems/ntfs-3g/autoconf-sbin-helpers.patch
@@ -0,0 +1,98 @@
+diff --git a/configure.ac b/configure.ac
+index 9aa25bd5..c7c0437b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -185,6 +185,30 @@ AC_ARG_ENABLE(
+ 	]
+ )
+ 
++AC_ARG_WITH(
++	[mount-helper],
++	[AS_HELP_STRING([--with-mount-helper=BIN],[use the specified binary as mount helper @<:@default=/sbin/mount@:>@])],
++	[mount_helper="$withval"],
++	[mount_helper="/sbin/mount"]
++)
++AC_DEFINE_UNQUOTED([MOUNT_HELPER], ["$mount_helper"], [Binary used as mount helper.])
++
++AC_ARG_WITH(
++	[umount-helper],
++	[AS_HELP_STRING([--with-umount-helper=BIN],[use the specified binary as umount helper @<:@default=/sbin/umount@:>@])],
++	[umount_helper="$withval"],
++	[umount_helper="/sbin/umount"]
++)
++AC_DEFINE_UNQUOTED([UMOUNT_HELPER], ["$umount_helper"], [Binary used as umount helper.])
++
++AC_ARG_WITH(
++	[modprobe-helper],
++	[AS_HELP_STRING([--with-modprobe-helper=BIN],[use the specified binary as modprobe helper @<:@default=/sbin/modprobe@:>@])],
++	[modprobe_helper="$withval"],
++	[modprobe_helper="/sbin/modprobe"]
++)
++AC_DEFINE_UNQUOTED([MODPROBE_HELPER], ["$modprobe_helper"], [Binary used as modprobe helper.])
++
+ # pthread_rwlock_t requires _GNU_SOURCE
+ AC_GNU_SOURCE
+ 
+diff --git a/libfuse-lite/mount_util.c b/libfuse-lite/mount_util.c
+index 8b317224..ee75ace6 100644
+--- a/libfuse-lite/mount_util.c
++++ b/libfuse-lite/mount_util.c
+@@ -89,10 +89,10 @@ int fuse_mnt_add_mount(const char *progname, const char *fsname,
+             exit(1);
+         }
+         rmdir(tmp);
+-        execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts,
++        execle(MOUNT_HELPER, MOUNT_HELPER, "-F", type, "-o", opts,
+               fsname, mnt, NULL, &env);
+-        fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname,
+-                strerror(errno));
++        fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
++                MOUNT_HELPER, strerror(errno));
+         exit(1);
+     }
+     res = waitpid(res, &status, 0);
+@@ -126,14 +126,14 @@ int fuse_mnt_umount(const char *progname, const char *mnt, int lazy)
+ 
+         setuid(geteuid());
+         if (lazy) {
+-            execle("/sbin/umount", "/sbin/umount", mnt,
++            execle(UMOUNT_HELPER, UMOUNT_HELPER, mnt,
+                    NULL, &env);
+         } else {
+-            execle("/sbin/umount", "/sbin/umount", "-f", mnt,
++            execle(UMOUNT_HELPER, UMOUNT_HELPER, "-f", mnt,
+                    NULL, &env);
+         }
+-        fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname,
+-                strerror(errno));
++        fprintf(stderr, "%s: failed to execute %s: %s\n", progname,
++                UMOUNT_HELPER, strerror(errno));
+         exit(1);
+     }
+     res = waitpid(res, &status, 0);
+diff --git a/src/lowntfs-3g.c b/src/lowntfs-3g.c
+index 9330500c..dd18a93f 100644
+--- a/src/lowntfs-3g.c
++++ b/src/lowntfs-3g.c
+@@ -4463,7 +4463,7 @@ static fuse_fstype load_fuse_module(void)
+ 	int i;
+ 	struct stat st;
+ 	pid_t pid;
+-	const char *cmd = "/sbin/modprobe";
++	const char *cmd = MODPROBE_HELPER;
+ 	char *env = (char*)NULL;
+ 	struct timespec req = { 0, 100000000 };   /* 100 msec */
+ 	fuse_fstype fstype;
+diff --git a/src/ntfs-3g.c b/src/ntfs-3g.c
+index d8227e71..f5d77252 100644
+--- a/src/ntfs-3g.c
++++ b/src/ntfs-3g.c
+@@ -4171,7 +4171,7 @@ static fuse_fstype load_fuse_module(void)
+ 	int i;
+ 	struct stat st;
+ 	pid_t pid;
+-	const char *cmd = "/sbin/modprobe";
++	const char *cmd = MODPROBE_HELPER;
+ 	char *env = (char*)NULL;
+ 	struct timespec req = { 0, 100000000 };   /* 100 msec */
+ 	fuse_fstype fstype;
diff --git a/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch b/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch
new file mode 100644
index 000000000000..29a35ecb1dd1
--- /dev/null
+++ b/pkgs/tools/filesystems/ntfs-3g/consistent-sbindir-usage.patch
@@ -0,0 +1,48 @@
+diff --git a/ntfsprogs/Makefile.am b/ntfsprogs/Makefile.am
+index 08228322..a390d8c7 100644
+--- a/ntfsprogs/Makefile.am
++++ b/ntfsprogs/Makefile.am
+@@ -165,7 +165,7 @@ extras:	libs $(EXTRA_PROGRAMS)
+ 
+ if ENABLE_MOUNT_HELPER
+ install-exec-hook:
+-	$(INSTALL) -d $(DESTDIR)/$(sbindir)
++	$(INSTALL) -d $(DESTDIR)$(sbindir)
+ 	$(LN_S) -f $(sbindir)/mkntfs $(DESTDIR)$(sbindir)/mkfs.ntfs
+ 
+ install-data-hook:
+@@ -173,7 +173,7 @@ install-data-hook:
+ 	$(LN_S) -f mkntfs.8 $(DESTDIR)$(man8dir)/mkfs.ntfs.8
+ 
+ uninstall-local:
+-	$(RM) -f $(DESTDIR)/sbin/mkfs.ntfs
++	$(RM) -f $(DESTDIR)$(sbindir)/mkfs.ntfs
+ 	$(RM) -f $(DESTDIR)$(man8dir)/mkfs.ntfs.8
+ endif
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 8d984083..ea407067 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -66,9 +66,9 @@ endif
+ 
+ if ENABLE_MOUNT_HELPER
+ install-exec-local:	install-rootbinPROGRAMS
+-	$(MKDIR_P) "$(DESTDIR)/sbin"
+-	$(LN_S) -f "$(rootbindir)/ntfs-3g" "$(DESTDIR)/sbin/mount.ntfs-3g"
+-	$(LN_S) -f "$(rootbindir)/lowntfs-3g" "$(DESTDIR)/sbin/mount.lowntfs-3g"
++	$(MKDIR_P) "$(DESTDIR)$(rootsbindir)"
++	$(LN_S) -f "$(rootbindir)/ntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.ntfs-3g"
++	$(LN_S) -f "$(rootbindir)/lowntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.lowntfs-3g"
+ 
+ install-data-local:	install-man8
+ 	$(LN_S) -f ntfs-3g.8 "$(DESTDIR)$(man8dir)/mount.ntfs-3g.8"
+@@ -76,7 +76,7 @@ install-data-local:	install-man8
+ 
+ uninstall-local:
+ 	$(RM) -f "$(DESTDIR)$(man8dir)/mount.ntfs-3g.8"
+-	$(RM) -f "$(DESTDIR)/sbin/mount.ntfs-3g" "$(DESTDIR)/sbin/mount.lowntfs-3g"
++	$(RM) -f "$(DESTDIR)$(rootsbindir)/mount.ntfs-3g" "$(DESTDIR)$(rootsbindir)/mount.lowntfs-3g"
+ endif
+ 
+ endif # ENABLE_NTFS_3G
diff --git a/pkgs/tools/filesystems/ntfs-3g/default.nix b/pkgs/tools/filesystems/ntfs-3g/default.nix
index de110f61dd81..fe0ae20f557b 100644
--- a/pkgs/tools/filesystems/ntfs-3g/default.nix
+++ b/pkgs/tools/filesystems/ntfs-3g/default.nix
@@ -1,30 +1,34 @@
-{ lib, stdenv, fetchurl, pkg-config, mount, libuuid
-, macfuse-stubs, DiskArbitration
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, gettext, mount, libuuid, kmod, macfuse-stubs, DiskArbitration
 , crypto ? false, libgcrypt, gnutls
 }:
 
 stdenv.mkDerivation rec {
   pname = "ntfs3g";
-  version = "2021.8.22";
+  version = "2022.5.17";
 
   outputs = [ "out" "dev" "man" "doc" ];
 
-  buildInputs = [ libuuid ] ++ lib.optionals crypto [ gnutls libgcrypt ]
+  src = fetchFromGitHub {
+    owner = "tuxera";
+    repo = "ntfs-3g";
+    rev = version;
+    sha256 = "sha256-xh8cMNIHeJ1rtk5zwOsmcxeedgZ3+MSiWn2UC7y+gtQ=";
+  };
+
+  buildInputs = [ gettext libuuid ]
+    ++ lib.optionals crypto [ gnutls libgcrypt ]
     ++ lib.optionals stdenv.isDarwin [ macfuse-stubs DiskArbitration ];
-  nativeBuildInputs = [ pkg-config ];
 
-  src = fetchurl {
-    url = "https://tuxera.com/opensource/ntfs-3g_ntfsprogs-${version}.tgz";
-    sha256 = "55b883aa05d94b2ec746ef3966cb41e66bed6db99f22ddd41d1b8b94bb202efb";
-  };
+  # Note: libgcrypt is listed here non-optionally because its m4 macros are
+  # being used in ntfs-3g's configure.ac.
+  nativeBuildInputs = [ autoreconfHook libgcrypt pkg-config ];
 
-  patchPhase = ''
-    substituteInPlace src/Makefile.in --replace /sbin '@sbindir@'
-    substituteInPlace ntfsprogs/Makefile.in --replace /sbin '@sbindir@'
-    substituteInPlace libfuse-lite/mount_util.c \
-      --replace /bin/mount ${mount}/bin/mount \
-      --replace /bin/umount ${mount}/bin/umount
-  '';
+  patches = [
+    # https://github.com/tuxera/ntfs-3g/pull/39
+    ./autoconf-sbin-helpers.patch
+    ./consistent-sbindir-usage.patch
+  ];
 
   configureFlags = [
     "--disable-ldconfig"
@@ -34,6 +38,9 @@ stdenv.mkDerivation rec {
     "--enable-xattr-mappings"
     "--${if crypto then "enable" else "disable"}-crypto"
     "--enable-extras"
+    "--with-mount-helper=${mount}/bin/mount"
+    "--with-umount-helper=${mount}/bin/umount"
+    "--with-modprobe-helper=${kmod}/bin/modprobe"
   ];
 
   postInstall =
@@ -42,6 +49,8 @@ stdenv.mkDerivation rec {
       ln -sv mount.ntfs-3g $out/sbin/mount.ntfs
     '';
 
+  enableParallelBuilding = true;
+
   meta = with lib; {
     homepage = "https://github.com/tuxera/ntfs-3g";
     description = "FUSE-based NTFS driver with full write support";