class Zzuf < Formula
  desc "Transparent application input fuzzer"
  homepage "http://caca.zoy.org/wiki/zzuf"
  sha256 "0842c548522028c3e0d9c9cf7d09f6320b661f33824bb6df19ca209851bdf627"

  stable do
    url "https://github.com/samhocevar/zzuf/releases/download/v0.14/zzuf-0.14.tar.gz"
    sha256 "291b41d53ae6df75d0d2b4a0faa333adfc4a02b9ca8706bee47ef7be657966ce"
    # Fix missing semi-colon so compile succeeds
    patch do
      url "https://github.com/x9prototype/zzuf/pull/1.patch"
      sha256 "b312b949ab773ad531880f5f3484e1163910711301f5dba397440f84bffb2ac8"
    end
    # libasan so just disable it https://github.com/samhocevar/zzuf/issues/5
    patch :DATA
  end
  bottle do
    sha256 "a713556c18e8b3415bd4b8ee19e501f7764c15a7fc7c907eefeb09afc582ba5b" => :el_capitan
    sha256 "1a392bd97e6aaf5688d675d45f998d2b49a123c38e0bd4a5bee1f274644fc106" => :yosemite
    sha256 "a624ccb43655ab0ae5a78721f08a05fb8ffe0d6cecbfae3e07e088cd6a5b8315" => :mavericks
  end


  head do
    url "https://github.com/samhocevar/zzuf.git"

    depends_on "autoconf"   => :build
    depends_on "automake"   => :build
    depends_on "libtool"    => :build
    depends_on "pkg-config" => :build
  end

  conflicts_with "libzzip", :because => "both install `zzcat` binaries"

  def install
    system "./bootstrap" if build.head?
    system "./configure", "--disable-dependency-tracking",
                          "--prefix=#{prefix}"
    system "make", "install"
  end

  test do
    system "#{bin}/zzuf", "hd", "-vn", "32", "/dev/zero"
  end
end

__END__
diff --git a/src/libzzuf/sys.c b/src/libzzuf/sys.c
index 93f941e..1cc4109 100644
--- a/src/libzzuf/sys.c
+++ b/src/libzzuf/sys.c
@@ -51,7 +51,7 @@ void *_zz_dl_lib = RTLD_NEXT;
 static void insert_funcs(void);
 #endif

-#if __GNUC__ || __clang__
+#if HAVE_DLFCN_H && HAVE_DLADDR && !__APPLE__ && (__GNUC__ || __clang__)
 extern void __asan_init_v3(void) __attribute__((weak));
 #endif

@@ -61,13 +61,13 @@ void _zz_sys_init(void)

     insert_funcs();

-#elif defined HAVE_DLFCN_H
+#elif HAVE_DLFCN_H && !__APPLE__
     /* If glibc is recent enough, we use dladdr() to get its address. This
      * way we are sure that the symbols we load are the most recent version,
      * or we may get weird problems. We choose fileno as a random symbol to
      * get, because we know we don't divert it. */

-#   if __GNUC__ || __clang__
+#if HAVE_DLADDR && (__GNUC__ || __clang__)
     /* XXX: for some reason we conflict with libasan. We would like to avoid
      * RTLD_NEXT because it causes problems with versioned symbols. However,
      * if we do that, libasan enters infinite recursion. So we just disable
diff --git a/test/bug-mmap.c b/test/bug-mmap.c
index af371dc..7e07af0 100644
--- a/test/bug-mmap.c
+++ b/test/bug-mmap.c
@@ -32,7 +32,7 @@

 int main(void)
 {
-#if defined _SC_PAGE_SIZE
+#if defined _SC_PAGE_SIZE && defined MAP_POPULATE
     int fd = open("/etc/hosts", O_RDONLY);
     mmap(0, sysconf(_SC_PAGE_SIZE) * 2, PROT_READ,
          MAP_PRIVATE | MAP_POPULATE, fd, 0);