aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/encfs.rb
blob: 53d5bfbefb5fa82e537701c9e0bdd9db04e6cfe6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
require 'formula'

class Encfs < Formula
  homepage 'https://vgough.github.io/encfs/'
  revision 1

  stable do
    url 'https://github.com/vgough/encfs/archive/v1.7.5.tar.gz'
    sha1 'f8bb2332b7a88f510cd9a18adb0f4fb903283edd'

    # Fix link times and xattr on links for OSX
    # Proper fix is already in upstream/dev
    patch :DATA

    # Fix pod2man errors
    # https://github.com/vgough/encfs/issues/28
    patch do
      url "https://github.com/vgough/encfs/commit/61dc26fd8b3630e31e7ae8202ef9f31f1a4f9644.diff"
      sha1 "beaa7214b9cbd2e5c1680bca1bd72d5a6398420e"
    end

    patch do
      url "https://github.com/vgough/encfs/commit/5fa5f02109855446c9d96b11ae8a2ee56f921595.diff"
      sha1 "4b229f3172a2d68f2f61cef57569d918b7b95bc5"
    end
  end

  head 'https://github.com/vgough/encfs.git'

  bottle do
    sha1 "4e09e41ac19b52a14ea58644d6a3fcb61fdaea64" => :mavericks
    sha1 "ef7ea8cb89515be5e19b45a0af8704e65acbb150" => :mountain_lion
    sha1 "559bbec86eb4176fad7cb28368cc462f6470157f" => :lion
  end

  depends_on 'pkg-config' => :build
  depends_on 'autoconf' => :build
  depends_on 'automake' => :build
  depends_on 'libtool' => :build
  depends_on 'intltool' => :build
  depends_on 'gettext' => :build
  depends_on 'boost'
  depends_on 'rlog'
  depends_on 'openssl'
  depends_on :osxfuse
  depends_on 'xz'

  def install
    # Fix linkage with gettext libs
    # Proper fix is already in upstream/master
    # Adapt to changes in recent Xcode by making local copy of endian-ness definitions
    mkdir "encfs/sys"
    cp "#{MacOS.sdk_path}/usr/include/sys/_endian.h", "encfs/sys/endian.h"

    if build.stable?
      inreplace "configure.ac", "LIBINTL=-lgettextlib", "LIBINTL=-lgettextlib -lintl"

      # Fix runtime "dyld: Symbol not found" errors
      # Following 3 ugly inreplaces are temporary solution
      # Proper fix is already in upstream
      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<"
    end

    system "make", "-f", "Makefile.dist"
    # This provides a workaround for https://github.com/vgough/encfs/issues/18
    # osxfuse's installation directory cannot be given as a parameter to configure script
    inreplace "configure", "/usr/include/osxfuse /usr/local/include/osxfuse",
      "/usr/include/osxfuse /usr/local/include/osxfuse #{HOMEBREW_PREFIX}/include/osxfuse"
    system "./configure", "--disable-dependency-tracking",
                          "--prefix=#{prefix}",
                          "--with-boost=#{HOMEBREW_PREFIX}"
    system "make"
    system "make install"
  end

  test do
    if Pathname.new("/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs").exist?
      (testpath/"print-password").write("#!/bin/sh\necho password")
      chmod 0755, testpath/"print-password"
      system "yes | #{bin}/encfs --standard --extpass=#{testpath}/print-password #{testpath}/a #{testpath}/b"
      system "umount", testpath/"b"
    end
  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<const char *, const char *, size_t, uint32_t> 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 );
 }