/[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.70
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.70 2010/05/24 22:03:30 spatz 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 # bug 321335
217 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
218 xargs -0 \
219 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):g" \
220 -i || die "sed test compilers failed"
221
179 # Bug 172219 222 # 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/::" \ 223 sed -e "s:X11R6/::" \
184 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" 224 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
185 225
226 if [[ ${CHOST} == *-darwin* ]]; then
227 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
228 # crippled (by design) :/
186 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 229 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
187 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 230 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
188 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ 231 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
232 -e "s:-arch\s\w*::g" \
189 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 233 -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
234
235 # Fix configure's -arch settings that appear in qmake/Makefile and also
236 # fix arch handling (automagically duplicates our -arch arg and breaks
237 # pch). Additionally disable Xarch support.
238 sed \
239 -e "s:-arch i386::" \
240 -e "s:-arch ppc::" \
241 -e "s:-arch x86_64::" \
242 -e "s:-arch ppc64::" \
243 -e "s:-arch \$i::" \
244 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
245 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
246 -e "s:-Xarch_x86_64::g" \
247 -e "s:-Xarch_ppc64::g" \
248 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
249
250 # On Snow Leopard don't fall back to 10.5 deployment target.
251 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
252 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
253 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
254 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
255 fi
256 fi
257
258 # this one is needed for all systems with a separate -liconv, apart from
259 # Darwin, for which the sources already cater for -liconv
260 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
261 sed \
262 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
263 -i config.tests/unix/iconv/iconv.pro \
264 || die "sed on iconv.pro failed"
265 fi
266
267 # we need some patches for Solaris
268 sed -i \
269 -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
270 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
271 # use GCC over SunStudio
272 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
273 # don't flirt with non-Prefix stuff, we're quite possessive
274 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
275 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
190 276
191 base_src_prepare 277 base_src_prepare
192} 278}
193 279
194# @FUNCTION: qt4-build_src_configure 280# @FUNCTION: qt4-build_src_configure
196# Default configure phase 282# Default configure phase
197qt4-build_src_configure() { 283qt4-build_src_configure() {
198 setqtenv 284 setqtenv
199 myconf="$(standard_configure_options) ${myconf}" 285 myconf="$(standard_configure_options) ${myconf}"
200 286
287 # this one is needed for all systems with a separate -liconv, apart from
288 # Darwin, for which the sources already cater for -liconv
289 use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
290 myconf+=" -liconv"
291
292 if has glib ${IUSE//+} && use glib; then
293 # use -I, -L and -l from configure
294 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
295 # avoid the -pthread argument
296 myconf+=" ${glibflags//-pthread}"
297 unset glibflags
298 fi
299
300 if use aqua ; then
301 # On (snow) leopard use the new (frameworked) cocoa code.
302 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
303 myconf+=" -cocoa -framework"
304
305 # We are crazy and build cocoa + qt3support :-)
306 if use qt3support; then
307 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
308 -i configure
309 fi
310
311 # We need the source's headers, not the installed ones.
312 myconf+=" -I${S}/include"
313
314 # Add hint for the framework location.
315 myconf+=" -F${QTLIBDIR}"
316 fi
317 else
318 # freetype2 include dir is non-standard, thus include it on configure
319 # use -I from configure
320 myconf+=" $(pkg-config --cflags freetype2)"
321 fi
322
201 echo ./configure ${myconf} 323 echo ./configure ${myconf}
202 ./configure ${myconf} || die "./configure failed" 324 ./configure ${myconf} || die "./configure failed"
203 myconf="" 325 myconf=""
204} 326}
205 327
209 setqtenv 331 setqtenv
210 332
211 build_directories ${QT4_TARGET_DIRECTORIES} 333 build_directories ${QT4_TARGET_DIRECTORIES}
212} 334}
213 335
336# @FUNCTION: fix_includes
337# @DESCRIPTION:
338# For MacOSX we need to add some symlinks when frameworks are
339# being used, to avoid complications with some more or less stupid packages.
340fix_includes() {
341 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
342 # Some packages tend to include <Qt/...>
343 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
344
345 # Fake normal headers when frameworks are installed... eases life later on
346 local dest f
347 for frw in "${D}${QTLIBDIR}"/*.framework; do
348 [[ -e "${frw}"/Headers ]] || continue
349 f=$(basename ${frw})
350 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
351 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
352
353 # Link normal headers as well.
354 for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
355 h=$(basename ${hdr})
356 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
357 done
358 done
359 fi
360}
361
214# @FUNCTION: qt4-build_src_install 362# @FUNCTION: qt4-build_src_install
215# @DESCRIPTION: 363# @DESCRIPTION:
216# Perform the actual installation including some library fixes. 364# Perform the actual installation including some library fixes.
217qt4-build_src_install() { 365qt4-build_src_install() {
366 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
218 setqtenv 367 setqtenv
219 install_directories ${QT4_TARGET_DIRECTORIES} 368 install_directories ${QT4_TARGET_DIRECTORIES}
220 install_qconfigs 369 install_qconfigs
221 fix_library_files 370 fix_library_files
371 fix_includes
222} 372}
223 373
224# @FUNCTION: setqtenv 374# @FUNCTION: setqtenv
225setqtenv() { 375setqtenv() {
226 # Set up installation directories 376 # Set up installation directories
227 QTBASEDIR=/usr/$(get_libdir)/qt4 377 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
228 QTPREFIXDIR=/usr 378 QTPREFIXDIR=${EPREFIX}/usr
229 QTBINDIR=/usr/bin 379 QTBINDIR=${EPREFIX}/usr/bin
230 QTLIBDIR=/usr/$(get_libdir)/qt4 380 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
231 QMAKE_LIBDIR_QT=${QTLIBDIR} 381 QMAKE_LIBDIR_QT=${QTLIBDIR}
232 QTPCDIR=/usr/$(get_libdir)/pkgconfig 382 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
233 QTDATADIR=/usr/share/qt4 383 QTDATADIR=${EPREFIX}/usr/share/qt4
234 QTDOCDIR=/usr/share/doc/qt-${PV} 384 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
235 QTHEADERDIR=/usr/include/qt4 385 QTHEADERDIR=${EPREFIX}/usr/include/qt4
236 QTPLUGINDIR=${QTLIBDIR}/plugins 386 QTPLUGINDIR=${QTLIBDIR}/plugins
237 QTSYSCONFDIR=/etc/qt4 387 QTSYSCONFDIR=${EPREFIX}/etc/qt4
238 QTTRANSDIR=${QTDATADIR}/translations 388 QTTRANSDIR=${QTDATADIR}/translations
239 QTEXAMPLESDIR=${QTDATADIR}/examples 389 QTEXAMPLESDIR=${QTDATADIR}/examples
240 QTDEMOSDIR=${QTDATADIR}/demos 390 QTDEMOSDIR=${QTDATADIR}/demos
241 QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4 391 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
242 PLATFORM=$(qt_mkspecs_dir) 392 PLATFORM=$(qt_mkspecs_dir)
243 393
244 unset QMAKESPEC 394 unset QMAKESPEC
245} 395}
246 396
249# Sets up some standard configure options, like libdir (if necessary), whether 399# Sets up some standard configure options, like libdir (if necessary), whether
250# debug info is wanted or not. 400# debug info is wanted or not.
251standard_configure_options() { 401standard_configure_options() {
252 local myconf= 402 local myconf=
253 403
254 [[ $(get_libdir) != lib ]] && myconf+=" -L/usr/$(get_libdir)" 404 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
255 405
256 # Disable visibility explicitly if gcc version isn't 4 406 # Disable visibility explicitly if gcc version isn't 4
257 if [[ $(gcc-major-version) -lt 4 ]]; then 407 if [[ $(gcc-major-version) -lt 4 ]]; then
258 myconf+=" -no-reduce-exports" 408 myconf+=" -no-reduce-exports"
259 fi 409 fi
266 else 416 else
267 myconf+=" -release" 417 myconf+=" -release"
268 fi 418 fi
269 myconf+=" -no-separate-debug-info" 419 myconf+=" -no-separate-debug-info"
270 420
421 use aqua && myconf+=" -no-framework"
422
271 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 423 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
272 # $(tc-arch). Therefore we convert it to supported values. 424 # $(tc-arch). Therefore we convert it to supported values.
273 case "$(tc-arch)" in 425 case "$(tc-arch)" in
274 amd64) myconf+=" -arch x86_64" ;; 426 amd64|x64-*) myconf+=" -arch x86_64" ;;
427 ppc-macos) myconf+=" -arch ppc" ;;
275 ppc|ppc64) myconf+=" -arch powerpc" ;; 428 ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
429 sparc|sparc-*) myconf+=" -arch sparc" ;;
430 x86-macos) myconf+=" -arch x86" ;;
276 x86|x86-*) myconf+=" -arch i386" ;; 431 x86|x86-*) myconf+=" -arch i386" ;;
277 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;; 432 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
278 hppa|sh) myconf+=" -arch generic" ;; 433 hppa|sh) myconf+=" -arch generic" ;;
279 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 434 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
280 esac 435 esac
281 436
282 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build 437 # 4.5: build everything but qt-xmlpatterns w/o exceptions
283 local exceptions= 438 # 4.6: exceptions USE flag
439 local exceptions="-exceptions"
284 case "${PV}" in 440 case "${PV}" in
285 4.6.*) 441 4.5.*)
286 if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then 442 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
287 exceptions="-no-exceptions"
288 fi
289 ;; 443 ;;
290 *) 444 *)
291 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions" 445 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
292 ;; 446 ;;
293 esac 447 esac
448
449 # note about -reduce-relocations:
450 # That flag seems to introduce major breakage to applications,
451 # mostly to be seen as a core dump with the message "QPixmap: Must
452 # construct a QApplication before a QPaintDevice" on Solaris
453 # -- Daniel Vergien
454 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
294 455
295 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license 456 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
296 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 457 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
297 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} 458 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
298 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} 459 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
299 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} 460 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
300 -demosdir ${QTDEMOSDIR} -silent -fast -opensource 461 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
301 ${exceptions} 462 ${exceptions}
302 -reduce-relocations -nomake examples -nomake demos" 463 -nomake examples -nomake demos"
303 464
304 echo "${myconf}" 465 echo "${myconf}"
305} 466}
306 467
307# @FUNCTION: build_directories 468# @FUNCTION: build_directories
308# @USAGE: < directories > 469# @USAGE: < directories >
309# @DESCRIPTION: 470# @DESCRIPTION:
310# Compiles the code in $QT4_TARGET_DIRECTORIES 471# Compiles the code in $QT4_TARGET_DIRECTORIES
311build_directories() { 472build_directories() {
312 for x in "$@"; do 473 for x in "$@"; do
313 cd "${S}"/${x} 474 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 475 # avoid running over the maximum argument number, bug #299810
476 {
477 echo "${S}"/mkspecs/common/*.conf
478 find "${S}" -name '*.pr[io]'
479 } | 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" 480 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
316 emake CC="@echo compiling \$< && $(tc-getCC)" \ 481 emake CC="$(tc-getCC)" \
317 CXX="@echo compiling \$< && $(tc-getCXX)" \ 482 CXX="$(tc-getCXX)" \
318 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed" 483 LINK="$(tc-getCXX)" || die "emake failed"
484 popd >/dev/null
319 done 485 done
320} 486}
321 487
322# @FUNCTION: install_directories 488# @FUNCTION: install_directories
323# @USAGE: < directories > 489# @USAGE: < directories >
352 local x 518 local x
353 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 519 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
354 for x in QCONFIG_ADD QCONFIG_REMOVE; do 520 for x in QCONFIG_ADD QCONFIG_REMOVE; do
355 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 521 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
356 done 522 done
357 insinto ${QTDATADIR}/mkspecs/gentoo 523 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
358 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" 524 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
359 fi 525 fi
360 526
361 if [[ -n ${QCONFIG_DEFINE} ]]; then 527 if [[ -n ${QCONFIG_DEFINE} ]]; then
362 for x in ${QCONFIG_DEFINE}; do 528 for x in ${QCONFIG_DEFINE}; do
363 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h 529 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
364 done 530 done
365 insinto ${QTHEADERDIR}/Gentoo 531 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
366 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 532 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
367 fi 533 fi
368} 534}
369 535
370# @FUNCTION: generate_qconfigs 536# @FUNCTION: generate_qconfigs
434# @FUNCTION: qt4-build_pkg_postinst 600# @FUNCTION: qt4-build_pkg_postinst
435# @DESCRIPTION: Generate configuration, plus throws a message about possible 601# @DESCRIPTION: Generate configuration, plus throws a message about possible
436# breakages and proposed solutions. 602# breakages and proposed solutions.
437qt4-build_pkg_postinst() { 603qt4-build_pkg_postinst() {
438 generate_qconfigs 604 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} 605}
457 606
458# @FUNCTION: skip_qmake_build_patch 607# @FUNCTION: skip_qmake_build_patch
459# @DESCRIPTION: 608# @DESCRIPTION:
460# Don't need to build qmake, as it's already installed from qt-core 609# Don't need to build qmake, as it's already installed from qt-core
497 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 646 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
498 if [[ -e ${libfile} ]]; then 647 if [[ -e ${libfile} ]]; then
499 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed" 648 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
500 649
501 # Move .pc files into the pkgconfig directory 650 # Move .pc files into the pkgconfig directory
502 dodir ${QTPCDIR} 651 dodir ${QTPCDIR#${EPREFIX}}
503 mv ${libfile} "${D}"/${QTPCDIR}/ \ 652 mv ${libfile} "${D}"/${QTPCDIR}/ \
504 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed." 653 || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
505 fi 654 fi
506 done 655 done
507 656
545 *-openbsd*) 694 *-openbsd*)
546 spec=openbsd ;; 695 spec=openbsd ;;
547 *-netbsd*) 696 *-netbsd*)
548 spec=netbsd ;; 697 spec=netbsd ;;
549 *-darwin*) 698 *-darwin*)
699 if use aqua; then
700 # mac with carbon/cocoa
701 spec=macx
702 else
703 # darwin/mac with x11
550 spec=darwin ;; 704 spec=darwin
705 fi
706 ;;
707 *-solaris*)
708 spec=solaris ;;
551 *-linux-*|*-linux) 709 *-linux-*|*-linux)
552 spec=linux ;; 710 spec=linux ;;
553 *) 711 *)
554 die "Unknown CHOST, no platform choosen." 712 die "Unknown CHOST, no platform choosen."
555 esac 713 esac
564 fi 722 fi
565 if [[ -n ${LIBDIR/lib} ]]; then 723 if [[ -n ${LIBDIR/lib} ]]; then
566 spec+=-${LIBDIR/lib} 724 spec+=-${LIBDIR/lib}
567 fi 725 fi
568 726
727 # Add -64 for 64bit profiles
728 if use x64-freebsd ||
729 use amd64-linux ||
730 use x64-macos ||
731 use x64-solaris ||
732 use sparc64-solaris
733 then
734 spec+=-64
735 fi
736
569 echo "${spec}" 737 echo "${spec}"
570} 738}
571 739
572EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst 740EXPORT_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.70

  ViewVC Help
Powered by ViewVC 1.1.20