Sun, 29 May 2011 16:25:02 +0200
Make small corrections and improve comments for upcoming package finishing.
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: MSvB Recherche 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 # MSvB In R/D: %{l_shtool} subst \
170 # MSvB In R/D: -e 's;\(TRY_INCLUDEPATHS = \).*\(\$\$INCLUDEPATH\);\1\2;' \
171 # MSvB In R/D: -e 's;/freetype2;/freetype;' \
172 # MSvB In R/D: 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 %{l_shtool} subst \
280 -e "s;^\(QMAKE_INCDIR_X11[^=]*=\).*;\1 $x11_incdir;" \
281 -e "s;^\(QMAKE_LIBDIR_X11[^=]*=\).*;\1 $x11_libdir;" \
282 mkspecs/qws/*/qmake.conf \
283 mkspecs/*/qmake.conf
284 # MSvB In R/D: %{l_shtool} subst \
285 # MSvB In R/D: -e 's;^\(QMAKE_LIBS +=.*\);\1 -liconv;' \
286 # MSvB In R/D: src/corelib/corelib.pro
287 # Trolltech Bug:
288 # In file included from ../JavaScriptCore/runtime/RegExp.h:29:0,
289 # ../JavaScriptCore/yarr/RegexJIT.h: In destructor 'JSC::Yarr::RegexCodeBlock::~RegexCodeBlock()':
290 # ../JavaScriptCore/yarr/RegexJIT.h:63:36: error: 'jsRegExpFree' was not declared in this scope
291 %{l_shtool} subst \
292 -e 's;\(DESTDIR *=\) *\$\$JAVASCRIPTCORE_DESTDIR;\1 $$QMAKE_LIBDIR_QT;' \
293 src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
294 # Trolltech Bug:
295 # In file included from ../JavaScriptCore/runtime/RegExp.h:29:0,
296 # ../JavaScriptCore/yarr/RegexJIT.h: In destructor 'JSC::Yarr::RegexCodeBlock::~RegexCodeBlock()':
297 # ../JavaScriptCore/yarr/RegexJIT.h:63:36: error: 'jsRegExpFree' was not declared in this scope
298 %{l_shtool} subst \
299 -e 's;\(pathToJavaScriptCoreOutput *=\) *\$\$ARGS/\$\$JAVASCRIPTCORE_DESTDIR;\1 $$QMAKE_LIBDIR_QT;g' \
300 src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
301 # MSvB In R/D: echo "QMAKE_LIBDIR += %{l_prefix}/lib/qt/dynamic" \
302 # MSvB In R/D: >>mkspecs/features/shared.prf
303 # MSvB In R/D: %{l_shtool} subst \
304 # MSvB In R/D: -e 's; *\.\./3rdparty/freetype/.*;;g' \
305 # MSvB In R/D: -e 's;^\( *contains(QT_CONFIG, freetype) {\);\1 LIBS += -lfreetype;' \
306 # MSvB In R/D: src/gui/text/text.pri
307 # Trolltech Bug:
308 # image/qtiffhandler.cpp:48:20: fatal error: tiffio.h: No such file or directory
309 # compilation terminated.
310 # make[1]: *** [.obj/release-static/qtiffhandler.o] Error 1
311 %{l_shtool} subst \
312 -e 's;\(#include *"\)\(tiffio.h"\);\1tiff/\2;' \
313 src/gui/image/qtiffhandler.cpp
314 # Trolltech Bug:
315 # In file included from ../../../gui/image/qjpeghandler.cpp:42:0:
316 # ../../../gui/image/qjpeghandler_p.h:45:35: fatal error:
317 # QtGui/qimageiohandler.h: No such file or directory
318 %{l_shtool} subst \
319 -e 's;\(INCLUDEPATH *\*=\)\( *\);\1 $RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include\2;' \
320 src/gui/image/qjpeghandler.pri
321 # MSvB In R/D: %{l_shtool} subst \
322 # MSvB In R/D: -e 's;\(CONFIG[\t ]*+=[\t ]*qt\);\1 x11;' \
323 # MSvB In R/D: tools/qtconfig/qtconfig.pro
324 # MSvB In R/D: %{l_shtool} subst \
325 # MSvB In R/D: -e 's;webkit;web-broken-kit;g' \
326 # MSvB In R/D: tools/assistant/tools/assistant/assistant.pro
327 # MSvB In R/D: echo "DEFINES += QT_NO_WEBKIT" \
328 # MSvB In R/D: >>tools/assistant/tools/assistant/assistant.pro
329 # MSvB In R/D: %{l_shtool} subst \
330 # MSvB In R/D: -e 's;Qt.s Classes;All Classes;' \
331 # MSvB In R/D: tools/assistant/tools/assistant/doc/assistant.qdoc \
332 # MSvB In R/D: tools/qdoc3/doc/qdoc-manual.qdoc \
333 # MSvB In R/D: tools/qdoc3/doc/files/qt.qdocconf \
334 # MSvB In R/D: tools/qdoc3/test/qt-build-docs.qdocconf \
335 # MSvB In R/D: tools/qdoc3/test/qt.qdocconf
336 # Trolltech Bug:
337 # In file included from qpaintengine_vg.cpp:42:0:
338 # qpaintengine_vg_p.h:66:39: error: expected initializer before ':' token
339 # make[1]: *** [.obj/release-static/qpaintengine_vg.o] Error 1
340 # make: *** [sub-openvg-sub_src_target_ordered] Error 2
341 %{l_shtool} subst \
342 -e 's;Q_OPENVG_EXPORT;Q_DECL_EXPORT;g' \
343 src/openvg/*
345 %build
346 # protect against sloppy code inclusion of all unused subprojects
347 # MSvB In R/D: ce-compat clucene des easing harfbuzz javascriptcore md4 md5 s60 sha1 webkit xorg zlib_dependency.pri
348 (cd src/3rdparty && rm -rf [^cdehjmswxz]* sql* win* zlib zlib.pri) || exit $?
350 # detect which platform for which to build
351 case "%{l_platform -t}" in
352 sun4[uv]-sunos* | amd64-sunos* ) platcomp="solaris-g++-64" ;;
353 i?86-sunos* ) platcomp="solaris-g++" ;;
354 amd64-linux* ) platcomp="linux-g++-64" ;;
355 i?86-linux* ) platcomp="linux-g++" ;;
356 amd64-freebsd* | i?86-freebsd* ) platcomp="freebsd-g++" ;;
357 *-aix* ) platcomp="aix-g++" ;;
358 *-darwin* ) platcomp="macx-g++" ;;
359 *-hpux* ) platcomp="hpux-g++" ;;
360 *-irix* ) platcomp="irix-g++" ;;
361 * ) echo "Platform '%{l_platform -t}' is not supported." 2>&1; exit 1 ;;
362 esac
364 # detect which architecture extensions are available
365 archflags=''
366 case "%{l_platform -t}" in
367 amd64-* )
368 break
369 ;;
370 * )
371 archflags='-no-sse2 -no-3dnow'
372 ;;
373 esac
375 %if "%{with_shared}" == "yes"
376 # optional shared build (precedes mandatory static build)
377 echo 'yes' | ./configure \
378 $archflags \
379 -opensource \
380 -prefix %{l_prefix} \
381 -bindir %{l_prefix}/bin \
382 -libdir %{l_prefix}/lib/qt/dynamic \
383 -docdir %{l_prefix}/share/qt/doc \
384 -headerdir %{l_prefix}/include \
385 -plugindir %{l_prefix}/lib/qt/plugins \
386 -datadir %{l_prefix}/share/qt \
387 -translationdir %{l_prefix}/share/qt/translations \
388 -sysconfdir %{l_prefix}/etc/qt \
389 -examplesdir %{l_prefix}/share/qt/examples \
390 -demosdir %{l_prefix}/share/qt/demos \
391 %if 0
392 # Build time Qt definitions should predominate,
393 # otherwise foreign definitions cause errors like:
394 #
395 # g++ -c -I/foreign/include [...] animation/qguivariantanimation.cpp
396 # .moc/release-shared/moc_qnamespace.cpp:426:16: error: 'WA_LockPortraitOrientation' is not a member of 'Qt'
397 # .moc/release-shared/moc_qnamespace.cpp:427:16: error: 'WA_LockLandscapeOrientation' is not a member of 'Qt'
398 # .moc/release-shared/moc_qnamespace.cpp:428:16: error: 'WA_AutoOrientation' is not a member of 'Qt'
399 # .moc/release-shared/moc_qnamespace.cpp:440:16: error: 'AA_S60DisablePartialScreenInputMode' is not a member of 'Qt'
400 #
401 # Other problems include flawed definitions polluting (C|CXX)FLAGS
402 # and overriding the correct definitions in CPPFLAGS. Variables
403 # like QMAKE_(C|CXX)FLAGS exhibit this problem as well.
404 #
405 # The work around is to force a Qt dist include path in (C|CXX)FLAGS.
406 %endif
407 -I$RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include \
408 -release \
409 -shared \
410 -platform $platcomp \
411 -s60 \
412 -qt-style-s60 \
413 -no-sql-ibase \
414 %if "%{with_glib}" == "yes"
415 -glib \
416 %else
417 -no-glib \
418 %endif
419 %if "%{with_mysql}" == "yes"
420 -qt-sql-mysql \
421 -plugin-sql-mysql \
422 %else
423 -no-sql-mysql \
424 %endif
425 %if "%{with_pgsql}" == "yes"
426 -qt-sql-psql \
427 -plugin-sql-psql \
428 %else
429 -no-sql-psql \
430 %endif
431 -no-sql-odbc \
432 -system-sqlite \
433 -qt-sql-sqlite \
434 -plugin-sql-sqlite \
435 -no-sql-sqlite2 \
436 -openssl-linked \
437 -optimized-qmake \
438 -xmlpatterns \
439 -svg \
440 -webkit \
441 -system-zlib \
442 -qt-gif \
443 -system-libpng \
444 -system-libmng \
445 -system-libjpeg \
446 -system-libtiff \
447 -rpath \
448 -no-cups \
449 -iconv \
450 -pch \
451 -dbus-linked \
452 -opengl \
453 -openvg \
454 -xrender \
455 -fontconfig \
456 -freetype
458 # default options are implicitly used, for example...
459 #-no-fast -exceptions -accessibility -stl -qt3support -nis
460 #-sm -xshape -xinerama -xcursor -xfixes -xrandr -tablet -xkb
462 # carry out shared build procedure
463 ( cd src
464 %{l_make} %{l_mflags -O} \
465 sub-moc sub-rcc sub-uic sub-uic3
466 ) || exit $?
467 %{l_make} %{l_mflags -O} \
468 sub-corelib-make_default-ordered \
469 sub-xml-make_default-ordered \
470 sub-network-make_default-ordered \
471 sub-sql-make_default-ordered \
472 sub-testlib-make_default-ordered \
473 sub-dbus-make_default-ordered \
474 sub-gui-make_default-ordered \
475 sub-qt3support-make_default-ordered \
476 sub-opengl-make_default-ordered \
477 sub-xmlpatterns-make_default-ordered \
478 sub-multimedia-make_default-ordered \
479 sub-svg-make_default-ordered \
480 sub-script-make_default-ordered \
481 sub-declarative-make_default-ordered \
482 sub-javascriptcore-make_default-ordered \
483 sub-webkit-make_default-ordered \
484 sub-scripttools-make_default-ordered \
485 sub-plugins-make_default-ordered \
486 sub-imports-make_default-ordered \
487 sub-webkitdeclarative-make_default-ordered \
488 sub-translations-make_default-ordered
490 # arthur plugin requires libQtDesigner
491 ( cd demos
492 ( cd ../tools/designer/src/lib
493 %{l_make} %{l_mflags -O}
494 ) || exit $?
495 %{l_make} %{l_mflags -O} sub-arthurplugin
496 ) || exit $?
498 # cache shared libs and initialize the build configuration, which
499 # would otherwise still contain references to our shared libs build
500 %{l_shtool} mkdir -f -p -m 755 sharbuild/dynamic
501 mv lib/* sharbuild/dynamic/
502 mv plugins sharbuild/
503 %{l_make} %{l_mflags} confclean
504 %endif
506 # mandatory static build (follows optional shared build)
507 echo 'yes' | ./configure \
508 $archflags \
509 -opensource \
510 -prefix %{l_prefix} \
511 -bindir %{l_prefix}/bin \
512 -libdir %{l_prefix}/lib \
513 -docdir %{l_prefix}/share/qt/doc \
514 -headerdir %{l_prefix}/include \
515 -plugindir %{l_prefix}/lib/qt/plugins \
516 -datadir %{l_prefix}/share/qt \
517 -translationdir %{l_prefix}/share/qt/translations \
518 -sysconfdir %{l_prefix}/etc/qt \
519 -examplesdir %{l_prefix}/share/qt/examples \
520 -demosdir %{l_prefix}/share/qt/demos \
521 %if 0
522 # Build time Qt definitions should predominate,
523 # otherwise foreign definitions cause errors like:
524 #
525 # g++ -c -I/foreign/include [...] animation/qguivariantanimation.cpp
526 # .moc/release-shared/moc_qnamespace.cpp:426:16: error: 'WA_LockPortraitOrientation' is not a member of 'Qt'
527 # .moc/release-shared/moc_qnamespace.cpp:427:16: error: 'WA_LockLandscapeOrientation' is not a member of 'Qt'
528 # .moc/release-shared/moc_qnamespace.cpp:428:16: error: 'WA_AutoOrientation' is not a member of 'Qt'
529 # .moc/release-shared/moc_qnamespace.cpp:440:16: error: 'AA_S60DisablePartialScreenInputMode' is not a member of 'Qt'
530 #
531 # Other problems include flawed definitions polluting (C|CXX)FLAGS
532 # and overriding the correct definitions in CPPFLAGS. Variables
533 # like QMAKE_(C|CXX)FLAGS exhibit this problem as well.
534 #
535 # The work around is to force a Qt dist include path in (C|CXX)FLAGS.
536 %endif
537 -I$RPM_BUILD_DIR/qt-everywhere-opensource-src-%{version}/include \
538 -release \
539 -static \
540 -platform $platcomp \
541 -s60 \
542 -qt-style-s60 \
543 -no-sql-ibase \
544 %if "%{with_glib}" == "yes"
545 -glib \
546 %else
547 -no-glib \
548 %endif
549 %if "%{with_mysql}" == "yes"
550 -qt-sql-mysql \
551 %else
552 -no-sql-mysql \
553 %endif
554 %if "%{with_pgsql}" == "yes"
555 -qt-sql-psql \
556 %else
557 -no-sql-psql \
558 %endif
559 -no-sql-odbc \
560 -system-sqlite \
561 -qt-sql-sqlite \
562 -no-sql-sqlite2 \
563 -openssl-linked \
564 -optimized-qmake \
565 -xmlpatterns \
566 -svg \
567 -webkit \
568 -system-zlib \
569 -qt-gif \
570 -system-libpng \
571 -system-libmng \
572 -system-libjpeg \
573 -system-libtiff \
574 -rpath \
575 -no-cups \
576 -iconv \
577 -pch \
578 -dbus-linked \
579 -opengl \
580 -openvg \
581 -xrender \
582 -fontconfig \
583 -freetype
585 # default options are implicitly used, for example...
586 #-no-fast -exceptions -accessibility -stl -qt3support -nis
587 #-sm -xshape -xinerama -xcursor -xfixes -xrandr -tablet -xkb
589 # carry out static build procedure
590 # Trolltech Bug:
591 # Problem with dependency order, causes compiling of qtreeview.cpp
592 # with dependency to moc_qtreeview.cpp before moc(1) has finished.
593 # The implemented work around is disabling parallel make, causing
594 # a nearly 100% build deceleration but allowing the build to procede.
595 # In file included from itemviews/qtreeview.cpp:3761:0:
596 # .moc/release-static/moc_qtreeview.cpp: In member function 'QPixmap QTreeViewPrivate::renderTreeToPixmapForAnimation(const QRect&) const':
597 # .moc/release-static/moc_qtreeview.cpp:209:1: internal compiler error: Segmentation fault
598 %{l_make} %{l_mflags} sub-src
599 %if "%{with_tools}" == "yes"
600 %{l_make} %{l_mflags -O} \
601 sub-tools-make_default-ordered sub-translations-make_default-ordered
602 %endif
603 %if "%{with_examples}" == "yes"
604 %{l_make} %{l_mflags -O} \
605 sub-demos-make_default-ordered \
606 sub-examples-make_default-ordered
607 %endif
608 %if "%{with_tools}" == "yes"
609 %{l_make} %{l_mflags -O} docs
610 %else
611 %if "%{with_examples}" == "yes"
612 %{l_make} %{l_mflags -O} docs
613 %endif
614 %endif
616 %install
617 rm -rf $RPM_BUILD_ROOT
619 # carry out installation procedure
620 targets="sub-tools-bootstrap-install_subtargets-ordered \
621 sub-moc-install_subtargets-ordered \
622 sub-rcc-install_subtargets-ordered \
623 sub-uic-install_subtargets-ordered \
624 sub-corelib-install_subtargets-ordered \
625 sub-xml-install_subtargets-ordered \
626 sub-network-install_subtargets-ordered \
627 sub-sql-install_subtargets-ordered \
628 sub-testlib-install_subtargets-ordered \
629 sub-dbus-install_subtargets-ordered \
630 sub-gui-install_subtargets-ordered \
631 sub-qt3support-install_subtargets-ordered \
632 sub-uic3-install_subtargets-ordered \
633 sub-opengl-install_subtargets-ordered \
634 sub-xmlpatterns-install_subtargets-ordered \
635 sub-multimedia-install_subtargets-ordered \
636 sub-svg-install_subtargets-ordered \
637 sub-script-install_subtargets-ordered \
638 sub-declarative-install_subtargets-ordered \
639 sub-scripttools-install_subtargets-ordered \
640 sub-imports-install_subtargets-ordered \
641 sub-translations-install_subtargets-ordered"
643 %if "%{with_tools}" == "yes"
644 targets="$targets sub-tools-install_subtargets-ordered install_htmldocs install_qchdocs install_docimages"
645 %endif
646 %if "%{with_examples}" == "yes"
647 targets="$targets sub-demos-install_subtargets-ordered sub-examples-install_subtargets-ordered install_htmldocs install_qchdocs install_docimages"
648 %endif
649 targets="$targets install_qmake install_mkspecs"
650 %{l_make} %{l_mflags} $targets INSTALL_ROOT="$RPM_BUILD_ROOT"
651 %{l_shtool} install -c -m 644 \
652 lib/libjscore.a lib/libjscore.prl \
653 $RPM_BUILD_ROOT%{l_prefix}/lib/
655 # correct paths in pkg-config(1) configuration files
656 %{l_shtool} subst \
657 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version};-L%{l_prefix};' \
658 -e 's;=\([\t ]*\)[^\t ]*qt-everywhere-opensource-src-%{version};=\1%{l_prefix};g' \
659 $RPM_BUILD_ROOT%{l_prefix}/lib/pkgconfig/*
660 # keep library paths clean by removing redundant paths
661 %{l_shtool} subst \
662 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
663 $RPM_BUILD_ROOT%{l_prefix}/lib/pkgconfig/*
665 # install static or shared plugins according to user choice
666 %if "%{with_shared}" != "yes"
667 %{l_make} %{l_mflags} sub-plugins-install_subtargets-ordered INSTALL_ROOT="$RPM_BUILD_ROOT"
668 %else
669 %{l_tar} cf - -C sharbuild plugins | %{l_tar} xf - -C $RPM_BUILD_ROOT%{l_prefix}/lib/qt
670 %endif
672 %if "%{with_shared}" == "yes"
673 # install shared libs and symlinks
674 %{l_shtool} mkdir -f -p -m 755 \
675 $RPM_BUILD_ROOT%{l_prefix}/lib/qt
676 %{l_tar} cf - -C sharbuild dynamic | %{l_tar} xf - -C $RPM_BUILD_ROOT%{l_prefix}/lib/qt
678 # offer limited support of pkg-config(1) for shared libs
679 # substitution unfortunately only handles paths with no whitespace
680 %{l_shtool} subst \
681 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}/lib;-L%{l_prefix}/lib/qt/dynamic;' \
682 -e 's;=\([\t ]*\)[^\t ]*qt-everywhere-opensource-src-%{version};=\1%{l_prefix};g' \
683 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/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/qt/dynamic/pkgconfig/*
689 # explain nonstandard shared library placement
690 ( echo "This OpenPKG Qt build is using the with_shared option."
691 echo ""
692 echo "The directory %{l_prefix}/lib/qt/dynamic contains the"
693 echo "requested shared libraries. Although shared libraries"
694 echo "have been optionally built (see the build time"
695 echo "'with_shared yes' option), static libraries were"
696 echo "built by default as usual, and installed in the"
697 echo "standard library directory %{l_prefix}/lib."
698 echo ""
699 echo "To build applications using shared libraries instead,"
700 echo "please direct pkg-config(1) to use the proper definitions"
701 echo "by setting the environment variable PKG_CONFIG_PATH to "
702 echo "%{l_prefix}/lib/qt/dynamic/pkgconfig."
703 echo ""
704 echo "Note: If building via qmake(1), please append"
705 echo " either 'static' or 'shared' to the line"
706 echo " 'CONFIG +=' in the project file (name.pro)."
707 echo " Then execute %{l_prefix}/bin/qmake on this file."
708 ) >$RPM_BUILD_ROOT%{l_prefix}/lib/qt/README
709 %endif
711 # correct temporary runtime link paths (static libs)
712 %{l_shtool} subst \
713 -e 's;/./;/;g' \
714 -e 's;\(QMAKE_PRL_BUILD_DIR[\t ]*=\).*\(qt-everywhere-opensource-src-%{version}.*\);\1 /.../\2;' \
715 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version};-L%{l_prefix};' \
716 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/plugins/*/*.prl \
717 $RPM_BUILD_ROOT%{l_prefix}/lib/*.prl \
718 $RPM_BUILD_ROOT%{l_prefix}/lib/*.la
719 # clean install by removing redundant paths (static libs)
720 %{l_shtool} subst \
721 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
722 $RPM_BUILD_ROOT%{l_prefix}/lib/*.prl \
723 $RPM_BUILD_ROOT%{l_prefix}/lib/*.la
724 %if "%{with_shared}" == "yes"
725 # correct temporary runtime link paths (dynamic libs)
726 %{l_shtool} subst \
727 -e 's;/\./;/;g' \
728 -e 's;\(QMAKE_PRL_BUILD_DIR[\t ]*=\).*\(qt-everywhere-opensource-src-%{version}.*\);\1 /.../\2;' \
729 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}/lib;-L%{l_prefix}/lib/qt/dynamic;' \
730 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.prl \
731 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.la
732 # clean install by removing redundant paths (dynamic libs)
733 %{l_shtool} subst \
734 -e 's;-L[\t ]*[^\t ]*qt-everywhere-opensource-src-%{version}[^\t ]*[\t ]*;;g' \
735 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.prl \
736 $RPM_BUILD_ROOT%{l_prefix}/lib/qt/dynamic/*.la
737 %endif
739 ## Doesn't work as expected, because RPM reads the --[in|ex]cludedocs
740 ## argument only when installing binary packages, rather than building.
741 #%define _excludedocs 0
742 #%define _includedocs 1
743 # echo %{_excludedocs}
744 # echo %{_includedocs}
745 #
746 ## Doesn't work as expected, because it seems that OpenPKG too mercilessly
747 ## removes RPM reading of the %docdir keyword in rpm.patch.feature.
748 # %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
749 # %{l_files_std} \
750 # '%docdir %{l_prefix}/share/pkg/doc'
751 #
752 ## Doesn't work as expected, because the rpmtool(1) marks
753 ## only einzeln files as documents, skipping directories
754 # %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
755 # %{l_files_std} \
756 # '%doc %{l_prefix}/share/pkg/doc/doc.txt'
757 #
758 # determine internal file listing
759 %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
760 %{l_files_std} \
761 '%not %dir %{l_prefix}/lib/pkgconfig'
763 %files -f files
765 %clean
766 rm -rf $RPM_BUILD_ROOT