/[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.65
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.65 2010/02/17 23:32:24 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 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
71
72
68 PATH="${S}/bin${PATH:+:}${PATH}" 73 PATH="${S}/bin${PATH:+:}${PATH}"
74 if [[ ${CHOST} != *-darwin* ]]; then
69 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 75 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
76 else
77 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
78 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
79 # platform detection. Note: needs to come before any directories to
80 # avoid extract failure.
81 [[ ${CHOST} == *-apple-darwin* ]] && \
82 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm ${QT4_EXTRACT_DIRECTORIES}"
83 fi
70 84
71 # Make sure ebuilds use the required EAPI 85 # Make sure ebuilds use the required EAPI
72 if [[ ${EAPI} != 2 ]]; then 86 if [[ ${EAPI} != [23] ]]; then
73 eerror "The qt4-build eclass requires EAPI=2, but this ebuild does not" 87 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" 88 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." 89 eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
76 die "qt4-build-edge eclass requires EAPI=2" 90 die "qt4-build eclass requires EAPI=2 or EAPI=3"
77 fi 91 fi
78 92
79 if ! version_is_at_least 4.1 $(gcc-version); then 93 if ! version_is_at_least 4.1 $(gcc-version); then
80 ewarn "Using a GCC version lower than 4.1 is not supported!" 94 ewarn "Using a GCC version lower than 4.1 is not supported!"
81 echo 95 echo
82 ebeep 3 96 ebeep 3
83 fi 97 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} 98}
102 99
103# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 100# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
104# @DESCRIPTION: 101# @DESCRIPTION:
105# Arguments for build_target_directories. Takes the directories, in which the 102# Arguments for build_target_directories. Takes the directories, in which the
121 ${QT4_EXTRACT_DIRECTORIES}; do 118 ${QT4_EXTRACT_DIRECTORIES}; do
122 targets+=" ${MY_P}/${target}" 119 targets+=" ${MY_P}/${target}"
123 done 120 done
124 121
125 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 122 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
126 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 123 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
127} 124}
128 125
129# @ECLASS-VARIABLE: PATCHES 126# @ECLASS-VARIABLE: PATCHES
130# @DESCRIPTION: 127# @DESCRIPTION:
131# In case you have patches to apply, specify them in PATCHES variable. Make sure 128# 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. 138# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
142qt4-build_src_prepare() { 139qt4-build_src_prepare() {
143 setqtenv 140 setqtenv
144 cd "${S}" 141 cd "${S}"
145 142
143 if use aqua; then
144 # provide a proper macx-g++-64
145 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
146
147 sed -e '/^CONFIG/s:app_bundle::' \
148 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
149 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
150 fi
151
146 if [[ ${PN} != qt-core ]]; then 152 if [[ ${PN} != qt-core ]]; then
147 skip_qmake_build_patch 153 skip_qmake_build_patch
148 skip_project_generation_patch 154 skip_project_generation_patch
149 symlink_binaries_to_buildtree 155 symlink_binaries_to_buildtree
156 fi
157
158 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
159 # qmake bus errors with -O2 but -O3 works
160 replace-flags -O2 -O3
150 fi 161 fi
151 162
152 # Bug 282984 && Bug 295530 163 # Bug 282984 && Bug 295530
153 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \ 164 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \
154 -i configure || die "sed qmake compilers failed" 165 -i configure || die "sed qmake compilers failed"
181 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 192 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
182 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ 193 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
183 -e "s:X11R6/::" \ 194 -e "s:X11R6/::" \
184 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" 195 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
185 196
197 if [[ ${CHOST} != *-darwin* ]]; then
186 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 198 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
187 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 199 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
188 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ 200 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
189 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 201 -i mkspecs/common/g++.conf || die "sed mkspecs/common/g++.conf failed"
202 else
203 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
204 # crippled (by design) :/
205 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
206 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
207 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
208 -e "s:-arch\s\w*::g" \
209 -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
210
211 # Fix configure's -arch settings that appear in qmake/Makefile and also
212 # fix arch handling (automagically duplicates our -arch arg and breaks
213 # pch). Additionally disable Xarch support.
214 sed \
215 -e "s:-arch i386::" \
216 -e "s:-arch ppc::" \
217 -e "s:-arch x86_64::" \
218 -e "s:-arch ppc64::" \
219 -e "s:-arch \$i::" \
220 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
221 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
222 -e "s:-Xarch_x86_64::g" \
223 -e "s:-Xarch_ppc64::g" \
224 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
225
226 # On Snow Leopard don't fall back to 10.5 deployment target.
227 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
228 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
229 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
230 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
231 fi
232 fi
233
234 # this one is needed for all systems with a separate -liconv, apart from
235 # Darwin, for which the sources already cater for -liconv
236 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
237 sed \
238 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
239 -i config.tests/unix/iconv/iconv.pro \
240 || die "sed on iconv.pro failed"
241 fi
242
243 # we need some patches for Solaris
244 sed -i \
245 -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
246 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
247 # use GCC over SunStudio
248 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
249 # don't flirt with non-Prefix stuff, we're quite possessive
250 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
251 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
190 252
191 base_src_prepare 253 base_src_prepare
192} 254}
193 255
194# @FUNCTION: qt4-build_src_configure 256# @FUNCTION: qt4-build_src_configure
196# Default configure phase 258# Default configure phase
197qt4-build_src_configure() { 259qt4-build_src_configure() {
198 setqtenv 260 setqtenv
199 myconf="$(standard_configure_options) ${myconf}" 261 myconf="$(standard_configure_options) ${myconf}"
200 262
263 # this one is needed for all systems with a separate -liconv, apart from
264 # Darwin, for which the sources already cater for -liconv
265 use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
266 myconf+=" -liconv"
267
268 if has glib ${IUSE//+} && use glib; then
269 # use -I, -L and -l from configure
270 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
271 # avoid the -pthread argument
272 myconf+=" ${glibflags//-pthread}"
273 unset glibflags
274 fi
275
276 if use aqua ; then
277 # On (snow) leopard use the new (frameworked) cocoa code.
278 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
279 myconf+=" -cocoa -framework"
280
281 # We are crazy and build cocoa + qt3support :-)
282 if use qt3support; then
283 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
284 -i configure
285 fi
286
287 # We need the source's headers, not the installed ones.
288 myconf+=" -I${S}/include"
289
290 # Add hint for the framework location.
291 myconf+=" -F${QTLIBDIR}"
292 fi
293 else
294 # freetype2 include dir is non-standard, thus include it on configure
295 # use -I from configure
296 myconf+=" $(pkg-config --cflags freetype2)"
297 fi
298
201 echo ./configure ${myconf} 299 echo ./configure ${myconf}
202 ./configure ${myconf} || die "./configure failed" 300 ./configure ${myconf} || die "./configure failed"
203 myconf="" 301 myconf=""
204} 302}
205 303
209 setqtenv 307 setqtenv
210 308
211 build_directories ${QT4_TARGET_DIRECTORIES} 309 build_directories ${QT4_TARGET_DIRECTORIES}
212} 310}
213 311
312# @FUNCTION: fix_includes
313# @DESCRIPTION:
314# For MacOSX we need to add some symlinks when frameworks are
315# being used, to avoid complications with some more or less stupid packages.
316fix_includes() {
317 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
318 # Some packages tend to include <Qt/...>
319 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
320
321 # Fake normal headers when frameworks are installed... eases life later on
322 local dest f
323 for frw in "${D}${QTLIBDIR}"/*.framework; do
324 [[ -e "${frw}"/Headers ]] || continue
325 f=$(basename ${frw})
326 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
327 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
328
329 # Link normal headers as well.
330 for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
331 h=$(basename ${hdr})
332 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
333 done
334 done
335 fi
336}
337
214# @FUNCTION: qt4-build_src_install 338# @FUNCTION: qt4-build_src_install
215# @DESCRIPTION: 339# @DESCRIPTION:
216# Perform the actual installation including some library fixes. 340# Perform the actual installation including some library fixes.
217qt4-build_src_install() { 341qt4-build_src_install() {
342 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
218 setqtenv 343 setqtenv
219 install_directories ${QT4_TARGET_DIRECTORIES} 344 install_directories ${QT4_TARGET_DIRECTORIES}
220 install_qconfigs 345 install_qconfigs
221 fix_library_files 346 fix_library_files
347 fix_includes
222} 348}
223 349
224# @FUNCTION: setqtenv 350# @FUNCTION: setqtenv
225setqtenv() { 351setqtenv() {
226 # Set up installation directories 352 # Set up installation directories
227 QTBASEDIR=/usr/$(get_libdir)/qt4 353 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
228 QTPREFIXDIR=/usr 354 QTPREFIXDIR=${EPREFIX}/usr
229 QTBINDIR=/usr/bin 355 QTBINDIR=${EPREFIX}/usr/bin
230 QTLIBDIR=/usr/$(get_libdir)/qt4 356 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
231 QMAKE_LIBDIR_QT=${QTLIBDIR} 357 QMAKE_LIBDIR_QT=${QTLIBDIR}
232 QTPCDIR=/usr/$(get_libdir)/pkgconfig 358 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
233 QTDATADIR=/usr/share/qt4 359 QTDATADIR=${EPREFIX}/usr/share/qt4
234 QTDOCDIR=/usr/share/doc/qt-${PV} 360 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
235 QTHEADERDIR=/usr/include/qt4 361 QTHEADERDIR=${EPREFIX}/usr/include/qt4
236 QTPLUGINDIR=${QTLIBDIR}/plugins 362 QTPLUGINDIR=${QTLIBDIR}/plugins
237 QTSYSCONFDIR=/etc/qt4 363 QTSYSCONFDIR=${EPREFIX}/etc/qt4
238 QTTRANSDIR=${QTDATADIR}/translations 364 QTTRANSDIR=${QTDATADIR}/translations
239 QTEXAMPLESDIR=${QTDATADIR}/examples 365 QTEXAMPLESDIR=${QTDATADIR}/examples
240 QTDEMOSDIR=${QTDATADIR}/demos 366 QTDEMOSDIR=${QTDATADIR}/demos
241 QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4 367 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
242 PLATFORM=$(qt_mkspecs_dir) 368 PLATFORM=$(qt_mkspecs_dir)
243 369
244 unset QMAKESPEC 370 unset QMAKESPEC
245} 371}
246 372
249# Sets up some standard configure options, like libdir (if necessary), whether 375# Sets up some standard configure options, like libdir (if necessary), whether
250# debug info is wanted or not. 376# debug info is wanted or not.
251standard_configure_options() { 377standard_configure_options() {
252 local myconf= 378 local myconf=
253 379
254 [[ $(get_libdir) != lib ]] && myconf+=" -L/usr/$(get_libdir)" 380 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
255 381
256 # Disable visibility explicitly if gcc version isn't 4 382 # Disable visibility explicitly if gcc version isn't 4
257 if [[ $(gcc-major-version) -lt 4 ]]; then 383 if [[ $(gcc-major-version) -lt 4 ]]; then
258 myconf+=" -no-reduce-exports" 384 myconf+=" -no-reduce-exports"
259 fi 385 fi
266 else 392 else
267 myconf+=" -release" 393 myconf+=" -release"
268 fi 394 fi
269 myconf+=" -no-separate-debug-info" 395 myconf+=" -no-separate-debug-info"
270 396
397 use aqua && myconf+=" -no-framework"
398
271 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 399 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
272 # $(tc-arch). Therefore we convert it to supported values. 400 # $(tc-arch). Therefore we convert it to supported values.
273 case "$(tc-arch)" in 401 case "$(tc-arch)" in
274 amd64) myconf+=" -arch x86_64" ;; 402 amd64|x64-*) myconf+=" -arch x86_64" ;;
403 ppc-macos) myconf+=" -arch ppc" ;;
275 ppc|ppc64) myconf+=" -arch powerpc" ;; 404 ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
405 sparc|sparc-*) myconf+=" -arch sparc" ;;
406 x86-macos) myconf+=" -arch x86" ;;
276 x86|x86-*) myconf+=" -arch i386" ;; 407 x86|x86-*) myconf+=" -arch i386" ;;
277 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;; 408 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
278 hppa|sh) myconf+=" -arch generic" ;; 409 hppa|sh) myconf+=" -arch generic" ;;
279 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 410 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
280 esac 411 esac
281 412
282 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build 413 # 4.5: build everything but qt-xmlpatterns w/o exceptions
283 local exceptions= 414 # 4.6: exceptions USE flag
415 local exceptions="-exceptions"
284 case "${PV}" in 416 case "${PV}" in
285 4.6.*) 417 4.5.*)
286 if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then 418 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
287 exceptions="-no-exceptions"
288 fi
289 ;; 419 ;;
290 *) 420 *)
291 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions" 421 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
292 ;; 422 ;;
293 esac 423 esac
424
425 # note about -reduce-relocations:
426 # That flag seems to introduce major breakage to applications,
427 # mostly to be seen as a core dump with the message "QPixmap: Must
428 # construct a QApplication before a QPaintDevice" on Solaris
429 # -- Daniel Vergien
430 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
294 431
295 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license 432 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
296 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 433 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
297 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} 434 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
298 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} 435 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
299 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} 436 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
300 -demosdir ${QTDEMOSDIR} -silent -fast -opensource 437 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
301 ${exceptions} 438 ${exceptions}
302 -reduce-relocations -nomake examples -nomake demos" 439 -nomake examples -nomake demos"
303 440
304 echo "${myconf}" 441 echo "${myconf}"
305} 442}
306 443
307# @FUNCTION: build_directories 444# @FUNCTION: build_directories
308# @USAGE: < directories > 445# @USAGE: < directories >
309# @DESCRIPTION: 446# @DESCRIPTION:
310# Compiles the code in $QT4_TARGET_DIRECTORIES 447# Compiles the code in $QT4_TARGET_DIRECTORIES
311build_directories() { 448build_directories() {
312 for x in "$@"; do 449 for x in "$@"; do
313 cd "${S}"/${x} 450 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 451 # avoid running over the maximum argument number, bug #299810
452 {
453 echo "${S}"/mkspecs/common/*.conf
454 find "${S}" -name '*.pr[io]'
455 } | 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" 456 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
316 emake CC="@echo compiling \$< && $(tc-getCC)" \ 457 emake CC="@echo compiling \$< && $(tc-getCC)" \
317 CXX="@echo compiling \$< && $(tc-getCXX)" \ 458 CXX="@echo compiling \$< && $(tc-getCXX)" \
318 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed" 459 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed"
460 popd >/dev/null
319 done 461 done
320} 462}
321 463
322# @FUNCTION: install_directories 464# @FUNCTION: install_directories
323# @USAGE: < directories > 465# @USAGE: < directories >
352 local x 494 local x
353 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 495 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
354 for x in QCONFIG_ADD QCONFIG_REMOVE; do 496 for x in QCONFIG_ADD QCONFIG_REMOVE; do
355 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 497 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
356 done 498 done
357 insinto ${QTDATADIR}/mkspecs/gentoo 499 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
358 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" 500 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
359 fi 501 fi
360 502
361 if [[ -n ${QCONFIG_DEFINE} ]]; then 503 if [[ -n ${QCONFIG_DEFINE} ]]; then
362 for x in ${QCONFIG_DEFINE}; do 504 for x in ${QCONFIG_DEFINE}; do
363 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h 505 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
364 done 506 done
365 insinto ${QTHEADERDIR}/Gentoo 507 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
366 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 508 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
367 fi 509 fi
368} 510}
369 511
370# @FUNCTION: generate_qconfigs 512# @FUNCTION: generate_qconfigs
434# @FUNCTION: qt4-build_pkg_postinst 576# @FUNCTION: qt4-build_pkg_postinst
435# @DESCRIPTION: Generate configuration, plus throws a message about possible 577# @DESCRIPTION: Generate configuration, plus throws a message about possible
436# breakages and proposed solutions. 578# breakages and proposed solutions.
437qt4-build_pkg_postinst() { 579qt4-build_pkg_postinst() {
438 generate_qconfigs 580 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} 581}
457 582
458# @FUNCTION: skip_qmake_build_patch 583# @FUNCTION: skip_qmake_build_patch
459# @DESCRIPTION: 584# @DESCRIPTION:
460# Don't need to build qmake, as it's already installed from qt-core 585# Don't need to build qmake, as it's already installed from qt-core
497 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 622 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
498 if [[ -e ${libfile} ]]; then 623 if [[ -e ${libfile} ]]; then
499 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed" 624 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
500 625
501 # Move .pc files into the pkgconfig directory 626 # Move .pc files into the pkgconfig directory
502 dodir ${QTPCDIR} 627 dodir ${QTPCDIR#${EPREFIX}}
503 mv ${libfile} "${D}"/${QTPCDIR}/ \ 628 mv ${libfile} "${D}"/${QTPCDIR}/ \
504 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed." 629 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
505 fi 630 fi
506 done 631 done
507 632
545 *-openbsd*) 670 *-openbsd*)
546 spec=openbsd ;; 671 spec=openbsd ;;
547 *-netbsd*) 672 *-netbsd*)
548 spec=netbsd ;; 673 spec=netbsd ;;
549 *-darwin*) 674 *-darwin*)
675 if use aqua; then
676 # mac with carbon/cocoa
677 spec=macx
678 else
679 # darwin/mac with x11
550 spec=darwin ;; 680 spec=darwin
681 fi
682 ;;
683 *-solaris*)
684 spec=solaris ;;
551 *-linux-*|*-linux) 685 *-linux-*|*-linux)
552 spec=linux ;; 686 spec=linux ;;
553 *) 687 *)
554 die "Unknown CHOST, no platform choosen." 688 die "Unknown CHOST, no platform choosen."
555 esac 689 esac
564 fi 698 fi
565 if [[ -n ${LIBDIR/lib} ]]; then 699 if [[ -n ${LIBDIR/lib} ]]; then
566 spec+=-${LIBDIR/lib} 700 spec+=-${LIBDIR/lib}
567 fi 701 fi
568 702
703 # Add -64 for 64bit profiles
704 if use x64-freebsd ||
705 use amd64-linux ||
706 use x64-macos ||
707 use x64-solaris ||
708 use sparc64-solaris
709 then
710 spec+=-64
711 fi
712
569 echo "${spec}" 713 echo "${spec}"
570} 714}
571 715
572EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst 716EXPORT_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.65

  ViewVC Help
Powered by ViewVC 1.1.20