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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
|
--- configure.py.orig 2008-11-08 21:55:49.000000000 +1000
+++ configure.py 2009-01-03 23:09:03.000000000 +1000
@@ -42,6 +42,10 @@
import sipconfig
+# FreeBSD check and which component (port)
+freebsd, freebsd_port = False, ''
+if sys.platform[:-1] == 'freebsd': freebsd = True
+if freebsd: freebsd_port = os.environ['PYQT4_COMPONENT']
# Initialise the globals.
pyqt_version = 0x040404
@@ -74,7 +78,6 @@
dbuslibdirs = []
dbuslibs = []
-
# Under Windows qmake and the Qt DLLs must be into the system PATH otherwise
# the dynamic linker won't be able to resolve the symbols. On other systems we
# assume we can just run qmake by using its full pathname.
@@ -310,14 +313,23 @@
elif sipcfg.universal:
sipconfig.inform("QtDesigner module disabled with universal binaries.")
else:
- check_module("QtDesigner", "QExtensionFactory",
- "new QExtensionFactory()")
+ if freebsd:
+ if freebsd_port.startswith('designer'):
+ check_module("QtDesigner", "QExtensionFactory",
+ "new QExtensionFactory()")
+ else:
+ check_module("QtDesigner", "QExtensionFactory",
+ "new QExtensionFactory()")
check_module("QAxContainer", "qaxobject.h", "new QAxObject()",
extra_libs=["QAxContainer"])
if os.path.isdir("dbus"):
- check_dbus()
+ if freebsd:
+ if freebsd_port == 'dbus':
+ check_dbus()
+ else:
+ check_dbus()
def code(self):
cons_xtra_incdirs = []
@@ -338,6 +350,10 @@
cons_xtra_libs.extend(sp_libs)
generate_code("QtCore")
+ elif freebsd:
+ if freebsd_port == 'core':
+ generate_code("QtCore", extra_include_dirs=sp_incdirs,
+ extra_lib_dirs=sp_libdirs, extra_libs=sp_libs)
else:
generate_code("QtCore", extra_include_dirs=sp_incdirs,
extra_lib_dirs=sp_libdirs, extra_libs=sp_libs)
@@ -521,19 +537,28 @@
sipconfig.inform("Unable to find the following static plugins: %s" % ", ".join(opts.staticplugins))
# Generate the QScintilla API file.
- sipconfig.inform("Creating QScintilla API file...")
- f = open("PyQt4.api", "w")
+ if freebsd:
+ if not freebsd_port in ('dbus', 'designerplugin', 'demo', 'doc'):
+ sipconfig.inform("Creating QScintilla API file...")
+
+ else:
+ sipconfig.inform("Creating QScintilla API file...")
- for m in pyqt_modules:
- api = open(m + ".api")
+ if not freebsd:
+ # aggregating like below would kill packaging
+ # instead the port installs the seperate module APIs
+ f = open("PyQt4.api", "w")
- for l in api:
- f.write("PyQt4." + l)
+ for m in pyqt_modules:
+ api = open(m + ".api")
- api.close()
- os.remove(m + ".api")
+ for l in api:
+ f.write("PyQt4." + l)
- f.close()
+ api.close()
+ os.remove(m + ".api")
+
+ f.close()
def _static_plugins(self, mname):
"""Return a tuple of the libraries (in platform neutral format) and the
@@ -604,7 +629,13 @@
return libs, libdirs
def module_installs(self):
- return ["__init__.py", "pyqtconfig.py"]
+ if freebsd:
+ if freebsd_port == 'core':
+ return ["__init__.py", "pyqtconfig.py"]
+ else:
+ return []
+ else:
+ return ["__init__.py", "pyqtconfig.py"]
def qpylibs(self):
# See which QPy libraries to build.
@@ -690,23 +721,43 @@
# Create the pyuic4 wrapper. Use the GUI version on MacOS (so that
# previews work properly and normal console use will work anyway), but
# not on Windows (so that normal console use will work).
- sipconfig.inform("Creating pyuic4 wrapper...")
+ if freebsd:
+ if freebsd_port == 'core':
+ sipconfig.inform("Creating pyuic4 wrapper...")
+
+ uicdir=os.path.join(pyqt_modroot, "uic")
+ wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin"))
+
+ sipconfig.inform("Creating pyuic4 Makefile...")
+
+ makefile = sipconfig.PythonModuleMakefile(
+ configuration=sipcfg,
+ dstdir=uicdir,
+ srcdir="uic",
+ dir="pyuic",
+ installs=[[os.path.basename(wrapper), opts.pyqtbindir]]
+ )
+
+ makefile.generate()
+ tool.append("pyuic")
+ else:
+ sipconfig.inform("Creating pyuic4 wrapper...")
- uicdir=os.path.join(pyqt_modroot, "uic")
- wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin"))
+ uicdir=os.path.join(pyqt_modroot, "uic")
+ wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin"))
- sipconfig.inform("Creating pyuic4 Makefile...")
+ sipconfig.inform("Creating pyuic4 Makefile...")
- makefile = sipconfig.PythonModuleMakefile(
- configuration=sipcfg,
- dstdir=uicdir,
- srcdir="uic",
- dir="pyuic",
- installs=[[os.path.basename(wrapper), opts.pyqtbindir]]
- )
+ makefile = sipconfig.PythonModuleMakefile(
+ configuration=sipcfg,
+ dstdir=uicdir,
+ srcdir="uic",
+ dir="pyuic",
+ installs=[[os.path.basename(wrapper), opts.pyqtbindir]]
+ )
- makefile.generate()
- tool.append("pyuic")
+ makefile.generate()
+ tool.append("pyuic")
if "QtXml" in pyqt_modules:
sipconfig.inform("Creating pylupdate4 Makefile...")
@@ -743,7 +794,10 @@
makefile.generate()
tool.append("pyrcc")
else:
- sipconfig.inform("pylupdate4 and pyrcc4 will not be built because the Qt XML module is missing.")
+ if freebsd:
+ pass
+ else:
+ sipconfig.inform("pylupdate4 and pyrcc4 will not be built because the Qt XML module is missing.")
if opts.designer_plugin and "QtDesigner" in pyqt_modules:
py_major = sipcfg.py_version >> 16
@@ -766,11 +820,17 @@
glob.glob("%s/lib/libpython%d.%d*" % (ducfg["exec_prefix"], py_major, py_minor))):
lib_dir_flag = quote("-L%s/lib" % ducfg["exec_prefix"])
link = "%s -lpython%d.%d" % (lib_dir_flag, py_major, py_minor)
+ elif freebsd:
+ lib_dir_flag = quote("-L%s/lib" % ducfg["prefix"])
+ link = "%s -lpython%d.%d" % (lib_dir_flag, py_major, py_minor)
else:
sipconfig.inform("Qt Designer plugin disabled because Python library is static")
opts.designer_plugin = False
- pysh_lib = ducfg["LDLIBRARY"]
+ if freebsd:
+ pysh_lib = "libpython%d.%d" % (py_major, py_minor)
+ else:
+ pysh_lib = ducfg["LDLIBRARY"]
if opts.designer_plugin:
sipconfig.inform("Creating Qt Designer plugin Makefile...")
@@ -839,21 +899,44 @@
sipconfig.inform("The %s Qt libraries are in %s." % (lib_type, qt_libdir))
sipconfig.inform("The Qt binaries are in %s." % qt_bindir)
sipconfig.inform("The Qt mkspecs directory is in %s." % qt_datadir)
- sipconfig.inform("These PyQt modules will be built: %s." % string.join(pyqt_modules))
- sipconfig.inform("The PyQt Python package will be installed in %s." % opts.pyqtmoddir)
-
- if opts.designer_plugin:
+ if freebsd:
+ if not freebsd_port in ('dbus', 'demo', 'designerplugin'):
+ sipconfig.inform("This PyQt module will be built: %s." % pyqt_modules[-1])
+ sipconfig.inform("The PyQt Python package will be installed in %s." % opts.pyqtmoddir)
+ if freebsd_port == 'designerplugin':
+ sipconfig.inform("The Designer plugin will be installed in %s." % os.path.join(opts.plugindir, "designer"))
+ else:
+ sipconfig.inform("These PyQt modules will be built: %s." % string.join(pyqt_modules))
+ sipconfig.inform("The PyQt Python package will be installed in %s." % opts.pyqtmoddir)
sipconfig.inform("The Designer plugin will be installed in %s." % os.path.join(opts.plugindir, "designer"))
if opts.api:
- sipconfig.inform("The QScintilla API file will be installed in %s." % os.path.join(opts.qscidir, "api", "python"))
+ if freebsd:
+ if not freebsd_port in ('dbus', 'demo', 'doc', 'designerplugin'):
+ sipconfig.inform("The QScintilla API file will be installed in %s." % os.path.join(opts.qscidir, "api", "python"))
+ else:
+ sipconfig.inform("The QScintilla API file will be installed in %s." % os.path.join(opts.qscidir, "api", "python"))
if pydbusmoddir:
- sipconfig.inform("The dbus support module will be installed in %s." % pydbusmoddir)
+ if freebsd:
+ if freebsd_port == 'dbus':
+ sipconfig.inform("The dbus support module will be installed in %s." % pydbusmoddir)
+ else:
+ sipconfig.inform("The dbus support module will be installed in %s." % pydbusmoddir)
- sipconfig.inform("The PyQt .sip files will be installed in %s." % opts.pyqtsipdir)
+ if freebsd:
+ if not freebsd_port in ('dbus', 'demo', 'designerplugin'):
+ sipconfig.inform("The PyQt .sip files will be installed in %s." % opts.pyqtsipdir)
+ else:
+ sipconfig.inform("The PyQt .sip files will be installed in %s." % opts.pyqtsipdir)
- sipconfig.inform("pyuic4, pyrcc4 and pylupdate4 will be installed in %s." % opts.pyqtbindir)
+ if freebsd:
+ if freebsd_port == 'core':
+ sipconfig.inform("pyuic4 will be installed in %s." % opts.pyqtbindir)
+ elif freebsd_port == 'xml':
+ sipconfig.inform("pyrcc4 and pylupdate4 will be installed in %s." % opts.pyqtbindir)
+ else:
+ sipconfig.inform("pyuic4, pyrcc4 and pylupdate4 will be installed in %s." % opts.pyqtbindir)
if opts.vendorcheck:
sipconfig.inform("PyQt will only be usable with signed interpreters.")
@@ -1253,7 +1336,11 @@
of libraries.
extra_sip_flags is an optional list of additional flags to pass to SIP.
"""
- sipconfig.inform("Generating the C++ source for the %s module..." % mname)
+ if freebsd:
+ if mname != 'Qt':
+ sipconfig.inform("Generating the C++ source for the %s module..." % mname)
+ else:
+ sipconfig.inform("Generating the C++ source for the %s module..." % mname)
mk_clean_dir(mname)
@@ -1325,7 +1412,11 @@
sipconfig.error("Unable to create the C++ code.")
# Generate the Makefile.
- sipconfig.inform("Creating the Makefile for the %s module..." % mname)
+ if freebsd:
+ if mname != 'Qt':
+ sipconfig.inform("Creating the Makefile for the %s module..." % mname)
+ else:
+ sipconfig.inform("Creating the Makefile for the %s module..." % mname)
installs = []
@@ -1764,6 +1855,10 @@
p.print_help()
sys.exit(2)
+ if freebsd:
+ # avoid picking up the Qt3 headers instead
+ macros['INCDIR'] = '.'
+
sipcfg.set_build_macros(macros)
# Check Qt is what we need.
@@ -1771,7 +1866,7 @@
# Check the licenses are compatible.
check_license()
-
+
# Check which modules to build.
pyqt.check_modules()
@@ -1793,9 +1888,18 @@
installs=[(pyqt.module_installs(), pyqt_modroot)]
if opts.api:
- installs.append(("PyQt4.api", os.path.join(opts.qscidir, "api", "python")))
+ if freebsd:
+ # Don't break package lists
+ if not freebsd_port in ('dbus', 'designerplugin', 'demo', 'doc'):
+ apifile = pyqt_modules[-1] + '.api'
+ installs.append((apifile, os.path.join(opts.qscidir, "api", "python")))
+ else:
+ installs.append(("PyQt4.api", os.path.join(opts.qscidir, "api", "python")))
- xtra_modules = ["Qt"]
+ if freebsd:
+ xtra_modules = []
+ else:
+ xtra_modules = ["Qt"]
if opts.bigqt:
xtra_modules.append("_qt")
@@ -1806,14 +1910,31 @@
if opts.mwg_qwt_dir:
xtra_modules.append("Qwt5")
+ if freebsd:
+ if freebsd_port == 'dbus':
+ s = pyqt.tools()
+ elif freebsd_port == 'designer':
+ s = pyqt.qpylibs() + [pyqt_modules[-1]]
+ elif freebsd_port == 'designerplugin':
+ s = pyqt.tools()
+ else:
+ s = [pyqt_modules[-1]]
+ if freebsd_port in ('core', 'xml'):
+ s += pyqt.tools()
+ else: s = pyqt.qpylibs() + pyqt_modules + xtra_modules + pyqt.tools()
+
sipconfig.ParentMakefile(
configuration=sipcfg,
- subdirs=pyqt.qpylibs() + pyqt_modules + xtra_modules + pyqt.tools(),
+ subdirs=s,
installs=installs
).generate()
# Install the configuration module.
- create_config("pyqtconfig.py", "pyqtconfig.py.in", macros)
+ if freebsd:
+ if freebsd_port == 'core':
+ create_config("pyqtconfig.py", "pyqtconfig.py.in", macros)
+ else:
+ create_config("pyqtconfig.py", "pyqtconfig.py.in", macros)
###############################################################################
|