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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
require 'formula'
class Pyqt < Formula
homepage 'http://www.riverbankcomputing.co.uk/software/pyqt'
url 'https://downloads.sf.net/project/pyqt/PyQt4/PyQt-4.10.3/PyQt-mac-gpl-4.10.3.tar.gz'
sha1 'ba5465f92fb43c9f0a5b948fa25df5045f160bf0'
bottle do
revision 1
sha1 "180b8e1e4ee9d12923c9ffe244f9675ac1890c6b" => :mavericks
sha1 "37fd9d146851de13ceb08c63db27ff9eb0d147a4" => :mountain_lion
sha1 "6bfcc601cc98953f656f49f3ec3e8a243f62a9bb" => :lion
end
depends_on :python => :recommended
depends_on :python3 => :optional
if build.without?("python3") && build.without?("python")
odie "pyqt: --with-python3 must be specified when using --without-python"
end
depends_on 'qt' # From their site: PyQt currently supports Qt v4 and will build against Qt v5
if build.with? "python3"
depends_on "sip" => "with-python3"
else
depends_on "sip"
end
def patches
# On Mavericks we want to target libc++, but this requires a user specified
# qmake makespec. Unfortunately user specified makespecs are broken in the
# configure.py script, so we have to fix the makespec path handling logic.
# Also qmake spec macro parsing does not properly handle inline comments,
# which can result in ignored build flags when they are concatenated together.
# Changes proposed upstream: http://www.riverbankcomputing.com/pipermail/pyqt/2013-December/033537.html
DATA
end
def install
# On Mavericks we want to target libc++, this requires a non default qt makespec
if ENV.compiler == :clang and MacOS.version >= :mavericks
ENV.append "QMAKESPEC", "unsupported/macx-clang-libc++"
end
Language::Python.each_python(build) do |python, version|
ENV.append_path 'PYTHONPATH', HOMEBREW_PREFIX/"opt/sip/lib/python#{version}/site-packages"
args = ["--confirm-license",
"--bindir=#{bin}",
"--destdir=#{lib}/python#{version}/site-packages",
"--sipdir=#{HOMEBREW_PREFIX}/share/sip"]
# We need to run "configure.py" so that pyqtconfig.py is generated, which
# is needed by PyQWT (and many other PyQt interoperable implementations such
# as the ROS GUI libs). This file is currently needed for generating build
# files appropriate for the qmake spec that was used to build Qt. This method
# is deprecated and will be removed with SIP v5, so we do the actual compile
# using the newer configure-ng.py as recommended.
inreplace "configure.py", "iteritems", "items" if python == "python3"
system python, "configure.py", *args
(lib/"python#{version}/site-packages/PyQt4").install "pyqtconfig.py"
# On Mavericks we want to target libc++, this requires a non default qt makespec
if ENV.compiler == :clang and MacOS.version >= :mavericks
args << "--spec" << "unsupported/macx-clang-libc++"
end
system python, "./configure-ng.py", *args
system "make"
system "make", "install"
system "make", "clean"
end
end
def caveats
"Phonon support is broken."
end
test do
Pathname('test.py').write <<-EOS.undent
import sys
from PyQt4 import QtGui, QtCore
class Test(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 400, 150)
self.setWindowTitle('Homebrew')
QtGui.QLabel("Python " + "{0}.{1}.{2}".format(*sys.version_info[0:3]) +
" working with PyQt4. Quitting now...", self).move(50, 50)
QtCore.QTimer.singleShot(1500, QtGui.qApp, QtCore.SLOT('quit()'))
app = QtGui.QApplication([])
window = Test()
window.show()
sys.exit(app.exec_())
EOS
Language::Python.each_python(build) do |python, version|
system python, "test.py"
end
end
end
__END__
diff --git a/configure.py b/configure.py
index a8e5dcd..a5f1474 100644
--- a/configure.py
+++ b/configure.py
@@ -1886,7 +1886,7 @@ def get_build_macros(overrides):
if "QMAKESPEC" in list(os.environ.keys()):
fname = os.environ["QMAKESPEC"]
- if not os.path.dirname(fname):
+ if not os.path.dirname(fname) or fname.startswith('unsupported'):
qt_macx_spec = fname
fname = os.path.join(qt_archdatadir, "mkspecs", fname)
elif sys.platform == "darwin":
@@ -1934,6 +1934,11 @@ def get_build_macros(overrides):
if macros is None:
return None
+ # QMake macros may contain comments on the same line so we need to remove them
+ for macro, value in macros.iteritems():
+ if "#" in value:
+ macros[macro] = value.split("#", 1)[0]
+
# Qt5 doesn't seem to support the specific macros so add them if they are
# missing.
if macros.get("INCDIR_QT", "") == "":
|