aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/john-jumbo.rb
blob: 2369833279b0b5924d0c25db79c2233e16d97e97 (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
require 'formula'

class JohnJumbo < Formula
  homepage 'http://www.openwall.com/john/'
  url 'http://www.openwall.com/john/g/john-1.7.9.tar.bz2'
  sha1 '8f77bdd42b7cf94ec176f55ea69c4da9b2b8fe3b'

  bottle do
    sha1 "e8e70d8faea2a658e13eedab50e47963ec4eee90" => :mavericks
    sha1 "ab7863263afde93de0e053e69600eabed08f372c" => :mountain_lion
    sha1 "b5fdd50dfc99f07f8afc1c6fa53f6afdc0c5684c" => :lion
  end

  conflicts_with 'john', :because => 'both install the same binaries'

  depends_on "openssl"

  patch do
    url "http://www.openwall.com/john/g/john-1.7.9-jumbo-7.diff.gz"
    sha1 "22fd8294e997f45a301cfeb65a8aa7083f25a55d"
  end

  # First patch taken from MacPorts, tells john where to find runtime files
  # Second patch protects against a redefinition of _mm_testz_si128 which
  # tanked the build in clang;
  # see https://github.com/Homebrew/homebrew/issues/26531
  patch :DATA

  fails_with :llvm do
    build 2334
    cause "Don't remember, but adding this to whitelist 2336."
  end

  def install
    ENV.deparallelize
    arch = MacOS.prefer_64_bit? ? "64-opencl" : "sse2-opencl"
    target = "macosx-x86-#{arch}"

    args = %W[-C src clean CC=#{ENV.cc} #{target}]

    if MacOS.version >= :snow_leopard
      case ENV.compiler
      when :clang
        # no openmp support
      when :gcc, :llvm
        args << "OMPFLAGS=-fopenmp -msse2 -D_FORTIFY_SOURCE=0"
      else
        args << "OMPFLAGS=-fopenmp -msse2"
      end
    end

    system "make", *args

    # Remove the README symlink and install the real file
    rm 'README'
    prefix.install 'doc/README'
    doc.install Dir['doc/*']

    # Only symlink the binary into bin
    (share/'john').install Dir['run/*']
    bin.install_symlink share/'john/john'

    # Source code defaults to 'john.ini', so rename
    mv share/'john/john.conf', share/'john/john.ini'
  end
end


__END__
--- a/src/params.h	2012-08-30 13:24:18.000000000 -0500
+++ b/src/params.h	2012-08-30 13:25:13.000000000 -0500
@@ -70,15 +70,15 @@
  * notes above.
  */
 #ifndef JOHN_SYSTEMWIDE
-#define JOHN_SYSTEMWIDE			0
+#define JOHN_SYSTEMWIDE			1
 #endif
 
 #if JOHN_SYSTEMWIDE
 #ifndef JOHN_SYSTEMWIDE_EXEC /* please refer to the notes above */
-#define JOHN_SYSTEMWIDE_EXEC		"/usr/libexec/john"
+#define JOHN_SYSTEMWIDE_EXEC		"HOMEBREW_PREFIX/share/john"
 #endif
 #ifndef JOHN_SYSTEMWIDE_HOME
-#define JOHN_SYSTEMWIDE_HOME		"/usr/share/john"
+#define JOHN_SYSTEMWIDE_HOME		"HOMEBREW_PREFIX/share/john"
 #endif
 #define JOHN_PRIVATE_HOME		"~/.john"
 #endif

diff --git a/src/rawSHA1_ng_fmt.c b/src/rawSHA1_ng_fmt.c
index 5f89cda..6cbd550 100644
--- a/src/rawSHA1_ng_fmt.c
+++ b/src/rawSHA1_ng_fmt.c
@@ -530,7 +530,7 @@ static void sha1_fmt_crypt_all(int count)
 
 #if defined(__SSE4_1__)
 
-# if !defined(__INTEL_COMPILER)
+# if !defined(__INTEL_COMPILER) && !defined(__clang__)
 // This intrinsic is not always available in GCC, so define it here.
 static inline int _mm_testz_si128 (__m128i __M, __m128i __V)
 {