/[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.44 Revision 1.54
1# Copyright 2007-2009 Gentoo Foundation 1# Copyright 2007-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.44 2009/08/11 14:44:16 hwoarang Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.54 2009/12/06 09:34:36 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>,
9# Caleb Tennis <caleb@gentoo.org> 9# Caleb Tennis <caleb@gentoo.org>
10# Alex Alexander <wired@gentoo.org>
10# @BLURB: Eclass for Qt4 split ebuilds. 11# @BLURB: Eclass for Qt4 split ebuilds.
11# @DESCRIPTION: 12# @DESCRIPTION:
12# This eclass contains various functions that are used when building Qt4 13# This eclass contains various functions that are used when building Qt4
13 14
14inherit base eutils multilib toolchain-funcs flag-o-matic versionator 15inherit base eutils multilib toolchain-funcs flag-o-matic versionator
43 !>x11-libs/qt-webkit-${PV}-r9999 44 !>x11-libs/qt-webkit-${PV}-r9999
44 !<x11-libs/qt-xmlpatterns-${PV} 45 !<x11-libs/qt-xmlpatterns-${PV}
45 !>x11-libs/qt-xmlpatterns-${PV}-r9999 46 !>x11-libs/qt-xmlpatterns-${PV}-r9999
46" 47"
47case "${PV}" in 48case "${PV}" in
48 4.?.?_rc*) 49 4.?.?_rc* | 4.?.?_beta* )
49 SRCTYPE="${SRCTYPE:-opensource-src}" 50 SRCTYPE="${SRCTYPE:-opensource-src}"
50 MY_PV="${PV/_rc/-rc}" 51 MY_PV="${PV/_/-}"
51 ;; 52 ;;
52 *) 53 *)
53 SRCTYPE="${SRCTYPE:-opensource-src}" 54 SRCTYPE="${SRCTYPE:-opensource-src}"
54 MY_PV="${PV}" 55 MY_PV="${PV}"
55 ;; 56 ;;
56esac 57esac
58
59if version_is_at_least 4.5.99999999 ${PV} ; then
60 MY_P="qt-everywhere-${SRCTYPE}-${MY_PV}"
61else
57MY_P=qt-x11-${SRCTYPE}-${MY_PV} 62 MY_P="qt-x11-${SRCTYPE}-${MY_PV}"
63fi
58S=${WORKDIR}/${MY_P} 64S=${WORKDIR}/${MY_P}
59 65
60HOMEPAGE="http://qt.nokia.com/" 66HOMEPAGE="http://qt.nokia.com/"
67if version_is_at_least 4.5.3 ${PV} ; then
68 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
69else
61SRC_URI="http://download.qt.nokia.com/qt/source/${MY_P}.tar.bz2" 70 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.bz2"
71fi
62 72
63case "${PV}" in 73case "${PV}" in
64 4.4.?) SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-headers.tar.bz2" ;; 74 4.4.?) SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-headers.tar.bz2" ;;
65 *) ;; 75 *) ;;
66esac 76esac
91 if ! version_is_at_least 4.1 $(gcc-version) ; then 101 if ! version_is_at_least 4.1 $(gcc-version) ; then
92 ewarn "Using a GCC version lower than 4.1 is not supported!" 102 ewarn "Using a GCC version lower than 4.1 is not supported!"
93 echo 103 echo
94 ebeep 3 104 ebeep 3
95 fi 105 fi
106
107 if [[ "${P}" == "qt-core-4.6.0_rc1" ]]; then
108 ewarn
109 ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1."
110 ewarn "If you are upgrading from 4.6.0_beta1, you'll have to"
111 ewarn "re-emerge everything that depends on Qt."
112 ewarn "Use the following command:"
113 ewarn
114 ewarn " emerge -av1 \$(for i in \$(qlist -IC x11-libs/qt-);"
115 ewarn " do equery -q d \$i | grep -v 'x11-libs/qt-' |"
116 ewarn " sed \"s/^/=/\"; done)"
117 ewarn
118 ewarn "YOU'VE BEEN WARNED"
119 ewarn
120 ebeep 3
121 fi
122
96} 123}
97 124
98# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 125# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
99# @DESCRIPTION: 126# @DESCRIPTION:
100# Arguments for build_target_directories. Takes the directories, in which the 127# Arguments for build_target_directories. Takes the directories, in which the
108# @FUNCTION: qt4-build_src_unpack 135# @FUNCTION: qt4-build_src_unpack
109# @DESCRIPTION: 136# @DESCRIPTION:
110# Unpacks the sources 137# Unpacks the sources
111qt4-build_src_unpack() { 138qt4-build_src_unpack() {
112 setqtenv 139 setqtenv
113 local target targets licenses 140 local target targets licenses tar_pkg tar_args
114 if version_is_at_least 4.5 ${PV} ; then 141 if version_is_at_least 4.5 ${PV} ; then
115 licenses="LICENSE.GPL3 LICENSE.LGPL" 142 licenses="LICENSE.GPL3 LICENSE.LGPL"
116 else 143 else
117 licenses="LICENSE.GPL2 LICENSE.GPL3" 144 licenses="LICENSE.GPL2 LICENSE.GPL3"
118 fi 145 fi
120 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 147 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
121 ${QT4_EXTRACT_DIRECTORIES}; do 148 ${QT4_EXTRACT_DIRECTORIES}; do
122 targets="${targets} ${MY_P}/${target}" 149 targets="${targets} ${MY_P}/${target}"
123 done 150 done
124 151
125 echo tar xjpf "${DISTDIR}"/${MY_P}.tar.bz2 ${targets} 152 tar_pkg=${MY_P}.tar.bz2
126 tar xjpf "${DISTDIR}"/${MY_P}.tar.bz2 ${targets} 153 tar_args="xjpf"
154 if version_is_at_least 4.5.3 ${PV} ; then
155 tar_pkg=${tar_pkg/bz2/gz}
156 tar_args="xzpf"
157 fi
158
159 echo tar ${tar_args} "${DISTDIR}"/${tar_pkg} ${targets}
160 tar ${tar_args} "${DISTDIR}"/${tar_pkg} ${targets}
127 161
128 case "${PV}" in 162 case "${PV}" in
129 4.4.?) 163 4.4.?)
130 echo tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2 164 echo tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2
131 tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2 165 tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2
158 if [[ ${PN} != qt-core ]]; then 192 if [[ ${PN} != qt-core ]]; then
159 skip_qmake_build_patch 193 skip_qmake_build_patch
160 skip_project_generation_patch 194 skip_project_generation_patch
161 symlink_binaries_to_buildtree 195 symlink_binaries_to_buildtree
162 fi 196 fi
197
198 # Bug 282984 && Bug 295530
199 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \
200 -i configure || die "sed qmake compilers failed"
201 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX):" \
202 -i config.tests/unix/compile.test || die "sed test compilers failed"
163 203
164 # Bug 178652 204 # Bug 178652
165 if [[ "$(gcc-major-version)" == "3" ]] && use amd64; then 205 if [[ "$(gcc-major-version)" == "3" ]] && use amd64; then
166 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" 206 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
167 append-flags -fno-gcse 207 append-flags -fno-gcse
172 ewarn "Appending -fno-stack-protector to CXXFLAGS" 212 ewarn "Appending -fno-stack-protector to CXXFLAGS"
173 append-cxxflags -fno-stack-protector 213 append-cxxflags -fno-stack-protector
174 # Bug 253127 214 # Bug 253127
175 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 215 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
176 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 216 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
217 fi
218
219 # Bug 261632
220 if use ppc64; then
221 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
222 append-flags -mminimal-toc
177 fi 223 fi
178 224
179 # Bug 172219 225 # Bug 172219
180 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 226 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
181 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 227 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
284 alpha|arm|ia64|mips|s390|sparc) myconf="${myconf} -arch $(tc-arch)" ;; 330 alpha|arm|ia64|mips|s390|sparc) myconf="${myconf} -arch $(tc-arch)" ;;
285 hppa|sh) myconf="${myconf} -arch generic" ;; 331 hppa|sh) myconf="${myconf} -arch generic" ;;
286 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 332 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
287 esac 333 esac
288 334
335 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build
336 local exceptions=
337 case "${PV}" in
338 4.6.*)
339 if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then
340 exceptions="-no-exceptions"
341 fi
342 ;;
343 *)
344 [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
345 ;;
346 esac
347
289 myconf="${myconf} -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license -no-rpath 348 myconf="${myconf} -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
290 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 349 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
291 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} 350 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
292 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} 351 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
293 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} 352 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
294 -demosdir ${QTDEMOSDIR} -silent -fast 353 -demosdir ${QTDEMOSDIR} -silent -fast
295 $([[ ${PN} == qt-xmlpatterns ]] || echo -no-exceptions) 354 ${exceptions}
296 -reduce-relocations -nomake examples -nomake demos" 355 -reduce-relocations -nomake examples -nomake demos"
297 356
298 # Make eclass 4.5.{1,2} ready 357 # Make eclass >= 4.5.x ready
299 case "${MY_PV}" in 358 case "${MY_PV}" in
300 4.5.1 | 4.5.2) 359 4.5.* | 4.6.* )
301 myconf="${myconf} -opensource" 360 myconf="${myconf} -opensource"
302 ;; 361 ;;
303 esac 362 esac
304 363
305 echo "${myconf}" 364 echo "${myconf}"
313 local dirs="$@" 372 local dirs="$@"
314 for x in ${dirs}; do 373 for x in ${dirs}; do
315 cd "${S}"/${x} 374 cd "${S}"/${x}
316 sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/linux.conf || die 375 sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/linux.conf || die
317 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 376 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
318 emake || die "emake failed" 377 emake CC="@echo compiling \$< && $(tc-getCC)" \
378 CXX="@echo compiling \$< && $(tc-getCXX)" \
379 LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed"
319 done 380 done
320} 381}
321 382
322# @FUNCTION: install_directories 383# @FUNCTION: install_directories
323# @USAGE: < directories > 384# @USAGE: < directories >
435# @FUNCTION: qt4-build_pkg_postinst 496# @FUNCTION: qt4-build_pkg_postinst
436# @DESCRIPTION: Generate configuration, plus throws a message about possible 497# @DESCRIPTION: Generate configuration, plus throws a message about possible
437# breakages and proposed solutions. 498# breakages and proposed solutions.
438qt4-build_pkg_postinst() { 499qt4-build_pkg_postinst() {
439 generate_qconfigs 500 generate_qconfigs
501
502 if [[ "${PN}" == "qt-core" ]]; then
440 echo 503 echo
441 ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt" 504 ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
442 ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you" 505 ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
443 ewarn "should recompile the packages providing these plugins. Also, make sure you" 506 ewarn "should recompile the packages providing these plugins. Also, make sure you"
444 ewarn "compile the Qt packages, and the packages that depend on it, with the same" 507 ewarn "compile the Qt packages, and the packages that depend on it, with the same"
445 ewarn "GCC version and the same USE flag settings (especially the debug flag)." 508 ewarn "GCC version and the same USE flag settings (especially the debug flag)."
446 ewarn 509 ewarn
447 ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any" 510 ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
448 ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report," 511 ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
449 ewarn "make sure all your Qt4 packages are up-to-date and built with the same" 512 ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
450 ewarn "configuration." 513 ewarn "configuration."
451 ewarn 514 ewarn
452 ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html" 515 ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html"
453 echo 516 echo
517 fi
454} 518}
455 519
456# @FUNCTION: skip_qmake_build_patch 520# @FUNCTION: skip_qmake_build_patch
457# @DESCRIPTION: 521# @DESCRIPTION:
458# Don't need to build qmake, as it's already installed from qt-core 522# Don't need to build qmake, as it's already installed from qt-core

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.54

  ViewVC Help
Powered by ViewVC 1.1.20