/[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.58 Revision 1.96
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2011 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.58 2009/12/25 08:19:38 grobian Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.96 2011/10/30 14:21:14 hwoarang 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 ]] &&
21 [[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] &&
22 IUSE="+exceptions"
23else
24 MY_P=qt-x11-opensource-src-${MY_PV}
25fi
26
27if version_is_at_least 4.7.99999999; then
28 IUSE+=" c++0x qpa"
29fi
30
31HOMEPAGE="http://qt.nokia.com/"
32SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
33
34LICENSE="|| ( LGPL-2.1 GPL-3 )"
17IUSE="debug pch aqua" 35IUSE+=" debug pch aqua"
36
18RDEPEND=" 37RDEPEND="
19 !<x11-libs/qt-assistant-${PV} 38 !<x11-libs/qt-assistant-${PV}
20 !>x11-libs/qt-assistant-${PV}-r9999 39 !>x11-libs/qt-assistant-${PV}-r9999
21 !<x11-libs/qt-core-${PV} 40 !<x11-libs/qt-core-${PV}
22 !>x11-libs/qt-core-${PV}-r9999 41 !>x11-libs/qt-core-${PV}-r9999
24 !>x11-libs/qt-dbus-${PV}-r9999 43 !>x11-libs/qt-dbus-${PV}-r9999
25 !<x11-libs/qt-demo-${PV} 44 !<x11-libs/qt-demo-${PV}
26 !>x11-libs/qt-demo-${PV}-r9999 45 !>x11-libs/qt-demo-${PV}-r9999
27 !<x11-libs/qt-gui-${PV} 46 !<x11-libs/qt-gui-${PV}
28 !>x11-libs/qt-gui-${PV}-r9999 47 !>x11-libs/qt-gui-${PV}-r9999
48 !<x11-libs/qt-multimedia-${PV}
49 !>x11-libs/qt-multimedia-${PV}-r9999
29 !<x11-libs/qt-opengl-${PV} 50 !<x11-libs/qt-opengl-${PV}
30 !>x11-libs/qt-opengl-${PV}-r9999 51 !>x11-libs/qt-opengl-${PV}-r9999
31 !<x11-libs/qt-phonon-${PV} 52 !<x11-libs/qt-phonon-${PV}
32 !>x11-libs/qt-phonon-${PV}-r9999 53 !>x11-libs/qt-phonon-${PV}-r9999
33 !<x11-libs/qt-qt3support-${PV} 54 !<x11-libs/qt-qt3support-${PV}
44 !>x11-libs/qt-webkit-${PV}-r9999 65 !>x11-libs/qt-webkit-${PV}-r9999
45 !<x11-libs/qt-xmlpatterns-${PV} 66 !<x11-libs/qt-xmlpatterns-${PV}
46 !>x11-libs/qt-xmlpatterns-${PV}-r9999 67 !>x11-libs/qt-xmlpatterns-${PV}-r9999
47" 68"
48 69
49MY_PV=${PV/_/-} 70S=${WORKDIR}/${MY_P}
50
51HOMEPAGE="http://qt.nokia.com/"
52if version_is_at_least 4.5.99999999 ${PV} ; then
53 SRC_URI="http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-${MY_PV}.tar.gz"
54else
55 SRC_URI="aqua? ( http://get.qt.nokia.com/qt/source/qt-mac-opensource-src-${MY_PV}.tar.gz )
56 !aqua? ( http://get.qt.nokia.com/qt/source/qt-x11-opensource-src-${MY_PV}.tar.gz )"
57fi
58
59LICENSE="|| ( LGPL-2.1 GPL-3 )"
60 71
61# @FUNCTION: qt4-build_pkg_setup 72# @FUNCTION: qt4-build_pkg_setup
62# @DESCRIPTION: 73# @DESCRIPTION:
63# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH 74# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH
64qt4-build_pkg_setup() { 75qt4-build_pkg_setup() {
65 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX= 76 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
66 77
67 local MY_GE 78 # Protect users by not allowing downgrades between releases
68 if version_is_at_least 4.5.99999999 ${PV} ; then 79 # Downgrading revisions within the same release should be allowed
69 MY_P=qt-everywhere-opensource-src-${MY_PV} 80 if has_version '>'${CATEGORY}/${P}-r9999 ; then
81 if [[ -z $I_KNOW_WHAT_I_AM_DOING ]] ; then
82 eerror "Sanity check to keep you from breaking your system:"
83 eerror " Downgrading Qt is completely unsupported and will break your system!"
84 die "aborting to save your system"
70 else 85 else
71 use aqua \ 86 ewarn "Downgrading Qt is completely unsupported and will break your system!"
72 && MY_GE=mac \
73 || MY_GE=x11
74 MY_P=qt-${MY_GE}-opensource-src-${MY_PV}
75 fi 87 fi
76 S=${WORKDIR}/${MY_P} 88 fi
89
90 if [[ "${PN}" == "qt-webkit" ]]; then
91 eshopts_push -s extglob
92 if is-flagq '-g?(gdb)?([1-9])'; then
93 echo
94 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
95 ewarn "You may experience really long compilation times and/or increased memory usage."
96 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
97 ewarn "For more info check out bug #307861"
98 echo
99 fi
100 eshopts_pop
101 fi
77 102
78 PATH="${S}/bin${PATH:+:}${PATH}" 103 PATH="${S}/bin${PATH:+:}${PATH}"
79 if [[ ${CHOST} != *-darwin* ]]; then 104 if [[ ${CHOST} != *-darwin* ]]; then
80 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 105 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
81 else 106 else
82 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}" 107 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
83 # on mac we *need* src/gui/kernel/qapplication_mac.cpp for platfrom 108 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
84 # detection since the x11-headers package b0rkens the header 109 # platform detection. Note: needs to come before any directories to
85 # installation, we have to extract src/ and include/ completely on mac 110 # avoid extract failure.
86 # tools is needed for qt-demo and some others 111 [[ ${CHOST} == *-apple-darwin* ]] && \
87 QT4_EXTRACT_DIRECTORIES+=" src include" 112 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
88
89 if [[ ${PN} == qt-demo || ${PN} == qt-qt3support || ${PN} == qt-webkit ]]; then
90 QT4_EXTRACT_DIRECTORIES+=" tools" 113 ${QT4_EXTRACT_DIRECTORIES}"
91 fi
92 fi 114 fi
93 115
94 # Make sure ebuilds use the required EAPI 116 # Make sure ebuilds use the required EAPI
95 if [[ ${EAPI} != [23] ]]; then 117 if [[ ${EAPI} != [23] ]]; then
96 eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using" 118 eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
99 die "qt4-build eclass requires EAPI=2 or EAPI=3" 121 die "qt4-build eclass requires EAPI=2 or EAPI=3"
100 fi 122 fi
101 123
102 if ! version_is_at_least 4.1 $(gcc-version); then 124 if ! version_is_at_least 4.1 $(gcc-version); then
103 ewarn "Using a GCC version lower than 4.1 is not supported!" 125 ewarn "Using a GCC version lower than 4.1 is not supported!"
104 echo
105 ebeep 3
106 fi 126 fi
107
108 if [[ ${P} == qt-core-4.6.0_rc1 ]]; then
109 ewarn
110 ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1."
111 ewarn "If you are upgrading from 4.6.0_beta1, you'll have to"
112 ewarn "re-emerge everything that depends on Qt."
113 ewarn "Use the following command:"
114 ewarn
115 ewarn " emerge -av1 \$(for i in \$(qlist -IC x11-libs/qt-);"
116 ewarn " do equery -q d \$i | grep -v 'x11-libs/qt-' |"
117 ewarn " sed \"s/^/=/\"; done)"
118 ewarn
119 ewarn "YOU'VE BEEN WARNED"
120 ewarn
121 ebeep 3
122 fi
123
124} 127}
125 128
126# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 129# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
127# @DESCRIPTION: 130# @DESCRIPTION:
128# Arguments for build_target_directories. Takes the directories, in which the 131# Arguments for build_target_directories. Takes the directories, in which the
136# @FUNCTION: qt4-build_src_unpack 139# @FUNCTION: qt4-build_src_unpack
137# @DESCRIPTION: 140# @DESCRIPTION:
138# Unpacks the sources 141# Unpacks the sources
139qt4-build_src_unpack() { 142qt4-build_src_unpack() {
140 setqtenv 143 setqtenv
144 local unpack_p="${MY_P}"
145 case "${PV}" in
146 4.8.0_*)
147 unpack_p="qt-everywhere-opensource-src-${PV/_*}"
148 ;;
149 esac
141 local target targets= 150 local target targets=
142 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 151 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
143 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 152 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
144 ${QT4_EXTRACT_DIRECTORIES}; do 153 ${QT4_EXTRACT_DIRECTORIES}; do
145 targets+=" ${MY_P}/${target}" 154 targets+=" ${unpack_p}/${target}"
146 done 155 done
147 156
148 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 157 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
149 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 158 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
159 case "${PV}" in
160 4.8.0_*)
161 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
162 ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
163 ;;
164 esac
150} 165}
151 166
152# @ECLASS-VARIABLE: PATCHES 167# @ECLASS-VARIABLE: PATCHES
153# @DESCRIPTION: 168# @DESCRIPTION:
154# In case you have patches to apply, specify them in PATCHES variable. Make sure 169# In case you have patches to apply, specify them in PATCHES variable. Make sure
164# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 179# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
165qt4-build_src_prepare() { 180qt4-build_src_prepare() {
166 setqtenv 181 setqtenv
167 cd "${S}" 182 cd "${S}"
168 183
184 # fix qt 4.7 regression that skips -fvisibility=hidden
185 if version_is_at_least "4.7.0_beta1"; then
186 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
187 -i config.tests/unix/fvisibility.test ||
188 die "visibility fixing sed failed"
189 fi
190 # fix libx11 dependency on non X packages
191 if version_is_at_least "4.7.0_beta2"; then
192 local NOLIBX11PKG="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
193 has ${PN} ${NOLIBX11PKG} && qt_nolibx11
194 [[ ${PN} == "qt-assistant" ]] && qt_assistant_cleanup
195 fi
196
169 if use aqua; then 197 if use aqua; then
170 # provide a proper macx-g++-64 198 # provide a proper macx-g++-64
171 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 199 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
172 200
173 sed -e '/^CONFIG/s:app_bundle::' \ 201 sed -e '/^CONFIG/s:app_bundle::' \
183 211
184 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then 212 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
185 # qmake bus errors with -O2 but -O3 works 213 # qmake bus errors with -O2 but -O3 works
186 replace-flags -O2 -O3 214 replace-flags -O2 -O3
187 fi 215 fi
188 216
189 # Bug 282984 && Bug 295530
190 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \
191 -i configure || die "sed qmake compilers failed"
192 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX):" \
193 -i config.tests/unix/compile.test || die "sed test compilers failed"
194
195 # Bug 178652 217 # Bug 178652
196 if [[ $(gcc-major-version) == 3 ]] && use amd64; then 218 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
197 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" 219 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
198 append-flags -fno-gcse 220 append-flags -fno-gcse
199 fi 221 fi
200 222
223 if has c++0x ${IUSE//+} && use c++0x; then
224 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
225 ewarn "this is an official standard, some of the reverse dependencies"
226 ewarn "may fail to compile or link againt the Qt4 libraries. Before"
227 ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
228 ewarn "disabled."
229 append-flags -std=c++0x
230 fi
201 # Unsupported old gcc versions - hardened needs this :( 231 # Unsupported old gcc versions - hardened needs this :(
202 if [[ $(gcc-major-version) -lt 4 ]] ; then 232 if [[ $(gcc-major-version) -lt 4 ]] ; then
203 ewarn "Appending -fno-stack-protector to CXXFLAGS" 233 ewarn "Appending -fno-stack-protector to CXXFLAGS"
204 append-cxxflags -fno-stack-protector 234 append-cxxflags -fno-stack-protector
205 # Bug 253127 235 # Bug 253127
211 if use ppc64; then 241 if use ppc64; then
212 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 242 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
213 append-flags -mminimal-toc 243 append-flags -mminimal-toc
214 fi 244 fi
215 245
246 # Bug 282984 && Bug 295530
247 sed -e "s:\(^SYSTEM_VARIABLES\):CC=\"$(tc-getCC)\"\nCXX=\"$(tc-getCXX)\"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
248 -i configure || die "sed qmake compilers failed"
249 # bug 321335
250 if version_is_at_least 4.6; then
251 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
252 xargs -0 \
253 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \
254 -i || die "sed test compilers failed"
255 fi
256
216 # Bug 172219 257 # Bug 172219
217 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
218 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
219 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
220 -e "s:X11R6/::" \ 258 sed -e "s:X11R6/::" \
221 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" 259 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
222 260
223 if [[ ${CHOST} != *-darwin* ]]; then 261 if [[ ${CHOST} == *-darwin* ]]; then
224 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
225 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
226 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
227 -i mkspecs/common/g++.conf || die "sed mkspecs/common/g++.conf failed"
228 else
229 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 262 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
230 # crippled (by design) :/ 263 # crippled (by design) :/
231 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 264 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
232 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 265 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
233 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \ 266 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
273 # use GCC over SunStudio 306 # use GCC over SunStudio
274 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 307 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
275 # don't flirt with non-Prefix stuff, we're quite possessive 308 # don't flirt with non-Prefix stuff, we're quite possessive
276 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 309 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
277 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 310 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
311 # strip predefined CFLAGS from qmake ( bug #312689 )
312 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
278 313
279 base_src_prepare 314 base_src_prepare
280} 315}
281 316
282# @FUNCTION: qt4-build_src_configure 317# @FUNCTION: qt4-build_src_configure
297 # avoid the -pthread argument 332 # avoid the -pthread argument
298 myconf+=" ${glibflags//-pthread}" 333 myconf+=" ${glibflags//-pthread}"
299 unset glibflags 334 unset glibflags
300 fi 335 fi
301 336
337 if has qpa ${IUSE//+} && use qpa; then
338 ewarn
339 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
340 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
341 ewarn "disable it before reporting any bugs related to this useflag."
342 ewarn
343 myconf+=" -qpa"
344 fi
345
302 if use aqua ; then 346 if use aqua ; then
303 # On (snow) leopard use the new (frameworked) cocoa code. 347 # On (snow) leopard use the new (frameworked) cocoa code.
304 if [[ $(uname -r | cut -d . -f 1) -ge 9 ]] ; then 348 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
305 myconf+=" -cocoa -framework" 349 myconf+=" -cocoa -framework"
306 350
307 # We are crazy and build cocoa + qt3support :-) 351 # We are crazy and build cocoa + qt3support :-)
308 if use qt3support; then 352 if use qt3support; then
309 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \ 353 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
320 # freetype2 include dir is non-standard, thus include it on configure 364 # freetype2 include dir is non-standard, thus include it on configure
321 # use -I from configure 365 # use -I from configure
322 myconf+=" $(pkg-config --cflags freetype2)" 366 myconf+=" $(pkg-config --cflags freetype2)"
323 fi 367 fi
324 368
369 # Disable SSE4.x, since auto-detection is currently broken
370 # Upstream bug http://bugreports.qt.nokia.com/browse/QTBUG-13623
371 [[ ${PV} == "4.7.1" ]] && myconf+=" -no-sse4.1 -no-sse4.2"
372
325 echo ./configure ${myconf} 373 echo ./configure ${myconf}
326 ./configure ${myconf} || die "./configure failed" 374 ./configure ${myconf} || die "./configure failed"
327 myconf="" 375 myconf=""
376
377 prepare_directories ${QT4_TARGET_DIRECTORIES}
328} 378}
329 379
330# @FUNCTION: qt4-build_src_compile 380# @FUNCTION: qt4-build_src_compile
381# @DESCRIPTION:
331# @DESCRIPTION: Actual compile phase 382# Actual compile phase
332qt4-build_src_compile() { 383qt4-build_src_compile() {
333 setqtenv 384 setqtenv
334 385
335 build_directories ${QT4_TARGET_DIRECTORIES} 386 build_directories ${QT4_TARGET_DIRECTORIES}
387}
388
389# @FUNCTION: qt4-build_src_test
390# @DESCRIPTION:
391# Runs tests only in target directories.
392qt4-build_src_test() {
393 for dir in ${QT4_TARGET_DIRECTORIES}; do
394 emake -j1 check -C ${dir}
395 done
336} 396}
337 397
338# @FUNCTION: fix_includes 398# @FUNCTION: fix_includes
339# @DESCRIPTION: 399# @DESCRIPTION:
340# For MacOSX we need to add some symlinks when frameworks are 400# For MacOSX we need to add some symlinks when frameworks are
341# being used, to avoid complications with some more or less stupid packages. 401# being used, to avoid complications with some more or less stupid packages.
342fix_includes() { 402fix_includes() {
343 if use aqua && [[ $(uname -r | cut -d . -f 1) -ge 9 ]] ; then 403 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
344 # Some packages tend to include <Qt/...> 404 # Some packages tend to include <Qt/...>
345 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt 405 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
346 406
347 # Fake normal headers when frameworks are installed... eases life later on 407 # Fake normal headers when frameworks are installed... eases life later on
348 local dest f 408 local dest f
369 setqtenv 429 setqtenv
370 install_directories ${QT4_TARGET_DIRECTORIES} 430 install_directories ${QT4_TARGET_DIRECTORIES}
371 install_qconfigs 431 install_qconfigs
372 fix_library_files 432 fix_library_files
373 fix_includes 433 fix_includes
434 # remove .la files since we are building only shared Qt libraries
435 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
374} 436}
375 437
376# @FUNCTION: setqtenv 438# @FUNCTION: setqtenv
377setqtenv() { 439setqtenv() {
378 # Set up installation directories 440 # Set up installation directories
434 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;; 496 alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
435 hppa|sh) myconf+=" -arch generic" ;; 497 hppa|sh) myconf+=" -arch generic" ;;
436 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 498 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
437 esac 499 esac
438 500
439 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build 501 # 4.5: build everything but qt-xmlpatterns w/o exceptions
440 local exceptions= 502 # 4.6: exceptions USE flag
503 local exceptions="-exceptions"
441 case "${PV}" in 504 case "${PV}" in
442 4.6.*) 505 4.5.*)
443 if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then 506 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
444 case "${PV}:${CHOST}" in
445 4.6.0*:*-darwin*)
446 : # http://bugreports.qt.nokia.com/browse/QTBUG-5909
447 # workaround for compilation error on OSX (qt-gui)
448 ;;
449 *)
450 exceptions="-no-exceptions"
451 ;;
452 esac
453 fi
454 ;; 507 ;;
455 *) 508 *)
456 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions" 509 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
457 ;; 510 ;;
458 esac 511 esac
459 512
460 # note about -reduce-relocations: 513 # note about -reduce-relocations:
461 # That flag seems to introduce major breakage to applications, 514 # That flag seems to introduce major breakage to applications,
474 -nomake examples -nomake demos" 527 -nomake examples -nomake demos"
475 528
476 echo "${myconf}" 529 echo "${myconf}"
477} 530}
478 531
532# @FUNCTION: prepare_directories
533# @USAGE: < directories >
534# @DESCRIPTION:
535# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
536prepare_directories() {
537 for x in "$@"; do
538 pushd "${S}"/${x} >/dev/null
539 einfo "running qmake in: $x"
540 # avoid running over the maximum argument number, bug #299810
541 {
542 echo "${S}"/mkspecs/common/*.conf
543 find "${S}" -name '*.pr[io]'
544 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
545 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
546 popd >/dev/null
547 done
548}
549
550
479# @FUNCTION: build_directories 551# @FUNCTION: build_directories
480# @USAGE: < directories > 552# @USAGE: < directories >
481# @DESCRIPTION: 553# @DESCRIPTION:
482# Compiles the code in $QT4_TARGET_DIRECTORIES 554# Compiles the code in $QT4_TARGET_DIRECTORIES
483build_directories() { 555build_directories() {
484 for x in "$@"; do 556 for x in "$@"; do
485 pushd "${S}"/${x} >/dev/null 557 pushd "${S}"/${x} >/dev/null
486 sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/*.conf || die 558 emake CC="$(tc-getCC)" \
487 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 559 CXX="$(tc-getCXX)" \
488 emake CC="@echo compiling \$< && $(tc-getCC)" \
489 CXX="@echo compiling \$< && $(tc-getCXX)" \
490 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed" 560 LINK="$(tc-getCXX)" || die "emake failed"
491 popd >/dev/null 561 popd >/dev/null
492 done 562 done
493} 563}
494 564
495# @FUNCTION: install_directories 565# @FUNCTION: install_directories
518# @DESCRIPTION: 588# @DESCRIPTION:
519# List variables that should be defined at the top of QtCore/qconfig.h 589# List variables that should be defined at the top of QtCore/qconfig.h
520: ${QCONFIG_DEFINE:=} 590: ${QCONFIG_DEFINE:=}
521 591
522# @FUNCTION: install_qconfigs 592# @FUNCTION: install_qconfigs
593# @DESCRIPTION:
523# @DESCRIPTION: Install gentoo-specific mkspecs configurations 594# Install gentoo-specific mkspecs configurations
524install_qconfigs() { 595install_qconfigs() {
525 local x 596 local x
526 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 597 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
527 for x in QCONFIG_ADD QCONFIG_REMOVE; do 598 for x in QCONFIG_ADD QCONFIG_REMOVE; do
528 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 599 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
539 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 610 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
540 fi 611 fi
541} 612}
542 613
543# @FUNCTION: generate_qconfigs 614# @FUNCTION: generate_qconfigs
615# @DESCRIPTION:
544# @DESCRIPTION: Generates gentoo-specific configurations 616# Generates gentoo-specific configurations
545generate_qconfigs() { 617generate_qconfigs() {
546 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 618 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
547 local x qconfig_add qconfig_remove qconfig_new 619 local x qconfig_add qconfig_remove qconfig_new
548 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 620 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
549 [[ -f ${x} ]] || continue 621 [[ -f ${x} ]] || continue
563 635
564 # generate list of QT_CONFIG entries from the existing list 636 # generate list of QT_CONFIG entries from the existing list
565 # including qconfig_add and excluding qconfig_remove 637 # including qconfig_add and excluding qconfig_remove
566 for x in $(sed -n 's/^QT_CONFIG +=//p' \ 638 for x in $(sed -n 's/^QT_CONFIG +=//p' \
567 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do 639 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
568 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}" 640 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
569 done 641 done
570 642
571 # replace the existing QT_CONFIG list with qconfig_new 643 # replace the existing QT_CONFIG list with qconfig_new
572 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ 644 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
573 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 645 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
597 fi 669 fi
598 fi 670 fi
599} 671}
600 672
601# @FUNCTION: qt4-build_pkg_postrm 673# @FUNCTION: qt4-build_pkg_postrm
674# @DESCRIPTION:
602# @DESCRIPTION: Generate configurations when the package is completely removed 675# Generate configurations when the package is completely removed
603qt4-build_pkg_postrm() { 676qt4-build_pkg_postrm() {
604 generate_qconfigs 677 generate_qconfigs
605} 678}
606 679
607# @FUNCTION: qt4-build_pkg_postinst 680# @FUNCTION: qt4-build_pkg_postinst
681# @DESCRIPTION:
608# @DESCRIPTION: Generate configuration, plus throws a message about possible 682# Generate configuration, plus throws a message about possible
609# breakages and proposed solutions. 683# breakages and proposed solutions.
610qt4-build_pkg_postinst() { 684qt4-build_pkg_postinst() {
611 generate_qconfigs 685 generate_qconfigs
612
613 if [[ "${PN}" == "qt-core" ]]; then
614 echo
615 ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
616 ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
617 ewarn "should recompile the packages providing these plugins. Also, make sure you"
618 ewarn "compile the Qt packages, and the packages that depend on it, with the same"
619 ewarn "GCC version and the same USE flag settings (especially the debug flag)."
620 ewarn
621 ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
622 ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
623 ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
624 ewarn "configuration."
625 ewarn
626 ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html"
627 echo
628 fi
629} 686}
630 687
631# @FUNCTION: skip_qmake_build_patch 688# @FUNCTION: skip_qmake_build_patch
632# @DESCRIPTION: 689# @DESCRIPTION:
633# Don't need to build qmake, as it's already installed from qt-core 690# Don't need to build qmake, as it's already installed from qt-core
759 fi 816 fi
760 817
761 echo "${spec}" 818 echo "${spec}"
762} 819}
763 820
821# @FUNCTION: qt_assistant_cleanup
822# @RETURN: nothing
823# @DESCRIPTION:
824# Tries to clean up tools.pro for qt-assistant ebuilds
825# Meant to be called in src_prepare
826qt_assistant_cleanup() {
827 # different versions (and branches...) may need different handling,
828 # add a case if you need special handling
829 case "${MY_PV_EXTRA}" in
830 *kde-qt*)
831 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
832 -e "/mac/,/^embedded.*makeqpf$/d" \
833 -i tools/tools.pro || die "patching tools.pro failed"
834 ;;
835 *)
836 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
837 -e "/mac/,/^embedded.*makeqpf$/d" \
838 -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
839 -i tools/tools.pro || die "patching tools.pro failed"
840 ;;
841 esac
842}
843
844# @FUNCTION: qt_nolibx11
845# @RETURN: nothing
846# @DESCRIPTION:
847# Ignore X11 tests for packages that don't need X libraries installed
848qt_nolibx11() {
849 einfo "removing X11 check to allow X-less compilation"
850 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
851 die "x11 check sed failed"
852}
853
764EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst 854EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.96

  ViewVC Help
Powered by ViewVC 1.1.20