Skip to content

Instantly share code, notes, and snippets.

@jeregrine
Forked from searls/wine.rb
Last active June 27, 2016 23:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeregrine/efb59dd3be91ccfb81951e86740fb661 to your computer and use it in GitHub Desktop.
Save jeregrine/efb59dd3be91ccfb81951e86740fb661 to your computer and use it in GitHub Desktop.
Install wine via homebrew with directx patch for Stardew Valley
# 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.1.tar.bz2"
mirror "https://downloads.sourceforge.net/project/wine/Source/wine-1.8.1.tar.bz2"
sha256 "149ad3daaf8593b36c5c061285df0ec2a25e20ea48c61323be91088c4d22ca97"
# Patch to fix MSI creation issues.
# https://bugs.winehq.org/show_bug.cgi?id=40129
patch do
url "https://bugs.winehq.org/attachment.cgi?id=53632"
sha256 "b9f98711cfe62228f5d84ab394394008ee10127bebcea7ef966d24127b466e0a"
end
end
bottle do
sha256 "04203794850697cab2119e3a5ac31a77119067780b3f468e4f195279e77bd11c" => :el_capitan
sha256 "9c0a4c424a60284e7020df46301c7cb559a0bec187ba402fd221644fec7bedf3" => :yosemite
sha256 "2c332eb04f43ea0f7ae6d953a21be102348f156d6b2b407043914d6bf53e40dd" => :mavericks
end
devel do
url "https://dl.winehq.org/wine/source/1.9/wine-1.9.6.tar.bz2"
mirror "https://downloads.sourceforge.net/project/wine/Source/wine-1.9.6.tar.bz2"
sha256 "3d2b862feefd89eca954c1cbc16a28e0ce851aeea1555bc1842ffc9aab2c1557"
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.githubusercontent.com/jeregrine/e7162181743c27a23fd7deff4b6b1fd0/raw/c9a03ee3c83d6643dad50c7a3ee0c36057c4c9dd/directx.patch"
sha256 "68dbfd9f14c7a138c0075a339aabbd26b1a0cf0975c68153604cf7f357416a74"
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment