sshfs: add darwin build
This commit is contained in:
parent
239d8e2517
commit
87f578a36f
@ -56,4 +56,10 @@ stdenv.mkDerivation rec {
|
||||
lgpl2Plus # libfuse
|
||||
];
|
||||
};
|
||||
|
||||
passthru.warning = ''
|
||||
macFUSE is required for this package to work on macOS. To install macFUSE,
|
||||
use the installer from the <link xlink:href="https://osxfuse.github.io/">
|
||||
project website</link>.
|
||||
'';
|
||||
}
|
||||
|
61
pkgs/tools/filesystems/sshfs-fuse/common.nix
Normal file
61
pkgs/tools/filesystems/sshfs-fuse/common.nix
Normal file
@ -0,0 +1,61 @@
|
||||
{ version, sha256, platforms, patches ? [ ] }:
|
||||
|
||||
{ lib, stdenv, fetchFromGitHub
|
||||
, meson, pkg-config, ninja, docutils, makeWrapper
|
||||
, fuse3, macfuse-stubs, glib
|
||||
, which, python3Packages
|
||||
, openssh
|
||||
}:
|
||||
|
||||
let
|
||||
fuse = if stdenv.isDarwin then macfuse-stubs else fuse3;
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "sshfs-fuse";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libfuse";
|
||||
repo = "sshfs";
|
||||
rev = "sshfs-${version}";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
inherit patches;
|
||||
|
||||
nativeBuildInputs = [ meson pkg-config ninja docutils makeWrapper ];
|
||||
buildInputs = [ fuse glib ];
|
||||
checkInputs = [ which python3Packages.pytest ];
|
||||
|
||||
NIX_CFLAGS_COMPILE = lib.optionalString
|
||||
(stdenv.hostPlatform.system == "i686-linux")
|
||||
"-D_FILE_OFFSET_BITS=64";
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/sbin
|
||||
ln -sf $out/bin/sshfs $out/sbin/mount.sshfs
|
||||
'' + lib.optionalString (!stdenv.isDarwin) ''
|
||||
wrapProgram $out/bin/sshfs --prefix PATH : "${openssh}/bin"
|
||||
'';
|
||||
|
||||
# doCheck = true;
|
||||
checkPhase = lib.optionalString (!stdenv.isDarwin) ''
|
||||
# The tests need fusermount:
|
||||
mkdir bin
|
||||
cp ${fuse}/bin/fusermount3 bin/fusermount
|
||||
export PATH=bin:$PATH
|
||||
# Can't access /dev/fuse within the sandbox: "FUSE kernel module does not seem to be loaded"
|
||||
substituteInPlace test/util.py --replace "/dev/fuse" "/dev/null"
|
||||
# TODO: "fusermount executable not setuid, and we are not root"
|
||||
# We should probably use a VM test instead
|
||||
${python3Packages.python.interpreter} -m pytest test/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
inherit platforms;
|
||||
description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH";
|
||||
longDescription = macfuse-stubs.warning;
|
||||
homepage = "https://github.com/libfuse/sshfs";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ primeos ];
|
||||
};
|
||||
}
|
@ -1,52 +1,28 @@
|
||||
{ lib, stdenv, fetchFromGitHub
|
||||
, meson, pkg-config, ninja, docutils, makeWrapper
|
||||
, fuse3, glib
|
||||
, which, python3Packages
|
||||
, openssh
|
||||
}:
|
||||
{ lib, stdenv, callPackage, fetchpatch }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "3.7.1";
|
||||
pname = "sshfs-fuse";
|
||||
let mkSSHFS = args: callPackage (import ./common.nix args) { };
|
||||
in if stdenv.isDarwin then
|
||||
mkSSHFS {
|
||||
version = "2.10"; # macFUSE isn't yet compatible with libfuse 3.x
|
||||
sha256 = "1dmw4kx6vyawcywiv8drrajnam0m29mxfswcp4209qafzx3mjlp1";
|
||||
patches = [
|
||||
# remove reference to fuse_darwin.h which doens't exist on recent macFUSE
|
||||
./fix-fuse-darwin-h.patch
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libfuse";
|
||||
repo = "sshfs";
|
||||
rev = "sshfs-${version}";
|
||||
# From https://github.com/libfuse/sshfs/pull/185:
|
||||
# > With this patch, setting I/O size to a reasonable large value, will
|
||||
# > result in much improved performance, e.g.: -o iosize=1048576
|
||||
(fetchpatch {
|
||||
name = "fix-configurable-blksize.patch";
|
||||
url = "https://github.com/libfuse/sshfs/commit/667cf34622e2e873db776791df275c7a582d6295.patch";
|
||||
sha256 = "0d65lawd2g2aisk1rw2vl65dgxywf4vqgv765n9zj9zysyya8a54";
|
||||
})
|
||||
];
|
||||
platforms = lib.platforms.darwin;
|
||||
}
|
||||
else
|
||||
mkSSHFS {
|
||||
version = "3.7.1";
|
||||
sha256 = "088mgcsqv9f2vly4xn6lvvkmqkgr9jjmjs9qp8938hl7j6rrgd17";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson pkg-config ninja docutils makeWrapper ];
|
||||
buildInputs = [ fuse3 glib ];
|
||||
checkInputs = [ which python3Packages.pytest ];
|
||||
|
||||
NIX_CFLAGS_COMPILE = lib.optionalString
|
||||
(stdenv.hostPlatform.system == "i686-linux")
|
||||
"-D_FILE_OFFSET_BITS=64";
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/sbin
|
||||
ln -sf $out/bin/sshfs $out/sbin/mount.sshfs
|
||||
wrapProgram $out/bin/sshfs --prefix PATH : "${openssh}/bin"
|
||||
'';
|
||||
|
||||
#doCheck = true;
|
||||
checkPhase = ''
|
||||
# The tests need fusermount:
|
||||
mkdir bin && cp ${fuse3}/bin/fusermount3 bin/fusermount
|
||||
export PATH=bin:$PATH
|
||||
# Can't access /dev/fuse within the sandbox: "FUSE kernel module does not seem to be loaded"
|
||||
substituteInPlace test/util.py --replace "/dev/fuse" "/dev/null"
|
||||
# TODO: "fusermount executable not setuid, and we are not root"
|
||||
# We should probably use a VM test instead
|
||||
python3 -m pytest test/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
inherit (src.meta) homepage;
|
||||
description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH";
|
||||
platforms = platforms.linux;
|
||||
license = licenses.gpl2;
|
||||
maintainers = with maintainers; [ primeos ];
|
||||
};
|
||||
}
|
||||
platforms = lib.platforms.linux;
|
||||
}
|
||||
|
14
pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
Normal file
14
pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
Normal file
@ -0,0 +1,14 @@
|
||||
diff --git a/sshfs.c b/sshfs.c
|
||||
index 97eaf06..d442577 100644
|
||||
--- a/sshfs.c
|
||||
+++ b/sshfs.c
|
||||
@@ -14,9 +14,6 @@
|
||||
#if !defined(__CYGWIN__)
|
||||
#include <fuse_lowlevel.h>
|
||||
#endif
|
||||
-#ifdef __APPLE__
|
||||
-# include <fuse_darwin.h>
|
||||
-#endif
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
Loading…
Reference in New Issue
Block a user