Skip to content

Instantly share code, notes, and snippets.

@qrush
Created March 12, 2016 16:09
Show Gist options
  • Select an option

  • Save qrush/ad5de2334d870be8cf2f to your computer and use it in GitHub Desktop.

Select an option

Save qrush/ad5de2334d870be8cf2f to your computer and use it in GitHub Desktop.

Revisions

  1. qrush created this gist Mar 12, 2016.
    181 changes: 181 additions & 0 deletions wine.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,181 @@
    # NOTE: When updating Wine, please check Wine-Gecko and Wine-Mono for updates
    # too:
    # - http://wiki.winehq.org/Gecko
    # - http://wiki.winehq.org/Mono
    class Wine < Formula
    desc "Wine Is Not an Emulator"
    homepage "https://www.winehq.org/"
    head "git://source.winehq.org/git/wine.git"

    stable do
    url "https://dl.winehq.org/wine/source/1.8/wine-1.8.tar.bz2"
    mirror "https://downloads.sourceforge.net/project/wine/Source/wine-1.8.tar.bz2"
    sha256 "f33b45c18112b2071fbf9edee0e8c575407f9e2a9855ca4ee918ed33efa7c6f4"
    end

    bottle do
    revision 1
    sha256 "53e26919518160d16b0a8df3772a67afc0ca67cfc925add2bc64f91c4a6cdac7" => :el_capitan
    sha256 "19bf33a8d93a20d55ea7906eb523f232beeb52dda7212bcc16c07db95c6eae98" => :yosemite
    sha256 "7a674fb6ce534c1ace457eec2040e9430ca4e831aaa0f18824972aa94a1355cf" => :mavericks
    end

    devel do
    url "https://dl.winehq.org/wine/source/1.9/wine-1.9.2.tar.bz2"
    mirror "https://downloads.sourceforge.net/project/wine/Source/wine-1.9.2.tar.bz2"
    sha256 "334d4d6a71ef2e4a385e01d05d66c1727cbe52646299378d19d203e645044e7a"
    end

    # note that all wine dependencies should declare a --universal option in their formula,
    # otherwise homebrew will not notice that they are not built universal
    def require_universal_deps?
    MacOS.prefer_64_bit?
    end

    # Wine will build both the Mac and the X11 driver by default, and you can switch
    # between them. But if you really want to build without X11, you can.
    depends_on :x11 => :recommended
    depends_on "pkg-config" => :build
    depends_on "freetype"
    depends_on "jpeg"
    depends_on "libgphoto2"
    depends_on "little-cms2"
    depends_on "libicns"
    depends_on "libtiff"
    depends_on "sane-backends"
    depends_on "gnutls"
    depends_on "libgsm" => :optional
    depends_on "samba" => :optional

    patch do
    url "https://gist.github.com/qrush/ebef2697b44b070b5d7f/raw/f95d34bfdf945e63f5811325a2abb692ddfd7f52/directx.patch"
    sha256 "bcb1077f7e91622cb3057ef671187f2ea6d3e1940b71134b8ad7632ef2f86d11"
    end

    # Patch to fix screen-flickering issues. Still relevant on 1.8.
    # https://bugs.winehq.org/show_bug.cgi?id=34166
    patch do
    url "https://bugs.winehq.org/attachment.cgi?id=52485"
    sha256 "59f1831a1b49c1b7a4c6e6af7e3f89f0bc60bec0bead645a615b251d37d232ac"
    end

    # Patch to fix texture compression issues. Still relevant on 1.8.
    # https://bugs.winehq.org/show_bug.cgi?id=14939
    patch do
    url "https://bugs.winehq.org/attachment.cgi?id=52384"
    sha256 "30766403f5064a115f61de8cacba1defddffe2dd898b59557956400470adc699"
    end

    # This option is currently disabled because Apple clang currently doesn't
    # support a required feature: http://reviews.llvm.org/D1623
    # It builds fine with GCC, however.
    # option "with-win64",
    # "Build with win64 emulator (won't run 32-bit binaries.)"

    resource "gecko" do
    url "https://downloads.sourceforge.net/wine/wine_gecko-2.40-x86.msi", :using => :nounzip
    sha256 "1a29d17435a52b7663cea6f30a0771f74097962b07031947719bb7b46057d302"
    end

    resource "mono" do
    url "https://downloads.sourceforge.net/wine/wine-mono-4.5.6.msi", :using => :nounzip
    sha256 "ac681f737f83742d786706529eb85f4bc8d6bdddd8dcdfa9e2e336b71973bc25"
    end

    fails_with :llvm do
    build 2336
    cause "llvm-gcc does not respect force_align_arg_pointer"
    end

    fails_with :clang do
    build 425
    cause "Clang prior to Xcode 5 miscompiles some parts of wine"
    end

    # These libraries are not specified as dependencies, or not built as 32-bit:
    # configure: libv4l, gstreamer-0.10, libcapi20, libgsm

    # Wine loads many libraries lazily using dlopen calls, so it needs these paths
    # to be searched by dyld.
    # Including /usr/lib because wine, as of 1.3.15, tries to dlopen
    # libncurses.5.4.dylib, and fails to find it without the fallback path.

    def library_path
    paths = %W[#{HOMEBREW_PREFIX}/lib /usr/lib]
    paths.unshift(MacOS::X11.lib) if build.with? "x11"
    paths.join(":")
    end

    def wine_wrapper; <<-EOS.undent
    #!/bin/sh
    DYLD_FALLBACK_LIBRARY_PATH="#{library_path}" "#{bin}/wine.bin" "$@"
    EOS
    end

    def install
    ENV.m32 # Build 32-bit; Wine doesn't support 64-bit host builds on OS X.

    # Help configure find libxml2 in an XCode only (no CLT) installation.
    ENV.libxml2

    args = ["--prefix=#{prefix}"]
    args << "--disable-win16" if MacOS.version <= :leopard
    args << "--enable-win64" if build.with? "win64"

    # 64-bit builds of mpg123 are incompatible with 32-bit builds of Wine
    args << "--without-mpg123" if Hardware.is_64_bit?

    args << "--without-x" if build.without? "x11"

    system "./configure", *args

    # The Mac driver uses blocks and must be compiled with an Apple compiler
    # even if the rest of Wine is built with A GNU compiler.
    unless ENV.compiler == :clang || ENV.compiler == :llvm || ENV.compiler == :gcc
    system "make", "dlls/winemac.drv/Makefile"
    inreplace "dlls/winemac.drv/Makefile" do |s|
    # We need to use the real compiler, not the superenv shim, which will exec the
    # configured compiler no matter what name is used to invoke it.
    cc = s.get_make_var("CC")
    cxx = s.get_make_var("CXX")
    s.change_make_var! "CC", cc.sub(ENV.cc, "xcrun clang") if cc
    s.change_make_var! "CXX", cc.sub(ENV.cxx, "xcrun clang++") if cxx

    # Emulate some things that superenv would normally handle for us
    # Pass the sysroot to support Xcode-only systems
    cflags = s.get_make_var("CFLAGS")
    cflags += " --sysroot=#{MacOS.sdk_path}"
    s.change_make_var! "CFLAGS", cflags
    end
    end

    system "make", "install"
    (pkgshare/"gecko").install resource("gecko")
    (pkgshare/"mono").install resource("mono")

    # Use a wrapper script, so rename wine to wine.bin
    # and name our startup script wine
    mv bin/"wine", bin/"wine.bin"
    (bin/"wine").write(wine_wrapper)
    end

    def caveats
    s = <<-EOS.undent
    You may want to get winetricks:
    brew install winetricks
    EOS

    if build.with? "x11"
    s += <<-EOS.undent
    By default Wine uses a native Mac driver. To switch to the X11 driver, use
    regedit to set the "graphics" key under "HKCU\Software\Wine\Drivers" to
    "x11" (or use winetricks).
    For best results with X11, install the latest version of XQuartz:
    https://xquartz.macosforge.org/
    EOS
    end
    s
    end
    end