Skip to content

Instantly share code, notes, and snippets.

@jcody
Last active December 27, 2015 01:19
Show Gist options
  • Save jcody/7244697 to your computer and use it in GitHub Desktop.
Save jcody/7244697 to your computer and use it in GitHub Desktop.
QT patch for Haswell macbook pro's
require 'formula'
class Qt < Formula
homepage 'http://qt-project.org/'
url 'http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz'
sha1 '745f9ebf091696c0d5403ce691dc28c039d77b9e'
bottle do
revision 2
sha1 'b361f521d413409c0e4397f2fc597c965ca44e56' => :mountain_lion
sha1 'dcf218f912680031de7ce6d7efa021e499caea78' => :lion
sha1 '401f2362ad9a22245a206729954dba731a1cdb52' => :snow_leopard
end
head do
url 'git://gitorious.org/qt/qt.git', :branch => '4.8'
resource 'libWebKitSystemInterfaceMavericks' do
url 'http://trac.webkit.org/export/157771/trunk/WebKitLibraries/libWebKitSystemInterfaceMavericks.a'
sha1 'fc5ebf85f637f9da9a68692df350e441c8ef5d7e'
version '157771'
end if MacOS.version >= :mavericks
end
option :universal
option 'with-qt3support', 'Build with deprecated Qt3Support module support'
option 'with-docs', 'Build documentation'
option 'developer', 'Build and link with developer options'
# Newer (2013) machines seem to have issues compiling with SSSE3 optimizations
option 'without-ssse3', 'Build without SSSE3 optimizations'
depends_on "d-bus" => :optional
depends_on "mysql" => :optional
odie 'qt: --with-qtdbus has been renamed to --with-d-bus' if build.include? 'with-qtdbus'
odie 'qt: --with-demos-examples is no longer supported' if build.include? 'with-demos-examples'
odie 'qt: --with-debug-and-release is no longer supported' if build.include? 'with-debug-and-release'
def patches
[
'https://gist.github.com/cliffrowley/dfb2510b812930165689/raw/eb1073ec3b04f2c80454b3028d8beaec3ec4cedb/I07284a25.patch',
'https://gist.github.com/cliffrowley/68679904fddfbcb0c5ce/raw/2bf7fc6036bc3e7bee5375eb6adc8a3ad268ddd9/Ie9a72e3b.patch'
]
end
def install
# Must be built with --HEAD on Mavericks at the moment
raise 'Qt currently requires --HEAD on Mavericks' if MacOS.version == :mavericks and not build.head?
ENV.universal_binary if build.universal?
ENV.append "CXXFLAGS", "-fvisibility=hidden"
args = ["-prefix", prefix,
"-system-zlib",
"-confirm-license", "-opensource",
"-nomake", "demos", "-nomake", "examples",
"-cocoa", "-fast", "-release"]
# we have to disable these to avoid triggering optimization code
# that will fail in superenv, perhaps because we rename clang to cc and
# Qt thinks it can build with special assembler commands.
# In --env=std, Qt seems aware of this.
# But we want superenv, because it allows to build Qt in non-standard
# locations and with Xcode-only.
if superenv?
args << '-no-3dnow'
# Newer Haswell based machines (2013) seem to have issues compiling when SSSE3 optimizations are enabled
problematic_cpu = Hardware::CPU.family == :haswell && Hardware::CPU.extmodel >= 4
if build.without?('ssse3') || MacOS.version <= :snow_leopard || problematic_cpu?
args << '-no-ssse3'
end
end
args << "-L#{MacOS::X11.lib}" << "-I#{MacOS::X11.include}" if MacOS::X11.installed?
args << "-platform" << "unsupported/macx-clang" if ENV.compiler == :clang
args << "-plugin-sql-mysql" if build.with? 'mysql'
if build.with? 'd-bus'
dbus_opt = Formula.factory('d-bus').opt_prefix
args << "-I#{dbus_opt}/lib/dbus-1.0/include"
args << "-I#{dbus_opt}/include/dbus-1.0"
args << "-L#{dbus_opt}/lib"
args << "-ldbus-1"
end
if build.with? 'qt3support'
args << "-qt3support"
else
args << "-no-qt3support"
end
unless build.with? 'docs'
args << "-nomake" << "docs"
end
if MacOS.prefer_64_bit? or build.universal?
args << '-arch' << 'x86_64'
end
if !MacOS.prefer_64_bit? or build.universal?
args << '-arch' << 'x86'
end
args << '-developer-build' if build.include? 'developer'
if MacOS.version >= :mavericks
(buildpath/'src/3rdparty/webkit/WebKitLibraries').install resource('libWebKitSystemInterfaceMavericks')
end
system "./configure", *args
begin
system "make"
rescue BuildError => e
if MacOS.version >= :lion && Hardware::CPU.family == :haswell
onoe <<-EOS.undent
It appears you have a Haswell based CPU. It seems that Qt fails to build on some newer (2013) Haswell based machines.
Try building again but adding --without-ssse3 to the end of the command line, and let us know if this worked for you.
EOS
end
raise e
end
ENV.j1
system "make install"
# what are these anyway?
(bin+'pixeltool.app').rmtree
(bin+'qhelpconverter.app').rmtree
# remove porting file for non-humans
(prefix+'q3porting.xml').unlink if build.without? 'qt3support'
# Some config scripts will only find Qt in a "Frameworks" folder
frameworks.mkpath
ln_s Dir["#{lib}/*.framework"], frameworks
# The pkg-config files installed suggest that headers can be found in the
# `include` directory. Make this so by creating symlinks from `include` to
# the Frameworks' Headers folders.
Pathname.glob(lib + '*.framework/Headers').each do |path|
framework_name = File.basename(File.dirname(path), '.framework')
ln_s path.realpath, include+framework_name
end
Pathname.glob(bin + '*.app').each do |path|
mv path, prefix
end
end
test do
system "#{bin}/qmake", '-project'
end
def caveats; <<-EOS.undent
We agreed to the Qt opensource license for you.
If this is unacceptable you should uninstall.
EOS
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment