diff --git a/Formula/encfs.rb b/Formula/encfs.rb index d0f8b70a52..e288b7aa97 100644 --- a/Formula/encfs.rb +++ b/Formula/encfs.rb @@ -9,10 +9,45 @@ class Encfs < Formula depends_on 'gettext' depends_on 'boost' depends_on 'rlog' - depends_on 'fuse4x' + depends_on 'osxfuse' + + conflicts_with 'fuse4x' + + # Following patch and changes in install section, + # required for better compatibility with OSX, especially OSX 10.9. + # Changes are already in usptream and planned to be included in next stable release 1.75. + # For more details refer to: + # https://code.google.com/p/encfs/issues/detail?id=185#c10 + + def patches + # Fixes link times and xattr on links for OSX + DATA + end def install - inreplace "configure", "-lfuse", "-lfuse4x" + # Add correct flags for linkage with {osx,}fuse and gettext libs + ENV.append 'CPPFLAGS', %x[pkg-config fuse --cflags].chomp + "-I#{Formula.factory('gettext').include}" + ENV.append 'LDFLAGS', %x[pkg-config fuse --libs].chomp + "-L#{Formula.factory('gettext').lib}" + inreplace "configure", "-lfuse", "-losxfuse" + + # Adapt to changes in recent Xcode by making local copy of endian-ness definitions + system "mkdir encfs/sys" + system "cp \"$HOMEBREW_SDKROOT/usr/include/sys/_endian.h\" encfs/sys/endian.h" + + # Fix runtime "dyld: Symbol not found" errors + # Following 3 ugly inreplaces come instead of big patch + inreplace ["encfs/Cipher.cpp", "encfs/CipherFileIO.cpp", "encfs/NullCipher.cpp", + "encfs/NullNameIO.cpp", "encfs/SSL_Cipher.cpp"], "using boost::shared_ptr;", "" + + inreplace ["encfs/BlockNameIO.cpp", "encfs/Cipher.cpp", "encfs/CipherFileIO.cpp", + "encfs/Context.cpp", "encfs/DirNode.cpp", "encfs/encfs.cpp", + "encfs/encfsctl.cpp", "encfs/FileNode.cpp", "encfs/FileUtils.cpp", + "encfs/MACFileIO.cpp", "encfs/main.cpp", "encfs/makeKey.cpp", + "encfs/NameIO.cpp", "encfs/NullCipher.cpp", "encfs/NullNameIO.cpp", + "encfs/SSL_Cipher.cpp", "encfs/StreamNameIO.cpp", "encfs/test.cpp"], "shared_ptr<", "boost::shared_ptr<" + + inreplace ["encfs/Context.cpp", "encfs/encfsctl.cpp", "encfs/FileUtils.cpp"], "boost::boost::shared_ptr<", "boost::shared_ptr<" + system "./configure", "--disable-dependency-tracking", "--prefix=#{prefix}", "--with-boost=#{HOMEBREW_PREFIX}" @@ -21,8 +56,37 @@ class Encfs < Formula end def caveats; <<-EOS.undent - Make sure to follow the directions given by `brew info fuse4x-kext` + Make sure to follow the directions given by 'brew info osxfuse' before trying to use a FUSE-based filesystem. EOS end end + +__END__ + +--- a/encfs/encfs.cpp ++++ b/encfs/encfs.cpp +@@ -489,7 +489,11 @@ + + int _do_chmod(EncFS_Context *, const string &cipherPath, mode_t mode) + { ++#ifdef __APPLE__ ++ return lchmod( cipherPath.c_str(), mode ); ++#else + return chmod( cipherPath.c_str(), mode ); ++#endif + } + + int encfs_chmod(const char *path, mode_t mode) +@@ -706,7 +710,11 @@ + int _do_setxattr(EncFS_Context *, const string &cyName, + tuple data) + { ++#ifdef __APPLE__ ++ int options = XATTR_NOFOLLOW; ++#else + int options = 0; ++#endif + return ::setxattr( cyName.c_str(), data.get<0>(), data.get<1>(), + data.get<2>(), data.get<3>(), options ); + }