Mon, 17 Sep 2012 19:10:10 +0200
Update to new version of vendor software although Oracle fails to deliver.
More specifically, newer db(3) patch revisions exist but Oracle has
removed them from the canonical download server URI for Berkely DB.
1 ##
2 ## qt.spec -- OpenPKG RPM Specification
3 ## Copyright (c) 2011 Michael Schloh von Bennewitz <michael@schloh.com>
4 ##
5 ## Permission to use, copy, modify, and distribute this software for
6 ## any purpose with or without fee is hereby granted, provided that
7 ## the above copyright notice and this permission notice appear in all
8 ## copies.
9 ##
10 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
11 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
13 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
14 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
15 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
16 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
17 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
18 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
20 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
21 ## SUCH DAMAGE.
22 ##
24 # FIXME: MSvB: It appears that bugs in current versions of binutils
25 # FIXME: MSvB: fail to properly link Qt object code, resulting in
26 # FIXME: MSvB: 'ld: libQt*.so: pthread_mutex...: invalid version 6
27 # FIXME: MSvB: libQt*.so: could not read symbols: Bad value'
28 # FIXME: MSvB: The effects of these bugs are platform dependent.
29 # FIXME: MSvB: Solaris 11 IA-32 builds fail while Linux 2.6.25.18
30 # FIXME: MSvB: AMD64 builds succeed.
32 # package information
33 Name: qt
34 Summary: Cross Platform Application Framework
35 URL: http://www.trolltech.com/products/qt/
36 Vendor: Nokia Corporation
37 Packager: Michael Schloh von Bennewitz
38 Distribution: Europalab Networks Production
39 Class: EVAL
40 Group: Development
41 License: GPL
42 Version: 4.7.3
43 Release: 20110514
45 # build options
46 %option with_tools yes
47 %option with_glib no
48 %option with_mysql no
49 %option with_pgsql no
50 %option with_shared no
51 %option with_examples no
53 # list of sources
54 Source0: ftp://ftp.qt.nokia.com/qt/source/qt-everywhere-opensource-src-%{version}.tar.gz
56 # build information
57 Prefix: %{l_prefix}
58 BuildRoot: %{l_buildroot}
59 BuildPreReq: OpenPKG, openpkg >= 20060823, make, gcc
60 PreReq: OpenPKG, openpkg >= 20060823
61 BuildPreReq: X11, png, mng, jpeg, tiff, mesa, xrender
62 PreReq: X11, png, mng, jpeg, tiff, mesa, xrender
63 BuildPreReq: pkgconfig, openssl, zlib, libiconv, sqlite, dbus
64 PreReq: pkgconfig, openssl, zlib, libiconv, sqlite, dbus
65 BuildPreReq: fontconfig, freetype
66 PreReq: fontconfig, freetype
67 %if "%{with_glib}" == "yes"
68 BuildPreReq: glib2
69 PreReq: glib2
70 %endif
71 %if "%{with_mysql}" == "yes"
72 BuildPreReq: mysql
73 PreReq: mysql
74 %endif
75 %if "%{with_pgsql}" == "yes"
76 BuildPreReq: postgresql
77 PreReq: postgresql
78 %endif
79 AutoReq: no
80 AutoReqProv: no
81 Provides: QTSDK
83 %description
84 Qt is a comprehensive C++ framework for cross-platform application
85 development. It plays the role of a widget toolkit in facilitating
86 the development of software with a graphical user interface, however
87 Qt is useful for developing command line tools and consoles for
88 servers as well.
90 %track
91 prog qt = {
92 version = %{version}
93 url = ftp://ftp.qt.nokia.com/qt/source/
94 regex = qt-everywhere-opensource-src-(__VER__)\.tar\.gz
95 }
97 %prep
98 # announce exceptional build requirements
99 ( echo "This package has exceptional build requirements:"
100 echo " qt-%{version}-root (5 Go)"
101 echo " qt-everywhere-opensource-src-%{version} (6 Go)"
102 echo " qt-%{version}-<date>.<arch>-<os>-<tag>.rpm (2 Go)"
103 echo "Building with no options takes 3,0 hours on a dual core"
104 echo "2 GHz CPU, or 5,0 hours with all build options enabled."
105 ) | %{l_rpmtool} msg -b -t notice
107 %setup -q -n qt-everywhere-opensource-src-%{version}
108 x11_incdir=`%{l_rc} --query x11_incdir`
109 x11_libdir=`%{l_rc} --query x11_libdir`
110 fontconflibs=`%{l_prefix}/bin/pkg-config --libs-only-l --static fontconfig`
111 lcmslibs=`%{l_prefix}/bin/pkg-config --libs-only-l --static lcms`
112 openssllibs=`%{l_prefix}/bin/pkg-config --libs --static openssl`
113 mysqllibs=`%{l_prefix}/bin/mysql_config --libs`
115 # MSvB In R/D: loclibs=''
116 # MSvB In R/D: case "%{l_platform -t}" in
117 # MSvB In R/D: *-sunos* )
118 # MSvB In R/D: loclibs='-lsocket -lnsl'
119 # MSvB In R/D: ;;
120 # MSvB In R/D: esac
121 ( cd mkspecs/qws
122 for plat in freebsd-generic-g++ macx-generic-g++ solaris-generic-g++;
123 do
124 ln -s $plat `echo $plat | %{l_shtool} subst -e 's;\(.*\)-generic-\(.*\);\1-x86-\2;'`
125 done
126 ) || exit $?
127 # Trolltech Bug:
128 # yes was specified for OpenVG but cannot be enabled due to functionality tests!
129 %{l_shtool} subst \
130 -e 's;lower_case_includes;lower_case_bug;g' \
131 configure
132 %{l_shtool} subst \
133 -e 's;\(-z[\t ][\t ]*\)\([^\t \"][^\t \"]*\);\1"\2";g' \
134 configure
135 %{l_shtool} subst \
136 -e 's;\(RPATH_FLAGS\)=.*\$QT_INSTALL_LIBS.*\(\$RPATH_FLAGS\)";\1="%{l_prefix}/lib/qt/dynamic \2";' \
137 -e 's;\(QMAKE_RPATHDIR +=\) \\"\$QT_INSTALL_LIBS\\";\1 %{l_prefix}/lib/qt/dynamic;' \
138 configure
139 %{l_shtool} subst \
140 -e "s;\(OPENSSL_LIBS *=\) *-lssl -lcrypto;\1 $openssllibs;" \
141 configure
142 %{l_shtool} subst \
143 -e 's; *QMakeVar set QMAKE_CFLAGS_X11.*QT_CFLAGS_FONTCONFIG.*;;' \
144 configure
145 # yes this is needed several times to catch nested occurences of '--libs'
146 %{l_shtool} subst \
147 -e 's;\(QT_LIBS_FONTCONFIG *=.*PKG_CONFIG.*\) --libs ;\1 --libs-only-L ;g' \
148 -e 's;\(QT_LIBS_FONTCONFIG *=.*PKG_CONFIG.*\) --libs ;\1 --libs-only-L ;g' \
149 configure
150 # yes this is needed several times to catch nested occurences of '--cflags'
151 %{l_shtool} subst \
152 -e 's;\(QT_CFLAGS_[^=][^=]*=.*PKG_CONFIG.*\) --cflags ;\1 --cflags-only-other ;g' \
153 -e 's;\(QT_CFLAGS_[^=][^=]*=.*PKG_CONFIG.*\) --cflags ;\1 --cflags-only-other ;g' \
154 configure
155 # Trolltech Bug:
156 # Glib support cannot be enabled due to functionality tests!
157 # Turn on verbose messaging (-v) to ./configure to see the final report.
158 # Trolltech Bug:
159 # In file included from ../../include/QtGui/private/qgtkstyle_p.h:1,
160 # from kernel/qguiplatformplugin.cpp:63:
161 # ....../qgtkstyle_p.h:69:21: error: gtk/gtk.h: No such file or directory
162 # Workaround resolution:
163 # hack to get back the standard '--cflags' of just Qt_CFLAGS_GLIB
164 # Question: Is this needed? QT_LIBS_QGTKSTYLE=`$PKG_CONFIG --libs gobject-2.0 2>/dev/null`
165 %{l_shtool} subst \
166 -e 's;\(QT_CFLAGS_GLIB *=.*PKG_CONFIG.*\) --cflags-only-other ;\1 --cflags ;g' \
167 -e 's;\(QT_CFLAGS_QGTKSTYLE *=.*PKG_CONFIG.*\) --cflags-only-other ;\1 --cflags ;g' \
168 configure
169 %{l_shtool} subst \
170 -e 's;\(TRY_INCLUDEPATHS = \).*\(\$\$INCLUDEPATH\);\1\2;' \
171 -e 's;/freetype2;/freetype;' \
172 config.tests/unix/freetype/freetype.pri
173 # Trolltech Bug:
174 # /opdv/lib/libmng.a(libmng_cms.o): In function `mnglcms_initlibrary':
175 # libmng_cms.c:(.text+0xa): undefined reference to `cmsErrorAction'
176 %{l_shtool} subst \
177 -e "s;\(LIBS.*=.*-lmng\);\1 $lcmslibs;" \
178 src/gui/image/qmnghandler.pri
179 # Trolltech Bug:
180 # lib/libQtGui.a(qapplication_x11.o): In function
181 # `qt_init(QApplicationPrivate*, int, _XDisplay*, unsigned long, unsigned long)':
182 # qapplication_x11.cpp:(.text+0xec8d): undefined reference to `FcInit'
183 %{l_shtool} subst \
184 -e "s;^\(LIBS += \)-lfreetype -lfontconfig;\1$fontconflibs;" \
185 config.tests/x11/fontconfig/fontconfig.pro
186 echo "LIBS += `%{l_prefix}/bin/pkg-config --libs-only-L fontconfig`" \
187 >>tools/linguist/linguist/linguist.pro
188 echo 'INCLUDEPATH += /usr/include/wacomcfg' \
189 >>src/gui/kernel/x11.pri
190 echo "contains(QT_CONFIG, fontconfig) { LIBS += $fontconflibs }" \
191 >>src/gui/kernel/x11.pri
192 echo "contains(QT_CONFIG, fontconfig) { LIBS += $fontconflibs }" \
193 >>src/gui/text/text.pri
194 # Trolltech Bug:
195 # The QtDBus module cannot be enabled because libdbus-1 version 0.93 was not found.
196 # Turn on verbose messaging (-v) to ./configure to see the final report.
197 echo "INCLUDEPATH = `%{l_prefix}/bin/pkg-config --cflags-only-I dbus-1 | %{l_shtool} subst -e 's;\-I;;g'`" \
198 >>config.tests/unix/dbus/dbus.pro
199 echo "LIBS = `%{l_prefix}/bin/pkg-config --libs-only-l --static dbus-1`" \
200 >>config.tests/unix/dbus/dbus.pro
201 # Trolltech Bug:
202 # PostgreSQL support cannot be enabled due to functionality tests!
203 # Turn on verbose messaging (-v) to ./configure to see the final report.
204 pgldflags=`%{l_prefix}/bin/pg_config --ldflags`
205 pglibs=`%{l_prefix}/bin/pg_config --libs`
206 %{l_shtool} subst \
207 -e "s;\(LIBS.*= -lpq\);\1 $pgldflags $pglibs $loclibs -pthread;" \
208 config.tests/unix/psql/psql.pro
209 # Trolltech Bug:
210 # make: *** [sub-examples-make_default-ordered] Error 2
211 # QMAKE_PRL_LIBS in libQtSql.prl is generated defective.
212 %{l_shtool} subst \
213 -e "s;\$\$*QT_LFLAGS_PSQL;$pgldflags;" \
214 -e "s;-lpq;-lpq $pglibs $loclibs -pthread;" \
215 src/sql/drivers/psql/qsql_psql.pri
216 # Trolltech Bug:
217 # Iconv support cannot be enabled due to functionality tests!
218 # Turn on verbose messaging (-v) to ./configure to see the final report.
219 %{l_shtool} subst \
220 -e 's;^mac[^:][^:]*:\(LIBS\);\1;' \
221 config.tests/unix/iconv/iconv.pro
222 # Trolltech Bug:
223 # Missing libmng test! Parts (src/gui/image/qmnghandler.cpp) use
224 # such libmng methods as mng_create(3), mng_putchunk_term(3)...
225 # These are only optional parts of typical MNG implementations.
226 # Questions surround whether the MNG standard [1] requires these
227 # API methods in their expected form, or if this alone is excuse
228 # enough for neglecting such build time configuration.
229 # [1] http://www.libpng.org/pub/mng/spec/
230 # A work around is to force integration of Qt 3rdparty embedded
231 # MNG logic, thus weakening the loosely coupled nature of Qt
232 # components and potentially affecting security.
233 # MSvB In R/D: uiclibs=`%{l_prefix}/bin/pkg-config --libs-only-l --static fontconfig lcms`
234 # MSvB In R/D: %{l_shtool} subst \
235 # MSvB In R/D: -e 's;LIBS .*= -lpq$;LIBS += -lpq -lssl -lcrypto;' \
236 # MSvB In R/D: -e "s;LIBS .*= \$\$QT_LFLAGS_MYSQL;LIBS += $mysqllibs;" \
237 # MSvB In R/D: src/sql/drivers/drivers.pri
238 # MSvB In R/D: %{l_shtool} subst \
239 # MSvB In R/D: -e "s;QMAKE_CXXFLAGS += \$\$QT_CFLAGS_GLIB;INCPATH += `pkg-config --cflags-only-I glib-2.0 gthread-2.0 2>/dev/null | %{l_shtool} subst -e 's;-I;;g'`;g" \
240 # MSvB In R/D: src/corelib/kernel/kernel.pri \
241 # MSvB In R/D: src/gui/kernel/kernel.pri
242 # MSvB In R/D: %{l_shtool} subst \
243 # MSvB In R/D: -e "s;QMAKE_CXXFLAGS \*= \$\$QT_CFLAGS_PSQL;INCPATH += `pg_config --includedir 2>/dev/null | %{l_shtool} subst -e 's;-I;;g'`;g" \
244 # MSvB In R/D: -e "s;QMAKE_CXXFLAGS \*= \$\$QT_CFLAGS_MYSQL;INCPATH += `mysql_config --include 2>/dev/null | %{l_shtool} subst -e 's;-I;;g'`;g" \
245 # MSvB In R/D: -e "s;QMAKE_CXXFLAGS \*= \$\$QT_CFLAGS_SQLITE;INCPATH += `pkg-config --cflags-only-I sqlite3 2>/dev/null | %{l_shtool} subst -e 's;-I;;g'`;g" \
246 # MSvB In R/D: -e 's;!static:\(!isEmpty(QT_LFLAGS_PSQL)\);\1;' \
247 # MSvB In R/D: -e 's;!static:\(LIBS \*= \$\$QT_LFLAGS_PSQL\);\1;' \
248 # MSvB In R/D: src/plugins/sqldrivers/mysql/mysql.pro \
249 # MSvB In R/D: src/plugins/sqldrivers/psql/psql.pro \
250 # MSvB In R/D: src/plugins/sqldrivers/sqlite/sqlite.pro \
251 # MSvB In R/D: src/sql/drivers/drivers.pri
252 # Trolltech Bug:
253 # In file included from qdbusconnectioninterface.cpp:52:0:
254 # qdbus_symbols_p.h:58:23: fatal error: dbus/dbus.h: No such file or directoryIn
255 # file included from qdbusconnection_p.h:70:0, from qdbusconnection.cpp:51:
256 %{l_shtool} subst \
257 -e "s;QMAKE_CXXFLAGS += \$\$QT_CFLAGS_DBUS;INCPATH += `pkg-config --cflags-only-I dbus-1 2>/dev/null | %{l_shtool} subst -e 's;-I;;g'`;g" \
258 src/dbus/dbus.pro
259 # Trolltech Bug:
260 # All the OpenGL functionality tests failed!
261 # You might need to modify the include and library search paths by
262 # editing QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in
263 # /home/mschloh/opwrk/tmp/qt-everywhere-opensource-src-4.7.3/mkspecs/linux-g++-64.
264 %{l_shtool} subst \
265 -e 's;^\(QMAKE_INCDIR[^a-zA-Z0-9=]*=\).*;\1 %{l_prefix}/include;' \
266 -e 's;^\(QMAKE_LIBDIR[^a-zA-Z0-9=]*=\).*;\1 %{l_prefix}/lib;' \
267 -e "s;^\(QMAKE_INCDIR_OPENGL[^=]*=\).*;\1 $x11_incdir;" \
268 -e "s;^\(QMAKE_LIBDIR_OPENGL[^=]*=\).*;\1 $x11_libdir;" \
269 -e "s;^\(QMAKE_INCDIR_OPENVG[^=]*=\).*;\1 $x11_incdir;" \
270 -e "s;^\(QMAKE_LIBDIR_OPENVG[^=]*=\).*;\1 $x11_libdir;" \
271 -e 's;^\(QMAKE_LFLAGS_RELEASE.*\);\1 -s;' \
272 mkspecs/qws/*/qmake.conf \
273 mkspecs/*/*.conf
274 # Trolltech Bug:
275 # yes was specified for OpenVG but cannot be enabled due to functionality tests!
276 %{l_shtool} subst \
277 -e 's;\(\$\$*\)\(QMAKE_LIBS_OPENVG\);\1\2 \1QMAKE_LIBS_THREAD;' \
278 config.tests/unix/openvg/openvg.pro
279 echo 'QMAKE_LIBS_OPENVG = -lOpenVG' \
280 >>mkspecs/common/unix.conf
281 %{l_shtool} subst \
282 -e "s;^\(QMAKE_INCDIR_X11[^=]*=\).*;\1 $x11_incdir;" \
283 -e "s;^\(QMAKE_LIBDIR_X11[^=]*=\).*;\1 $x11_libdir;" \
284 mkspecs/qws/*/qmake.conf \
285 mkspecs/*/qmake.conf
286 %{l_shtool} subst \
287 -e 's;^\(QMAKE_LIBS +=.*\);\1 -liconv;' \
288 src/corelib/corelib.pro
289 # Trolltech Bug:
290 # In file included from ../JavaScriptCore/runtime/RegExp.h:29:0,
291 # ../JavaScriptCore/yarr/RegexJIT.h: In destructor 'JSC::Yarr::RegexCodeBlock::~RegexCodeBlock()':
292 # ../JavaScriptCore/yarr/RegexJIT.h:63:36: error: 'jsRegExpFree' was not declared in this scope
293 %{l_shtool} subst \
294 -e 's;\(DESTDIR *=\) *\$\$JAVASCRIPTCORE_DESTDIR;\1 $$QMAKE_LIBDIR_QT;' \
295 src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
296 # Trolltech Bug:
297 # In file included from ../JavaScriptCore/runtime/RegExp.h:29:0,
298 # ../JavaScriptCore/yarr/RegexJIT.h: In destructor 'JSC::Yarr::RegexCodeBlock::~RegexCodeBlock()':
299 # ../JavaScriptCore/yarr/RegexJIT.h:63:36: error: 'jsRegExpFree' was not declared in this scope
300 %{l_shtool} subst \
301 -e 's;\(pathToJavaScriptCoreOutput *=\) *\$\$ARGS/\$\$JAVASCRIPTCORE_DESTDIR;\1 $$QMAKE_LIBDIR_QT;g' \
302 src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
303 # MSvB In R/D: echo "QMAKE_LIBDIR += %{l_prefix}/lib/qt/dynamic" \
304 # MSvB In R/D: >>mkspecs/features/shared.prf
305 # MSvB In R/D: %{l_shtool} subst \
306 # MSvB In R/D: -e 's; *\.\./3rdparty/freetype/.*;;g' \
307 # MSvB In R/D: -e 's;^\( *contains(QT_CONFIG, freetype) {\);\1 LIBS += -lfreetype;' \
308 # MSvB In R/D: src/gui/text/text.pri
309 # Trolltech Bug:
310 # image/qtiffhandler.cpp:48:20: fatal error: tiffio.h: No such file or directory
311 # compilation terminated.
312 # make[1]: *** [.obj/release-static/qtiffhandler.o] Error 1
313 %{l_shtool} subst \
314 -e 's;\(#include *"\)\(tiffio.h"\);\1tiff/\2;' \
315 src/gui/image/qtiffhandler.cpp
316 # Trolltech Bug:
317 # In file included from ../../../gui/image/qjpeghandler.cpp:42:0:
318 # ../../../gui/image/qjpeghandler_p.h:45:35: fatal error:
319 # QtGui/qimageiohandler.h: No such file or directory
320 %{l_shtool} subst \
321 -e 's;\(INCLUDEPATH *\*=\)\( *\);\1 $RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include\2;' \
322 src/gui/image/qjpeghandler.pri
323 # MSvB In R/D: %{l_shtool} subst \
324 # MSvB In R/D: -e 's;\(CONFIG[\t ]*+=[\t ]*qt\);\1 x11;' \
325 # MSvB In R/D: tools/qtconfig/qtconfig.pro
326 # MSvB In R/D: %{l_shtool} subst \
327 # MSvB In R/D: -e 's;webkit;web-broken-kit;g' \
328 # MSvB In R/D: tools/assistant/tools/assistant/assistant.pro
329 # MSvB In R/D: echo "DEFINES += QT_NO_WEBKIT" \
330 # MSvB In R/D: >>tools/assistant/tools/assistant/assistant.pro
331 # MSvB In R/D: %{l_shtool} subst \
332 # MSvB In R/D: -e 's;Qt.s Classes;All Classes;' \
333 # MSvB In R/D: tools/assistant/tools/assistant/doc/assistant.qdoc \
334 # MSvB In R/D: tools/qdoc3/doc/qdoc-manual.qdoc \
335 # MSvB In R/D: tools/qdoc3/doc/files/qt.qdocconf \
336 # MSvB In R/D: tools/qdoc3/test/qt-build-docs.qdocconf \
337 # MSvB In R/D: tools/qdoc3/test/qt.qdocconf
338 # Trolltech Bug:
339 # In file included from qpaintengine_vg.cpp:42:0:
340 # qpaintengine_vg_p.h:66:39: error: expected initializer before ':' token
341 # make[1]: *** [.obj/release-static/qpaintengine_vg.o] Error 1
342 # make: *** [sub-openvg-sub_src_target_ordered] Error 2
343 %{l_shtool} subst \
344 -e 's;Q_OPENVG_EXPORT;Q_DECL_EXPORT;g' \
345 src/openvg/*
347 %build
348 # protect against sloppy code inclusion of all unused subprojects
349 # MSvB In R/D: ce-compat clucene des easing harfbuzz javascriptcore md4 md5 s60 sha1 webkit xorg zlib_dependency.pri
350 (cd src/3rdparty && rm -rf [^cdehjmswxz]* sql* win* zlib zlib.pri) || exit $?
352 # detect which platform for which to build
353 case "%{l_platform -t}" in
354 sun4[uv]-sunos* | amd64-sunos* ) platcomp="solaris-g++-64" ;;
355 i?86-sunos* ) platcomp="solaris-g++" ;;
356 amd64-linux* ) platcomp="linux-g++-64" ;;
357 i?86-linux* ) platcomp="linux-g++" ;;
358 amd64-freebsd* | i?86-freebsd* ) platcomp="freebsd-g++" ;;
359 *-aix* ) platcomp="aix-g++" ;;
360 *-darwin* ) platcomp="macx-g++" ;;
361 *-hpux* ) platcomp="hpux-g++" ;;
362 *-irix* ) platcomp="irix-g++" ;;
363 * ) echo "Platform '%{l_platform -t}' is not supported." 2>&1; exit 1 ;;
364 esac
366 # detect which architecture extensions are available
367 archflags=''
368 case "%{l_platform -t}" in
369 amd64-* )
370 break
371 ;;
372 * )
373 archflags='-no-sse2 -no-3dnow'
374 ;;
375 esac
377 %if "%{with_shared}" == "yes"
378 # optional shared build (precedes mandatory static build)
379 echo 'yes' | ./configure \
380 $archflags \
381 -opensource \
382 -prefix %{l_prefix} \
383 -bindir %{l_prefix}/bin \
384 -libdir %{l_prefix}/lib/qt/dynamic \
385 -docdir %{l_prefix}/share/qt/doc \
386 -headerdir %{l_prefix}/include \
387 -plugindir %{l_prefix}/lib/qt/plugins \
388 -datadir %{l_prefix}/share/qt \
389 -translationdir %{l_prefix}/share/qt/translations \
390 -sysconfdir %{l_prefix}/etc/qt \
391 -examplesdir %{l_prefix}/share/qt/examples \
392 -demosdir %{l_prefix}/share/qt/demos \
393 %if 0
394 # Build time Qt definitions should predominate,
395 # otherwise foreign definitions cause errors like:
396 #
397 # g++ -c -I/foreign/include [...] animation/qguivariantanimation.cpp
398 # .moc/release-shared/moc_qnamespace.cpp:426:16: error: 'WA_LockPortraitOrientation' is not a member of 'Qt'
399 # .moc/release-shared/moc_qnamespace.cpp:427:16: error: 'WA_LockLandscapeOrientation' is not a member of 'Qt'
400 # .moc/release-shared/moc_qnamespace.cpp:428:16: error: 'WA_AutoOrientation' is not a member of 'Qt'
401 # .moc/release-shared/moc_qnamespace.cpp:440:16: error: 'AA_S60DisablePartialScreenInputMode' is not a member of 'Qt'
402 #
403 # Other problems include flawed definitions polluting (C|CXX)FLAGS
404 # and overriding the correct definitions in CPPFLAGS. Variables
405 # like QMAKE_(C|CXX)FLAGS exhibit this problem as well.
406 #
407 # The work around is to force a Qt dist include path in (C|CXX)FLAGS.
408 %endif
409 -I$RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include \
410 -release \
411 -shared \
412 -platform $platcomp \
413 -s60 \
414 -qt-style-s60 \
415 -no-sql-ibase \
416 %if "%{with_glib}" == "yes"
417 -glib \
418 %else
419 -no-glib \
420 %endif
421 %if "%{with_mysql}" == "yes"
422 -qt-sql-mysql \
423 -plugin-sql-mysql \
424 %else
425 -no-sql-mysql \
426 %endif
427 %if "%{with_pgsql}" == "yes"
428 -qt-sql-psql \
429 -plugin-sql-psql \
430 %else
431 -no-sql-psql \
432 %endif
433 -no-sql-odbc \
434 -system-sqlite \
435 -qt-sql-sqlite \
436 -plugin-sql-sqlite \
437 -no-sql-sqlite2 \
438 -openssl-linked \
439 -optimized-qmake \
440 -xmlpatterns \
441 -svg \
442 -webkit \
443 -system-zlib \
444 -qt-gif \
445 -system-libpng \
446 -system-libmng \
447 -system-libjpeg \
448 -system-libtiff \
449 -rpath \
450 -no-cups \
451 -iconv \
452 -pch \
453 -dbus-linked \
454 -opengl \
455 -openvg \
456 -xrender \
457 -fontconfig \
458 -freetype
460 # default options are implicitly used, for example...
461 #-no-fast -exceptions -accessibility -stl -qt3support -nis
462 #-sm -xshape -xinerama -xcursor -xfixes -xrandr -tablet -xkb
464 # carry out shared build procedure
465 # Trolltech Bug:
466 # Problem with dependency order, causes compiling of source files
467 # with unconfigured dependencies to other files to fail when
468 # building the sources in parallel. The implemented work around
469 # is disabling parallel make, causing a nearly 100% build deceleration.
470 # itemviews/qlistview.cpp: In member function 'void QListModeViewBase::dragMoveEvent(QDragMoveEvent*)':
471 # itemviews/qlistview.cpp:3134:1: internal compiler error: Segmentation fault
472 ( cd src
473 %{l_make} %{l_mflags} \
474 sub-moc sub-rcc sub-uic sub-uic3
475 ) || exit $?
476 # Trolltech Bug:
477 # Problem with dependency order, causes compiling of source files
478 # with unconfigured dependencies to other files to fail when
479 # building the sources in parallel. The implemented work around
480 # is disabling parallel make, causing a nearly 100% build deceleration.
481 %{l_make} %{l_mflags} \
482 sub-corelib-make_default-ordered \
483 sub-xml-make_default-ordered \
484 sub-network-make_default-ordered \
485 sub-sql-make_default-ordered \
486 sub-testlib-make_default-ordered \
487 sub-dbus-make_default-ordered \
488 sub-gui-make_default-ordered \
489 sub-qt3support-make_default-ordered \
490 sub-opengl-make_default-ordered \
491 sub-xmlpatterns-make_default-ordered \
492 sub-multimedia-make_default-ordered \
493 sub-svg-make_default-ordered \
494 sub-script-make_default-ordered \
495 sub-declarative-make_default-ordered \
496 sub-javascriptcore-make_default-ordered \
497 sub-webkit-make_default-ordered \
498 sub-scripttools-make_default-ordered \
499 sub-plugins-make_default-ordered \
500 sub-imports-make_default-ordered \
501 sub-webkitdeclarative-make_default-ordered \
502 sub-translations-make_default-ordered
504 # arthur plugin requires libQtDesigner
505 ( cd demos
506 ( cd ../tools/designer/src/lib
507 %{l_make} %{l_mflags -O}
508 ) || exit $?
509 %{l_make} %{l_mflags -O} sub-arthurplugin
510 ) || exit $?
512 # cache shared libs and initialize the build configuration, which
513 # would otherwise still contain references to our shared libs build
514 %{l_shtool} mkdir -f -p -m 755 sharbuild/dynamic
515 mv lib/* sharbuild/dynamic/
516 mv plugins sharbuild/
517 %{l_make} %{l_mflags} confclean
518 %endif
520 # mandatory static build (follows optional shared build)
521 echo 'yes' | ./configure \
522 $archflags \
523 -opensource \
524 -prefix %{l_prefix} \
525 -bindir %{l_prefix}/bin \
526 -libdir %{l_prefix}/lib \
527 -docdir %{l_prefix}/share/qt/doc \
528 -headerdir %{l_prefix}/include \
529 -plugindir %{l_prefix}/lib/qt/plugins \
530 -datadir %{l_prefix}/share/qt \
531 -translationdir %{l_prefix}/share/qt/translations \
532 -sysconfdir %{l_prefix}/etc/qt \
533 -examplesdir %{l_prefix}/share/qt/examples \
534 -demosdir %{l_prefix}/share/qt/demos \
535 %if 0
536 # Build time Qt definitions should predominate,
537 # otherwise foreign definitions cause errors like:
538 #
539 # g++ -c -I/foreign/include [...] animation/qguivariantanimation.cpp
540 # .moc/release-shared/moc_qnamespace.cpp:426:16: error: 'WA_LockPortraitOrientation' is not a member of 'Qt'
541 # .moc/release-shared/moc_qnamespace.cpp:427:16: error: 'WA_LockLandscapeOrientation' is not a member of 'Qt'
542 # .moc/release-shared/moc_qnamespace.cpp:428:16: error: 'WA_AutoOrientation' is not a member of 'Qt'
543 # .moc/release-shared/moc_qnamespace.cpp:440:16: error: 'AA_S60DisablePartialScreenInputMode' is not a member of 'Qt'
544 #
545 # Other problems include flawed definitions polluting (C|CXX)FLAGS
546 # and overriding the correct definitions in CPPFLAGS. Variables
547 # like QMAKE_(C|CXX)FLAGS exhibit this problem as well.
548 #
549 # The work around is to force a Qt dist include path in (C|CXX)FLAGS.
550 %endif
551 -I$RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include \
552 -release \
553 -static \
554 -platform $platcomp \
555 -s60 \
556 -qt-style-s60 \
557 -no-sql-ibase \
558 %if "%{with_glib}" == "yes"
559 -glib \
560 %else
561 -no-glib \
562 %endif
563 %if "%{with_mysql}" == "yes"
564 -qt-sql-mysql \
565 %else
566 -no-sql-mysql \
567 %endif
568 %if "%{with_pgsql}" == "yes"
569 -qt-sql-psql \
570 %else
571 -no-sql-psql \
572 %endif
573 -no-sql-odbc \
574 -system-sqlite \
575 -qt-sql-sqlite \
576 -no-sql-sqlite2 \
577 -openssl-linked \
578 -optimized-qmake \
579 -xmlpatterns \
580 -svg \
581 -webkit \
582 -system-zlib \
583 -qt-gif \
584 -system-libpng \
585 -system-libmng \
586 -system-libjpeg \
587 -system-libtiff \
588 -rpath \
589 -no-cups \
590 -iconv \
591 -pch \
592 -dbus-linked \
593 -opengl \
594 -openvg \
595 -xrender \
596 -fontconfig \
597 -freetype
599 # default options are implicitly used, for example...
600 #-no-fast -exceptions -accessibility -stl -qt3support -nis
601 #-sm -xshape -xinerama -xcursor -xfixes -xrandr -tablet -xkb
603 # carry out static build procedure
604 # Trolltech Bug:
605 # Problem with dependency order, causes compiling of qtreeview.cpp
606 # with dependency to moc_qtreeview.cpp before moc(1) has finished.
607 # The implemented work around is disabling parallel make, causing
608 # a nearly 100% build deceleration but allowing the build to procede.
609 # In file included from itemviews/qtreeview.cpp:3761:0:
610 # .moc/release-static/moc_qtreeview.cpp: In member function 'QPixmap QTreeViewPrivate::renderTreeToPixmapForAnimation(const QRect&) const':
611 # .moc/release-static/moc_qtreeview.cpp:209:1: internal compiler error: Segmentation fault
612 %{l_make} %{l_mflags} sub-src
613 %if "%{with_tools}" == "yes"
614 %{l_make} %{l_mflags -O} \
615 sub-tools-make_default-ordered sub-translations-make_default-ordered
616 %endif
617 %if "%{with_examples}" == "yes"
618 # Trolltech Bug:
619 # Another problem with dependency order with the same work around,
620 # disabling parallel make and causing a nearly 100% build deceleration.
621 # In file included from main.cpp:136:0:
622 # .moc/release-static/main.moc:84:1: internal compiler error: Segmentation fault
623 # Please submit a full bug report,
624 # with preprocessed source if appropriate.
625 # See <http://openpkg.org/> for instructions.
626 # make[3]: *** [.obj/release-static/main.o] Error 1
627 # make[2]: *** [sub-validators-make_default] Error 2
628 %{l_make} %{l_mflags} \
629 sub-demos-make_default-ordered \
630 sub-examples-make_default-ordered
631 %endif
632 %if "%{with_tools}" == "yes"
633 %{l_make} %{l_mflags -O} docs
634 %else
635 %if "%{with_examples}" == "yes"
636 %{l_make} %{l_mflags -O} docs
637 %endif
638 %endif
640 %install
641 rm -rf $RPM_BUILD_ROOT
643 # carry out installation procedure
644 targets="sub-tools-bootstrap-install_subtargets-ordered \
645 sub-moc-install_subtargets-ordered \
646 sub-rcc-install_subtargets-ordered \
647 sub-uic-install_subtargets-ordered \
648 sub-corelib-install_subtargets-ordered \
649 sub-xml-install_subtargets-ordered \
650 sub-network-install_subtargets-ordered \
651 sub-sql-install_subtargets-ordered \
652 sub-testlib-install_subtargets-ordered \
653 sub-dbus-install_subtargets-ordered \
654 sub-gui-install_subtargets-ordered \
655 sub-qt3support-install_subtargets-ordered \
656 sub-uic3-install_subtargets-ordered \
657 sub-opengl-install_subtargets-ordered \
658 sub-xmlpatterns-install_subtargets-ordered \
659 sub-multimedia-install_subtargets-ordered \
660 sub-svg-install_subtargets-ordered \
661 sub-script-install_subtargets-ordered \
662 sub-declarative-install_subtargets-ordered \
663 sub-scripttools-install_subtargets-ordered \
664 sub-imports-install_subtargets-ordered \
665 sub-translations-install_subtargets-ordered"
667 %if "%{with_tools}" == "yes"
668 targets="$targets sub-tools-install_subtargets-ordered install_htmldocs install_qchdocs install_docimages"
669 %endif
670 %if "%{with_examples}" == "yes"
671 targets="$targets sub-demos-install_subtargets-ordered sub-examples-install_subtargets-ordered install_htmldocs install_qchdocs install_docimages"
672 %endif
673 targets="$targets install_qmake install_mkspecs"
674 %{l_make} %{l_mflags} $targets INSTALL_ROOT="$RPM_BUILD_ROOT"
675 %{l_shtool} install -c -m 644 \
676 lib/libjscore.a lib/libjscore.prl \
677 $RPM_BUILD_ROOT%{l_prefix}/lib/
679 # correct paths in pkg-config(1) configuration files
680 %{l_shtool} subst \
681 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version};-L%{l_prefix};' \
682 -e 's;=\([\t ]*\)[^\t ]*qt-everywhere-opensource-src-%{version};=\1%{l_prefix};g' \
683 $RPM_BUILD_ROOT%{l_prefix}/lib/pkgconfig/*
684 # keep library paths clean by removing redundant paths
685 %{l_shtool} subst \
686 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
687 $RPM_BUILD_ROOT%{l_prefix}/lib/pkgconfig/*
689 # install static or shared plugins according to user choice
690 %if "%{with_shared}" != "yes"
691 %{l_make} %{l_mflags} sub-plugins-install_subtargets-ordered INSTALL_ROOT="$RPM_BUILD_ROOT"
692 %else
693 %{l_tar} cf - -C sharbuild plugins | %{l_tar} xf - -C $RPM_BUILD_ROOT%{l_prefix}/lib/qt
694 %endif
696 %if "%{with_shared}" == "yes"
697 # install shared libs and symlinks
698 %{l_shtool} mkdir -f -p -m 755 \
699 $RPM_BUILD_ROOT%{l_prefix}/lib/qt
700 %{l_tar} cf - -C sharbuild dynamic | %{l_tar} xf - -C $RPM_BUILD_ROOT%{l_prefix}/lib/qt
702 # offer limited support of pkg-config(1) for shared libs
703 # substitution unfortunately only handles paths with no whitespace
704 %{l_shtool} subst \
705 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}/lib;-L%{l_prefix}/lib/qt/dynamic;' \
706 -e 's;=\([\t ]*\)[^\t ]*qt-everywhere-opensource-src-%{version};=\1%{l_prefix};g' \
707 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/pkgconfig/*
708 # keep library paths clean by removing redundant paths
709 %{l_shtool} subst \
710 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
711 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/pkgconfig/*
713 # explain nonstandard shared library placement
714 ( echo "This OpenPKG Qt build is using the with_shared option."
715 echo ""
716 echo "The directory %{l_prefix}/lib/qt/dynamic contains the"
717 echo "requested shared libraries. Although shared libraries"
718 echo "have been optionally built (see the build time"
719 echo "'with_shared yes' option), static libraries were"
720 echo "built by default as usual, and installed in the"
721 echo "standard library directory %{l_prefix}/lib."
722 echo ""
723 echo "To build applications using shared libraries instead,"
724 echo "please direct pkg-config(1) to use the proper definitions"
725 echo "by setting the environment variable PKG_CONFIG_PATH to "
726 echo "%{l_prefix}/lib/qt/dynamic/pkgconfig."
727 echo ""
728 echo "Note: If building via qmake(1), please append"
729 echo " either 'static' or 'shared' to the line"
730 echo " 'CONFIG +=' in the project file (name.pro)."
731 echo " Then execute %{l_prefix}/bin/qmake on this file."
732 ) >$RPM_BUILD_ROOT%{l_prefix}/lib/qt/README
733 %endif
735 # correct temporary runtime link paths (static libs)
736 %{l_shtool} subst \
737 -e 's;/./;/;g' \
738 -e 's;\(QMAKE_PRL_BUILD_DIR[\t ]*=\).*\(qt-everywhere-opensource-src-%{version}.*\);\1 /.../\2;' \
739 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version};-L%{l_prefix};' \
740 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/plugins/*/*.prl \
741 $RPM_BUILD_ROOT%{l_prefix}/lib/*.prl \
742 $RPM_BUILD_ROOT%{l_prefix}/lib/*.la
743 # clean install by removing redundant paths (static libs)
744 %{l_shtool} subst \
745 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
746 $RPM_BUILD_ROOT%{l_prefix}/lib/*.prl \
747 $RPM_BUILD_ROOT%{l_prefix}/lib/*.la
748 %if "%{with_shared}" == "yes"
749 # correct temporary runtime link paths (dynamic libs)
750 %{l_shtool} subst \
751 -e 's;/\./;/;g' \
752 -e 's;\(QMAKE_PRL_BUILD_DIR[\t ]*=\).*\(qt-everywhere-opensource-src-%{version}.*\);\1 /.../\2;' \
753 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}/lib;-L%{l_prefix}/lib/qt/dynamic;' \
754 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.prl \
755 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.la
756 # clean install by removing redundant paths (dynamic libs)
757 %{l_shtool} subst \
758 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
759 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.prl \
760 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.la
761 %endif
763 ## Doesn't work as expected, because RPM reads the --[in|ex]cludedocs
764 ## argument only when installing binary packages, rather than building.
765 #%define _excludedocs 0
766 #%define _includedocs 1
767 # echo %{_excludedocs}
768 # echo %{_includedocs}
769 #
770 ## Doesn't work as expected, because it seems that OpenPKG too mercilessly
771 ## removes RPM reading of the %docdir keyword in rpm.patch.feature.
772 # %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
773 # %{l_files_std} \
774 # '%docdir %{l_prefix}/share/pkg/doc'
775 #
776 ## Doesn't work as expected, because the rpmtool(1) marks
777 ## only einzeln files as documents, skipping directories
778 # %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
779 # %{l_files_std} \
780 # '%doc %{l_prefix}/share/pkg/doc/doc.txt'
781 #
782 # determine internal file listing
783 %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
784 %{l_files_std} \
785 '%not %dir %{l_prefix}/lib/pkgconfig'
787 %files -f files
789 %clean
790 rm -rf $RPM_BUILD_ROOT