/[gentoo-x86]/eclass/qt4-build.eclass
Gentoo

Diff of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.55 Revision 1.69
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2009 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.55 2009/12/22 16:04:13 abcd Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.69 2010/05/24 14:27:13 wired Exp $
4 4
5# @ECLASS: qt4-build.eclass 5# @ECLASS: qt4-build.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Ben de Groot <yngwin@gentoo.org>, 7# Ben de Groot <yngwin@gentoo.org>,
8# Markos Chandras <hwoarang@gentoo.org>, 8# Markos Chandras <hwoarang@gentoo.org>,
12# @DESCRIPTION: 12# @DESCRIPTION:
13# This eclass contains various functions that are used when building Qt4 13# This eclass contains various functions that are used when building Qt4
14 14
15inherit base eutils multilib toolchain-funcs flag-o-matic versionator 15inherit base eutils multilib toolchain-funcs flag-o-matic versionator
16 16
17MY_PV=${PV/_/-}
18if version_is_at_least 4.5.99999999; then
19 MY_P=qt-everywhere-opensource-src-${MY_PV}
20 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE="+exceptions"
21else
22 MY_P=qt-x11-opensource-src-${MY_PV}
23fi
24
25HOMEPAGE="http://qt.nokia.com/"
26SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
27
28LICENSE="|| ( LGPL-2.1 GPL-3 )"
17IUSE="debug pch" 29IUSE+=" debug pch aqua"
30
18RDEPEND=" 31RDEPEND="
19 !<x11-libs/qt-assistant-${PV} 32 !<x11-libs/qt-assistant-${PV}
20 !>x11-libs/qt-assistant-${PV}-r9999 33 !>x11-libs/qt-assistant-${PV}-r9999
21 !<x11-libs/qt-core-${PV} 34 !<x11-libs/qt-core-${PV}
22 !>x11-libs/qt-core-${PV}-r9999 35 !>x11-libs/qt-core-${PV}-r9999
24 !>x11-libs/qt-dbus-${PV}-r9999 37 !>x11-libs/qt-dbus-${PV}-r9999
25 !<x11-libs/qt-demo-${PV} 38 !<x11-libs/qt-demo-${PV}
26 !>x11-libs/qt-demo-${PV}-r9999 39 !>x11-libs/qt-demo-${PV}-r9999
27 !<x11-libs/qt-gui-${PV} 40 !<x11-libs/qt-gui-${PV}
28 !>x11-libs/qt-gui-${PV}-r9999 41 !>x11-libs/qt-gui-${PV}-r9999
42 !<x11-libs/qt-multimedia-${PV}
43 !>x11-libs/qt-multimedia-${PV}-r9999
29 !<x11-libs/qt-opengl-${PV} 44 !<x11-libs/qt-opengl-${PV}
30 !>x11-libs/qt-opengl-${PV}-r9999 45 !>x11-libs/qt-opengl-${PV}-r9999
31 !<x11-libs/qt-phonon-${PV} 46 !<x11-libs/qt-phonon-${PV}
32 !>x11-libs/qt-phonon-${PV}-r9999 47 !>x11-libs/qt-phonon-${PV}-r9999
33 !<x11-libs/qt-qt3support-${PV} 48 !<x11-libs/qt-qt3support-${PV}
44 !>x11-libs/qt-webkit-${PV}-r9999 59 !>x11-libs/qt-webkit-${PV}-r9999
45 !<x11-libs/qt-xmlpatterns-${PV} 60 !<x11-libs/qt-xmlpatterns-${PV}
46 !>x11-libs/qt-xmlpatterns-${PV}-r9999 61 !>x11-libs/qt-xmlpatterns-${PV}-r9999
47" 62"
48 63
49MY_PV=${PV/_/-}
50
51if version_is_at_least 4.5.99999999 ${PV} ; then
52 MY_P=qt-everywhere-opensource-src-${MY_PV}
53else
54 MY_P=qt-x11-opensource-src-${MY_PV}
55fi
56
57S=${WORKDIR}/${MY_P} 64S=${WORKDIR}/${MY_P}
58 65
59HOMEPAGE="http://qt.nokia.com/"
60SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
61
62LICENSE="|| ( LGPL-2.1 GPL-3 )"
63
64# @FUNCTION: qt4-build_pkg_setup 66# @FUNCTION: qt4-build_pkg_setup
65# @DESCRIPTION: 67# @DESCRIPTION:
66# Sets up PATH and LD_LIBRARY_PATH 68# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH
67qt4-build_pkg_setup() { 69qt4-build_pkg_setup() {
70 if [[ "${PN}" == "qt-webkit" ]]; then
71 if [[ "${CFLAGS}" =~ "-ggdb" ]] || [[ "${CXXFLAGS}" =~ "-ggdb" ]]; then
72 echo
73 ewarn "Your \$C{,XX}FLAGS contain -ggdb. You may experience really"
74 ewarn "long compilation times and/or increased memory usage."
75 ewarn "If compilation fails, please try removing -ggdb before"
76 ewarn "reporting a bug."
77 ewarn "For more info check out bug #307861"
78 echo
79 fi
80 fi
81
82 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
83
84 # Protect users by not allowing downgrades between releases
85 # Downgrading revisions within the same release should be allowed
86 if has_version '>'${CATEGORY}/${P}-r9999 ; then
87 if [[ -z $I_KNOW_WHAT_I_AM_DOING ]] ; then
88 eerror "Sanity check to keep you from breaking your system:"
89 eerror " Downgrading Qt is completely unsupported and will break your system!"
90 die "aborting to save your system"
91 else
92 ewarn "Downgrading Qt is completely unsupported and will break your system!"
93 fi
94 fi
95
68 PATH="${S}/bin${PATH:+:}${PATH}" 96 PATH="${S}/bin${PATH:+:}${PATH}"
97 if [[ ${CHOST} != *-darwin* ]]; then
69 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 98 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
99 else
100 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
101 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
102 # platform detection. Note: needs to come before any directories to
103 # avoid extract failure.
104 [[ ${CHOST} == *-apple-darwin* ]] && \
105 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
106 ${QT4_EXTRACT_DIRECTORIES}"
107 fi
70 108
71 # Make sure ebuilds use the required EAPI 109 # Make sure ebuilds use the required EAPI
72 if [[ ${EAPI} != 2 ]]; then 110 if [[ ${EAPI} != [23] ]]; then
73 eerror "The qt4-build eclass requires EAPI=2, but this ebuild does not" 111 eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
74 eerror "have EAPI=2 set. The ebuild author or editor failed. This ebuild needs" 112 eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
75 eerror "to be fixed. Using qt4-build-edge eclass without EAPI=2 will fail." 113 eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
76 die "qt4-build-edge eclass requires EAPI=2" 114 die "qt4-build eclass requires EAPI=2 or EAPI=3"
77 fi 115 fi
78 116
79 if ! version_is_at_least 4.1 $(gcc-version); then 117 if ! version_is_at_least 4.1 $(gcc-version); then
80 ewarn "Using a GCC version lower than 4.1 is not supported!" 118 ewarn "Using a GCC version lower than 4.1 is not supported!"
81 echo
82 ebeep 3
83 fi 119 fi
84
85 if [[ ${P} == qt-core-4.6.0_rc1 ]]; then
86 ewarn
87 ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1."
88 ewarn "If you are upgrading from 4.6.0_beta1, you'll have to"
89 ewarn "re-emerge everything that depends on Qt."
90 ewarn "Use the following command:"
91 ewarn
92 ewarn " emerge -av1 \$(for i in \$(qlist -IC x11-libs/qt-);"
93 ewarn " do equery -q d \$i | grep -v 'x11-libs/qt-' |"
94 ewarn " sed \"s/^/=/\"; done)"
95 ewarn
96 ewarn "YOU'VE BEEN WARNED"
97 ewarn
98 ebeep 3
99 fi
100
101} 120}
102 121
103# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 122# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
104# @DESCRIPTION: 123# @DESCRIPTION:
105# Arguments for build_target_directories. Takes the directories, in which the 124# Arguments for build_target_directories. Takes the directories, in which the
121 ${QT4_EXTRACT_DIRECTORIES}; do 140 ${QT4_EXTRACT_DIRECTORIES}; do
122 targets+=" ${MY_P}/${target}" 141 targets+=" ${MY_P}/${target}"
123 done 142 done
124 143
125 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 144 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
126 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 145 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
127} 146}
128 147
129# @ECLASS-VARIABLE: PATCHES 148# @ECLASS-VARIABLE: PATCHES
130# @DESCRIPTION: 149# @DESCRIPTION:
131# In case you have patches to apply, specify them in PATCHES variable. Make sure 150# In case you have patches to apply, specify them in PATCHES variable. Make sure
141# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 160# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
142qt4-build_src_prepare() { 161qt4-build_src_prepare() {
143 setqtenv 162 setqtenv
144 cd "${S}" 163 cd "${S}"
145 164
165 # fix qt 4.7 regression that skips -fvisibility=hidden
166 if [[ "${PV}" == "4.7.0_beta1" ]]; then
167 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
168 -i config.tests/unix/fvisibility.test ||
169 die "visibility fixing sed failed"
170 fi
171
172 if use aqua; then
173 # provide a proper macx-g++-64
174 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
175
176 sed -e '/^CONFIG/s:app_bundle::' \
177 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
178 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
179 fi
180
146 if [[ ${PN} != qt-core ]]; then 181 if [[ ${PN} != qt-core ]]; then
147 skip_qmake_build_patch 182 skip_qmake_build_patch
148 skip_project_generation_patch 183 skip_project_generation_patch
149 symlink_binaries_to_buildtree 184 symlink_binaries_to_buildtree
150 fi 185 fi
151 186
152 # Bug 282984 && Bug 295530 187 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
153 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \ 188 # qmake bus errors with -O2 but -O3 works
154 -i configure || die "sed qmake compilers failed" 189 replace-flags -O2 -O3
155 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX):" \ 190 fi
156 -i config.tests/unix/compile.test || die "sed test compilers failed"
157 191
158 # Bug 178652 192 # Bug 178652
159 if [[ $(gcc-major-version) == 3 ]] && use amd64; then 193 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
160 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" 194 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
161 append-flags -fno-gcse 195 append-flags -fno-gcse
174 if use ppc64; then 208 if use ppc64; then
175 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 209 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
176 append-flags -mminimal-toc 210 append-flags -mminimal-toc
177 fi 211 fi
178 212
213 # Bug 282984 && Bug 295530
214 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
215 -i configure || die "sed qmake compilers failed"
216 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):" \
217 -i config.tests/unix/compile.test || die "sed test compilers failed"
218
179 # Bug 172219 219 # Bug 172219
180 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
181 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
182 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
183 -e "s:X11R6/::" \ 220 sed -e "s:X11R6/::" \
184 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" 221 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
185 222
223 if [[ ${CHOST} == *-darwin* ]]; then
224 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
225 # crippled (by design) :/
186 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 226 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
187 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 227 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
188 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ 228 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
229 -e "s:-arch\s\w*::g" \
189 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 230 -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
231
232 # Fix configure's -arch settings that appear in qmake/Makefile and also
233 # fix arch handling (automagically duplicates our -arch arg and breaks
234 # pch). Additionally disable Xarch support.
235 sed \
236 -e "s:-arch i386::" \
237 -e "s:-arch ppc::" \
238 -e "s:-arch x86_64::" \
239 -e "s:-arch ppc64::" \
240 -e "s:-arch \$i::" \
241 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
242 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
243 -e "s:-Xarch_x86_64::g" \
244 -e "s:-Xarch_ppc64::g" \
245 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
246
247 # On Snow Leopard don't fall back to 10.5 deployment target.
248 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
249 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
250 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
251 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
252 fi
253 fi
254
255 # this one is needed for all systems with a separate -liconv, apart from
256 # Darwin, for which the sources already cater for -liconv
257 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
258 sed \
259 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
260 -i config.tests/unix/iconv/iconv.pro \
261 || die "sed on iconv.pro failed"
262 fi
263
264 # we need some patches for Solaris
265 sed -i \
266 -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
267 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
268 # use GCC over SunStudio
269 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
270 # don't flirt with non-Prefix stuff, we're quite possessive
271 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
272 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
190 273
191 base_src_prepare 274 base_src_prepare
192} 275}
193 276
194# @FUNCTION: qt4-build_src_configure 277# @FUNCTION: qt4-build_src_configure
196# Default configure phase 279# Default configure phase
197qt4-build_src_configure() { 280qt4-build_src_configure() {
198 setqtenv 281 setqtenv
199 myconf="$(standard_configure_options) ${myconf}" 282 myconf="$(standard_configure_options) ${myconf}"
200 283
284 # this one is needed for all systems with a separate -liconv, apart from
285 # Darwin, for which the sources already cater for -liconv
286 use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
287 myconf+=" -liconv"
288
289 if has glib ${IUSE//+} && use glib; then
290 # use -I, -L and -l from configure
291 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
292 # avoid the -pthread argument
293 myconf+=" ${glibflags//-pthread}"
294 unset glibflags
295 fi
296
297 if use aqua ; then
298 # On (snow) leopard use the new (frameworked) cocoa code.
299 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
300 myconf+=" -cocoa -framework"
301
302 # We are crazy and build cocoa + qt3support :-)
303 if use qt3support; then
304 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
305 -i configure
306 fi
307
308 # We need the source's headers, not the installed ones.
309 myconf+=" -I${S}/include"
310
311 # Add hint for the framework location.
312 myconf+=" -F${QTLIBDIR}"
313 fi
314 else
315 # freetype2 include dir is non-standard, thus include it on configure
316 # use -I from configure
317 myconf+=" $(pkg-config --cflags freetype2)"
318 fi
319
201 echo ./configure ${myconf} 320 echo ./configure ${myconf}
202 ./configure ${myconf} || die "./configure failed" 321 ./configure ${myconf} || die "./configure failed"
203 myconf="" 322 myconf=""
204} 323}
205 324
209 setqtenv 328 setqtenv
210 329
211 build_directories ${QT4_TARGET_DIRECTORIES} 330 build_directories ${QT4_TARGET_DIRECTORIES}
212} 331}
213 332
333# @FUNCTION: fix_includes
334# @DESCRIPTION:
335# For MacOSX we need to add some symlinks when frameworks are
336# being used, to avoid complications with some more or less stupid packages.
337fix_includes() {
338 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
339 # Some packages tend to include <Qt/...>
340 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
341
342 # Fake normal headers when frameworks are installed... eases life later on
343 local dest f
344 for frw in "${D}${QTLIBDIR}"/*.framework; do
345 [[ -e "${frw}"/Headers ]] || continue
346 f=$(basename ${frw})
347 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
348 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
349
350 # Link normal headers as well.
351 for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
352 h=$(basename ${hdr})
353 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
354 done
355 done
356 fi
357}
358
214# @FUNCTION: qt4-build_src_install 359# @FUNCTION: qt4-build_src_install
215# @DESCRIPTION: 360# @DESCRIPTION:
216# Perform the actual installation including some library fixes. 361# Perform the actual installation including some library fixes.
217qt4-build_src_install() { 362qt4-build_src_install() {
363 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
218 setqtenv 364 setqtenv
219 install_directories ${QT4_TARGET_DIRECTORIES} 365 install_directories ${QT4_TARGET_DIRECTORIES}
220 install_qconfigs 366 install_qconfigs
221 fix_library_files 367 fix_library_files
368 fix_includes
222} 369}
223 370
224# @FUNCTION: setqtenv 371# @FUNCTION: setqtenv
225setqtenv() { 372setqtenv() {
226 # Set up installation directories 373 # Set up installation directories
227 QTBASEDIR=/usr/$(get_libdir)/qt4 374 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
228 QTPREFIXDIR=/usr 375 QTPREFIXDIR=${EPREFIX}/usr
229 QTBINDIR=/usr/bin 376 QTBINDIR=${EPREFIX}/usr/bin
230 QTLIBDIR=/usr/$(get_libdir)/qt4 377 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
231 QMAKE_LIBDIR_QT=${QTLIBDIR} 378 QMAKE_LIBDIR_QT=${QTLIBDIR}
232 QTPCDIR=/usr/$(get_libdir)/pkgconfig 379 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
233 QTDATADIR=/usr/share/qt4 380 QTDATADIR=${EPREFIX}/usr/share/qt4
234 QTDOCDIR=/usr/share/doc/qt-${PV} 381 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
235 QTHEADERDIR=/usr/include/qt4 382 QTHEADERDIR=${EPREFIX}/usr/include/qt4
236 QTPLUGINDIR=${QTLIBDIR}/plugins 383 QTPLUGINDIR=${QTLIBDIR}/plugins
237 QTSYSCONFDIR=/etc/qt4 384 QTSYSCONFDIR=${EPREFIX}/etc/qt4
238 QTTRANSDIR=${QTDATADIR}/translations 385 QTTRANSDIR=${QTDATADIR}/translations
239 QTEXAMPLESDIR=${QTDATADIR}/examples 386 QTEXAMPLESDIR=${QTDATADIR}/examples
240 QTDEMOSDIR=${QTDATADIR}/demos 387 QTDEMOSDIR=${QTDATADIR}/demos
241 QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4 388 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
242 PLATFORM=$(qt_mkspecs_dir) 389 PLATFORM=$(qt_mkspecs_dir)
243 390
244 unset QMAKESPEC 391 unset QMAKESPEC
245} 392}
246 393
249# Sets up some standard configure options, like libdir (if necessary), whether 396# Sets up some standard configure options, like libdir (if necessary), whether
250# debug info is wanted or not. 397# debug info is wanted or not.
251standard_configure_options() { 398standard_configure_options() {
252 local myconf= 399 local myconf=
253 400
254 [[ $(get_libdir) != lib ]] && myconf+=" -L/usr/$(get_libdir)" 401 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
255 402
256 # Disable visibility explicitly if gcc version isn't 4 403 # Disable visibility explicitly if gcc version isn't 4
257 if [[ $(gcc-major-version) -lt 4 ]]; then 404 if [[ $(gcc-major-version) -lt 4 ]]; then
258 myconf+=" -no-reduce-exports" 405 myconf+=" -no-reduce-exports"
259 fi 406 fi
266 else 413 else
267 myconf+=" -release" 414 myconf+=" -release"
268 fi 415 fi
269 myconf+=" -no-separate-debug-info" 416 myconf+=" -no-separate-debug-info"
270 417
418 use aqua && myconf+=" -no-framework"
419
271 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 420 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
272 # $(tc-arch). Therefore we convert it to supported values. 421 # $(tc-arch). Therefore we convert it to supported values.
273 case "$(tc-arch)" in 422 case "$(tc-arch)" in
274 amd64) myconf+=" -arch x86_64" ;; 423 amd64|x64-*) myconf+=" -arch x86_64" ;;
424 ppc-macos) myconf+=" -arch ppc" ;;
275 ppc|ppc64) myconf+=" -arch powerpc" ;; 425 ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
426 sparc|sparc-*) myconf+=" -arch sparc" ;;
427 x86-macos) myconf+=" -arch x86" ;;
276 x86|x86-*) myconf+=" -arch i386" ;; 428 x86|x86-*) myconf+=" -arch i386" ;;
277 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;; 429 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
278 hppa|sh) myconf+=" -arch generic" ;; 430 hppa|sh) myconf+=" -arch generic" ;;
279 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 431 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
280 esac 432 esac
281 433
282 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build 434 # 4.5: build everything but qt-xmlpatterns w/o exceptions
283 local exceptions= 435 # 4.6: exceptions USE flag
436 local exceptions="-exceptions"
284 case "${PV}" in 437 case "${PV}" in
285 4.6.*) 438 4.5.*)
286 if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then 439 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
287 exceptions="-no-exceptions"
288 fi
289 ;; 440 ;;
290 *) 441 *)
291 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions" 442 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
292 ;; 443 ;;
293 esac 444 esac
445
446 # note about -reduce-relocations:
447 # That flag seems to introduce major breakage to applications,
448 # mostly to be seen as a core dump with the message "QPixmap: Must
449 # construct a QApplication before a QPaintDevice" on Solaris
450 # -- Daniel Vergien
451 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
294 452
295 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license 453 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
296 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 454 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
297 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} 455 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
298 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} 456 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
299 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} 457 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
300 -demosdir ${QTDEMOSDIR} -silent -fast -opensource 458 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
301 ${exceptions} 459 ${exceptions}
302 -reduce-relocations -nomake examples -nomake demos" 460 -nomake examples -nomake demos"
303 461
304 echo "${myconf}" 462 echo "${myconf}"
305} 463}
306 464
307# @FUNCTION: build_directories 465# @FUNCTION: build_directories
308# @USAGE: < directories > 466# @USAGE: < directories >
309# @DESCRIPTION: 467# @DESCRIPTION:
310# Compiles the code in $QT4_TARGET_DIRECTORIES 468# Compiles the code in $QT4_TARGET_DIRECTORIES
311build_directories() { 469build_directories() {
312 for x in "$@"; do 470 for x in "$@"; do
313 cd "${S}"/${x} 471 pushd "${S}"/${x} >/dev/null
314 sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/linux.conf || die 472 # avoid running over the maximum argument number, bug #299810
473 {
474 echo "${S}"/mkspecs/common/*.conf
475 find "${S}" -name '*.pr[io]'
476 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
315 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 477 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
316 emake CC="@echo compiling \$< && $(tc-getCC)" \ 478 emake CC="$(tc-getCC)" \
317 CXX="@echo compiling \$< && $(tc-getCXX)" \ 479 CXX="$(tc-getCXX)" \
318 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed" 480 LINK="$(tc-getCXX)" || die "emake failed"
481 popd >/dev/null
319 done 482 done
320} 483}
321 484
322# @FUNCTION: install_directories 485# @FUNCTION: install_directories
323# @USAGE: < directories > 486# @USAGE: < directories >
352 local x 515 local x
353 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 516 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
354 for x in QCONFIG_ADD QCONFIG_REMOVE; do 517 for x in QCONFIG_ADD QCONFIG_REMOVE; do
355 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 518 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
356 done 519 done
357 insinto ${QTDATADIR}/mkspecs/gentoo 520 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
358 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" 521 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
359 fi 522 fi
360 523
361 if [[ -n ${QCONFIG_DEFINE} ]]; then 524 if [[ -n ${QCONFIG_DEFINE} ]]; then
362 for x in ${QCONFIG_DEFINE}; do 525 for x in ${QCONFIG_DEFINE}; do
363 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h 526 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
364 done 527 done
365 insinto ${QTHEADERDIR}/Gentoo 528 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
366 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 529 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
367 fi 530 fi
368} 531}
369 532
370# @FUNCTION: generate_qconfigs 533# @FUNCTION: generate_qconfigs
434# @FUNCTION: qt4-build_pkg_postinst 597# @FUNCTION: qt4-build_pkg_postinst
435# @DESCRIPTION: Generate configuration, plus throws a message about possible 598# @DESCRIPTION: Generate configuration, plus throws a message about possible
436# breakages and proposed solutions. 599# breakages and proposed solutions.
437qt4-build_pkg_postinst() { 600qt4-build_pkg_postinst() {
438 generate_qconfigs 601 generate_qconfigs
439
440 if [[ "${PN}" == "qt-core" ]]; then
441 echo
442 ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
443 ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
444 ewarn "should recompile the packages providing these plugins. Also, make sure you"
445 ewarn "compile the Qt packages, and the packages that depend on it, with the same"
446 ewarn "GCC version and the same USE flag settings (especially the debug flag)."
447 ewarn
448 ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
449 ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
450 ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
451 ewarn "configuration."
452 ewarn
453 ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html"
454 echo
455 fi
456} 602}
457 603
458# @FUNCTION: skip_qmake_build_patch 604# @FUNCTION: skip_qmake_build_patch
459# @DESCRIPTION: 605# @DESCRIPTION:
460# Don't need to build qmake, as it's already installed from qt-core 606# Don't need to build qmake, as it's already installed from qt-core
497 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 643 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
498 if [[ -e ${libfile} ]]; then 644 if [[ -e ${libfile} ]]; then
499 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed" 645 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
500 646
501 # Move .pc files into the pkgconfig directory 647 # Move .pc files into the pkgconfig directory
502 dodir ${QTPCDIR} 648 dodir ${QTPCDIR#${EPREFIX}}
503 mv ${libfile} "${D}"/${QTPCDIR}/ \ 649 mv ${libfile} "${D}"/${QTPCDIR}/ \
504 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed." 650 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
505 fi 651 fi
506 done 652 done
507 653
545 *-openbsd*) 691 *-openbsd*)
546 spec=openbsd ;; 692 spec=openbsd ;;
547 *-netbsd*) 693 *-netbsd*)
548 spec=netbsd ;; 694 spec=netbsd ;;
549 *-darwin*) 695 *-darwin*)
696 if use aqua; then
697 # mac with carbon/cocoa
698 spec=macx
699 else
700 # darwin/mac with x11
550 spec=darwin ;; 701 spec=darwin
702 fi
703 ;;
704 *-solaris*)
705 spec=solaris ;;
551 *-linux-*|*-linux) 706 *-linux-*|*-linux)
552 spec=linux ;; 707 spec=linux ;;
553 *) 708 *)
554 die "Unknown CHOST, no platform choosen." 709 die "Unknown CHOST, no platform choosen."
555 esac 710 esac
564 fi 719 fi
565 if [[ -n ${LIBDIR/lib} ]]; then 720 if [[ -n ${LIBDIR/lib} ]]; then
566 spec+=-${LIBDIR/lib} 721 spec+=-${LIBDIR/lib}
567 fi 722 fi
568 723
724 # Add -64 for 64bit profiles
725 if use x64-freebsd ||
726 use amd64-linux ||
727 use x64-macos ||
728 use x64-solaris ||
729 use sparc64-solaris
730 then
731 spec+=-64
732 fi
733
569 echo "${spec}" 734 echo "${spec}"
570} 735}
571 736
572EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst 737EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst

Legend:
Removed from v.1.55  
changed lines
  Added in v.1.69

  ViewVC Help
Powered by ViewVC 1.1.20