diff --git a/pkgs/tools/filesystems/e2fsprogs/default.nix b/pkgs/tools/filesystems/e2fsprogs/default.nix index b8443e8ac880..1c453fb95893 100644 --- a/pkgs/tools/filesystems/e2fsprogs/default.nix +++ b/pkgs/tools/filesystems/e2fsprogs/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, buildPackages, fetchurl, fetchpatch, pkg-config, libuuid, gettext, texinfo -, withFuse ? stdenv.isLinux, fuse3 +, withFuse ? stdenv.isLinux || stdenv.isDarwin, fuse3, macfuse-stubs , shared ? !stdenv.hostPlatform.isStatic , e2fsprogs, runCommand }: @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { depsBuildBuild = [ buildPackages.stdenv.cc ]; nativeBuildInputs = [ pkg-config texinfo ]; buildInputs = [ libuuid gettext ] - ++ lib.optionals withFuse [ fuse3 ]; + ++ lib.optional withFuse (if stdenv.isDarwin then macfuse-stubs else fuse3); patches = [ # Avoid trouble with older systems like NixOS 23.05. @@ -40,7 +40,7 @@ stdenv.mkDerivation rec { url = "https://lore.kernel.org/linux-ext4/20240527091542.4121237-2-hi@alyssa.is/raw"; hash = "sha256-pMoqm2eo5zYaTdU+Ppa4+posCVFb2A9S4uo5oApaaqc="; }) - ]; + ] ++ lib.optional stdenv.isDarwin ./macfuse.patch; configureFlags = if stdenv.isLinux then [ @@ -57,7 +57,7 @@ stdenv.mkDerivation rec { "--disable-uuidd" ] else [ "--enable-libuuid --disable-e2initrd-helper" - ]; + ] ++ lib.optional stdenv.isDarwin "CFLAGS=-D_FILE_OFFSET_BITS=64"; nativeCheckInputs = [ buildPackages.perl ]; doCheck = true; diff --git a/pkgs/tools/filesystems/e2fsprogs/macfuse.patch b/pkgs/tools/filesystems/e2fsprogs/macfuse.patch new file mode 100644 index 000000000000..2445958edd79 --- /dev/null +++ b/pkgs/tools/filesystems/e2fsprogs/macfuse.patch @@ -0,0 +1,20 @@ +--- a/misc/fuse2fs.c ++++ b/misc/fuse2fs.c +@@ -2441,7 +2441,7 @@ + #undef XATTR_TRANSLATOR + + static int op_getxattr(const char *path, const char *key, char *value, +- size_t len) ++ size_t len, uint32_t position EXT2FS_ATTR((unused))) + { + struct fuse_context *ctxt = fuse_get_context(); + struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; +@@ -2623,7 +2623,7 @@ + + static int op_setxattr(const char *path EXT2FS_ATTR((unused)), + const char *key, const char *value, +- size_t len, int flags EXT2FS_ATTR((unused))) ++ size_t len, int flags EXT2FS_ATTR((unused)), uint32_t position EXT2FS_ATTR((unused))) + { + struct fuse_context *ctxt = fuse_get_context(); + struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data;