/[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.133 Revision 1.151
1# Copyright 1999-2012 Gentoo Foundation 1# Copyright 1999-2013 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.133 2012/06/18 21:33:50 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.151 2013/10/14 17:24:36 pesa Exp $
4 4
5# @ECLASS: qt4-build.eclass 5# @ECLASS: qt4-build.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Qt herd <qt@gentoo.org> 7# Qt herd <qt@gentoo.org>
8# @BLURB: Eclass for Qt4 split ebuilds. 8# @BLURB: Eclass for Qt4 split ebuilds.
9# @DESCRIPTION: 9# @DESCRIPTION:
10# This eclass contains various functions that are used when building Qt4. 10# This eclass contains various functions that are used when building Qt4.
11 11
12case ${EAPI} in 12case ${EAPI} in
13 2|3|4) : ;; 13 4|5) : ;;
14 *) die "qt4-build.eclass requires EAPI 2, 3 or 4." ;; 14 *) die "qt4-build.eclass: unsupported EAPI=${EAPI:-0}" ;;
15esac 15esac
16 16
17inherit base eutils flag-o-matic multilib toolchain-funcs versionator 17inherit eutils flag-o-matic multilib toolchain-funcs versionator
18 18
19if [[ ${PV} == *9999* ]]; then 19if [[ ${PV} == *9999* ]]; then
20 QT4_BUILD_TYPE="live" 20 QT4_BUILD_TYPE="live"
21 inherit git-2 21 inherit git-r3
22else 22else
23 QT4_BUILD_TYPE="release" 23 QT4_BUILD_TYPE="release"
24fi 24fi
25 25
26HOMEPAGE="http://qt-project.org/ http://qt.nokia.com/" 26HOMEPAGE="http://qt-project.org/ http://qt.digia.com/"
27LICENSE="|| ( LGPL-2.1 GPL-3 )" 27LICENSE="|| ( LGPL-2.1 GPL-3 )"
28 28
29MY_PV=${PV/_/-} 29MY_PV=${PV/_/-}
30MY_P=qt-everywhere-opensource-src-${MY_PV} 30MY_P=qt-everywhere-opensource-src-${MY_PV}
31 31
32case ${QT4_BUILD_TYPE} in 32case ${QT4_BUILD_TYPE} in
33 live) 33 live)
34 EGIT_REPO_URI=(
34 EGIT_REPO_URI="git://gitorious.org/qt/qt.git 35 "git://gitorious.org/qt/qt.git"
35 https://git.gitorious.org/qt/qt.git" 36 "https://git.gitorious.org/qt/qt.git"
37 )
36 EGIT_BRANCH=${PV%.9999} 38 EGIT_BRANCH=${PV%.9999}
37 ;; 39 ;;
38 release) 40 release)
39 if version_is_at_least 4.8.1; then 41 SRC_URI="http://download.qt-project.org/official_releases/qt/${PV%.*}/${PV}/${MY_P}.tar.gz"
40 SRC_URI="http://releases.qt-project.org/qt4/source/${MY_P}.tar.gz"
41 else
42 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
43 fi
44 ;; 42 ;;
45esac 43esac
46 44
47IUSE="aqua debug pch" 45IUSE="aqua debug pch"
46[[ ${CATEGORY}/${PN} != dev-qt/qtwebkit ]] && IUSE+=" c++0x"
48[[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE+=" +exceptions" 47[[ ${CATEGORY}/${PN} != dev-qt/qtxmlpatterns ]] && IUSE+=" +exceptions"
49if version_is_at_least 4.8; then
50 [[ ${CATEGORY}/${PN} != x11-libs/qt-webkit ]] && IUSE+=" c++0x"
51 version_is_at_least 4.8.3 || IUSE+=" qpa"
52fi
53 48
54DEPEND="virtual/pkgconfig" 49DEPEND="virtual/pkgconfig"
55if [[ ${QT4_BUILD_TYPE} == live ]]; then 50if [[ ${QT4_BUILD_TYPE} == live ]]; then
56 DEPEND+=" dev-lang/perl" 51 DEPEND+=" dev-lang/perl"
57fi 52fi
58 53
59RDEPEND="
60 !<x11-libs/qt-assistant-${PV}:4
61 !>x11-libs/qt-assistant-${PV}-r9999:4
62 !<x11-libs/qt-bearer-${PV}:4
63 !>x11-libs/qt-bearer-${PV}-r9999:4
64 !<x11-libs/qt-core-${PV}:4
65 !>x11-libs/qt-core-${PV}-r9999:4
66 !<x11-libs/qt-dbus-${PV}:4
67 !>x11-libs/qt-dbus-${PV}-r9999:4
68 !<x11-libs/qt-declarative-${PV}:4
69 !>x11-libs/qt-declarative-${PV}-r9999:4
70 !<x11-libs/qt-demo-${PV}:4
71 !>x11-libs/qt-demo-${PV}-r9999:4
72 !<x11-libs/qt-gui-${PV}:4
73 !>x11-libs/qt-gui-${PV}-r9999:4
74 !<x11-libs/qt-multimedia-${PV}:4
75 !>x11-libs/qt-multimedia-${PV}-r9999:4
76 !<x11-libs/qt-opengl-${PV}:4
77 !>x11-libs/qt-opengl-${PV}-r9999:4
78 !<x11-libs/qt-openvg-${PV}:4
79 !>x11-libs/qt-openvg-${PV}-r9999:4
80 !<x11-libs/qt-phonon-${PV}:4
81 !>x11-libs/qt-phonon-${PV}-r9999:4
82 !<x11-libs/qt-qt3support-${PV}:4
83 !>x11-libs/qt-qt3support-${PV}-r9999:4
84 !<x11-libs/qt-script-${PV}:4
85 !>x11-libs/qt-script-${PV}-r9999:4
86 !<x11-libs/qt-sql-${PV}:4
87 !>x11-libs/qt-sql-${PV}-r9999:4
88 !<x11-libs/qt-svg-${PV}:4
89 !>x11-libs/qt-svg-${PV}-r9999:4
90 !<x11-libs/qt-test-${PV}:4
91 !>x11-libs/qt-test-${PV}-r9999:4
92 !<x11-libs/qt-webkit-${PV}:4
93 !>x11-libs/qt-webkit-${PV}-r9999:4
94 !<x11-libs/qt-xmlpatterns-${PV}:4
95 !>x11-libs/qt-xmlpatterns-${PV}-r9999:4
96"
97
98S=${WORKDIR}/${MY_P} 54S=${WORKDIR}/${MY_P}
99 55
100# @FUNCTION: qt4-build_pkg_setup 56# @FUNCTION: qt4-build_pkg_setup
101# @DESCRIPTION: 57# @DESCRIPTION:
102# Sets up PATH and LD_LIBRARY_PATH. 58# Sets up PATH and LD_LIBRARY_PATH.
103qt4-build_pkg_setup() { 59qt4-build_pkg_setup() {
104 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
105
106 # Protect users by not allowing downgrades between releases. 60 # Protect users by not allowing downgrades between releases.
107 # Downgrading revisions within the same release should be allowed. 61 # Downgrading revisions within the same release should be allowed.
108 if has_version ">${CATEGORY}/${P}-r9999:4"; then 62 if has_version ">${CATEGORY}/${P}-r9999:4"; then
109 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then 63 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
110 eerror " *** Sanity check to keep you from breaking your system ***" 64 eerror " *** Sanity check to keep you from breaking your system ***"
147qt4-build_src_unpack() { 101qt4-build_src_unpack() {
148 setqtenv 102 setqtenv
149 103
150 if ! version_is_at_least 4.1 $(gcc-version); then 104 if ! version_is_at_least 4.1 $(gcc-version); then
151 ewarn "Using a GCC version lower than 4.1 is not supported." 105 ewarn "Using a GCC version lower than 4.1 is not supported."
106 elif use_if_iuse c++0x && ! version_is_at_least 4.4 $(gcc-version); then
107 ewarn "USE=c++0x requires GCC 4.4 or later."
152 fi 108 fi
153 109
154 if [[ ${PN} == qt-webkit ]]; then 110 if [[ ${CATEGORY}/${PN} == dev-qt/qtwebkit ]]; then
155 eshopts_push -s extglob 111 eshopts_push -s extglob
156 if is-flagq '-g?(gdb)?([1-9])'; then 112 if is-flagq '-g?(gdb)?([1-9])'; then
157 echo 113 echo
158 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)." 114 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
159 ewarn "You may experience really long compilation times and/or increased memory usage." 115 ewarn "You may experience really long compilation times and/or increased memory usage."
164 eshopts_pop 120 eshopts_pop
165 fi 121 fi
166 122
167 case ${QT4_BUILD_TYPE} in 123 case ${QT4_BUILD_TYPE} in
168 live) 124 live)
169 git-2_src_unpack 125 git-r3_src_unpack
170 ;; 126 ;;
171 release) 127 release)
172 local tarball="${MY_P}.tar.gz" target= targets= 128 local tarball="${MY_P}.tar.gz" target= targets=
173 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 129 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
174 src/{qbase,qt_targets,qt_install}.pri bin config.tests \ 130 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
188# @DEFAULT_UNSET 144# @DEFAULT_UNSET
189# @DESCRIPTION: 145# @DESCRIPTION:
190# PATCHES array variable containing all various patches to be applied. 146# PATCHES array variable containing all various patches to be applied.
191# This variable is expected to be defined in global scope of ebuild. 147# This variable is expected to be defined in global scope of ebuild.
192# Make sure to specify the full path. This variable is utilised in 148# Make sure to specify the full path. This variable is utilised in
193# src_unpack/src_prepare phase, based on EAPI. 149# src_prepare() phase.
194# 150#
195# @CODE 151# @CODE
196# PATCHES=( "${FILESDIR}/mypatch.patch" 152# PATCHES=( "${FILESDIR}/mypatch.patch"
197# "${FILESDIR}/patches_folder/" ) 153# "${FILESDIR}/patches_folder/" )
198# @CODE 154# @CODE
199 155
200# @FUNCTION: qt4-build_src_prepare 156# @FUNCTION: qt4-build_src_prepare
201# @DESCRIPTION: 157# @DESCRIPTION:
202# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 158# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
203# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf. 159# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in make.conf.
204qt4-build_src_prepare() { 160qt4-build_src_prepare() {
205 setqtenv 161 setqtenv
206 162
207 if [[ ${QT4_BUILD_TYPE} == live ]]; then 163 if [[ ${QT4_BUILD_TYPE} == live ]]; then
208 QTDIR="." ./bin/syncqt || die "syncqt failed" 164 QTDIR="." ./bin/syncqt || die "syncqt failed"
209 fi 165 fi
210 166
211 if version_is_at_least 4.7; then
212 # avoid X11 dependency in non-gui packages 167 # avoid X11 dependency in non-gui packages
213 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 168 local nolibx11_pkgs="qtcore qtdbus qtscript qtsql qttest qtxmlpatterns"
214 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 169 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
215 fi
216 170
217 if use aqua; then 171 if use aqua; then
218 # provide a proper macx-g++-64 172 # provide a proper macx-g++-64
219 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 173 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
220 174
221 sed -e '/^CONFIG/s:app_bundle::' \ 175 sed -e '/^CONFIG/s:app_bundle::' \
222 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \ 176 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
223 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 177 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
224 fi 178 fi
225 179
226 if [[ ${PN} != qt-core ]]; then 180 if [[ ${CATEGORY}/${PN} != dev-qt/qtcore ]]; then
227 skip_qmake_build 181 skip_qmake_build
228 skip_project_generation 182 skip_project_generation
229 symlink_binaries_to_buildtree 183 symlink_binaries_to_buildtree
230 fi 184 fi
231 185
232 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
233 # qmake bus errors with -O2 or -O3 but -O1 works
234 # Bug 373061
235 replace-flags -O[23] -O1
236 fi
237
238 # Bug 178652
239 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
240 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
241 append-flags -fno-gcse
242 fi
243
244 if use_if_iuse c++0x; then 186 if use_if_iuse c++0x; then
245 append-cxxflags -std=c++0x 187 append-cxxflags -std=c++0x
246 fi 188 fi
247 189
248 # Unsupported old gcc versions - hardened needs this :(
249 if [[ $(gcc-major-version) -lt 4 ]]; then
250 ewarn "Appending -fno-stack-protector to CXXFLAGS"
251 append-cxxflags -fno-stack-protector
252 # Bug 253127
253 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
254 -i mkspecs/common/g++.conf || die
255 fi
256
257 # Bug 261632 190 # Bug 261632
258 if use ppc64; then 191 if use ppc64; then
259 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
260 append-flags -mminimal-toc 192 append-flags -mminimal-toc
193 fi
194
195 # Bug 373061
196 # qmake bus errors with -O2 or -O3 but -O1 works
197 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
198 replace-flags -O[23] -O1
199 fi
200
201 # Bug 417105
202 # graphite on gcc 4.7 causes miscompilations
203 if [[ $(gcc-version) == "4.7" ]]; then
204 filter-flags -fgraphite-identity
261 fi 205 fi
262 206
263 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache 207 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
264 sed -e "/^SYSTEM_VARIABLES=/i \ 208 sed -e "/^SYSTEM_VARIABLES=/i \
265 CC='$(tc-getCC)'\n\ 209 CC='$(tc-getCC)'\n\
266 CXX='$(tc-getCXX)'\n\ 210 CXX='$(tc-getCXX)'\n\
267 CFLAGS='${CFLAGS}'\n\ 211 CFLAGS='${CFLAGS}'\n\
268 CXXFLAGS='${CXXFLAGS}'\n\ 212 CXXFLAGS='${CXXFLAGS}'\n\
269 LDFLAGS='${LDFLAGS}'\n" \ 213 LDFLAGS='${LDFLAGS}'\n\
214 QMakeVar set QMAKE_CFLAGS_RELEASE\n\
215 QMakeVar set QMAKE_CFLAGS_DEBUG\n\
216 QMakeVar set QMAKE_CXXFLAGS_RELEASE\n\
217 QMakeVar set QMAKE_CXXFLAGS_DEBUG\n\
218 QMakeVar set QMAKE_LFLAGS_RELEASE\n\
219 QMakeVar set QMAKE_LFLAGS_DEBUG\n"\
270 -i configure \ 220 -i configure \
271 || die "sed SYSTEM_VARIABLES failed" 221 || die "sed SYSTEM_VARIABLES failed"
272 222
273 # Respect CC, CXX, LINK and *FLAGS in config.tests 223 # Respect CC, CXX, LINK and *FLAGS in config.tests
274 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \ 224 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
275 sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \ 225 sed -i -e "/bin\/qmake/ s: \"\$SRCDIR/: \
276 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \ 226 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
277 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \ 227 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
278 || die "sed config.tests failed" 228 || die "sed config.tests failed"
279
280 if ! version_is_at_least 4.8; then
281 # Strip predefined CFLAGS from mkspecs (bugs 312689 and 352778)
282 sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf || die
283 fi
284 229
285 # Bug 172219 230 # Bug 172219
286 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 231 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
287 232
288 if [[ ${CHOST} == *-darwin* ]]; then 233 if [[ ${CHOST} == *-darwin* ]]; then
350 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 295 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
351 # do not flirt with non-Prefix stuff, we're quite possessive 296 # do not flirt with non-Prefix stuff, we're quite possessive
352 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 297 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
353 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 298 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
354 299
355 base_src_prepare 300 # apply patches
301 [[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}"
302 epatch_user
356} 303}
357 304
358# @FUNCTION: qt4-build_src_configure 305# @FUNCTION: qt4-build_src_configure
359# @DESCRIPTION: 306# @DESCRIPTION:
360# Default configure phase 307# Default configure phase
366 -bindir ${QTBINDIR} 313 -bindir ${QTBINDIR}
367 -libdir ${QTLIBDIR} 314 -libdir ${QTLIBDIR}
368 -docdir ${QTDOCDIR} 315 -docdir ${QTDOCDIR}
369 -headerdir ${QTHEADERDIR} 316 -headerdir ${QTHEADERDIR}
370 -plugindir ${QTPLUGINDIR} 317 -plugindir ${QTPLUGINDIR}
371 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR}) 318 -importdir ${QTIMPORTDIR}
372 -datadir ${QTDATADIR} 319 -datadir ${QTDATADIR}
373 -translationdir ${QTTRANSDIR} 320 -translationdir ${QTTRANSDIR}
374 -sysconfdir ${QTSYSCONFDIR} 321 -sysconfdir ${QTSYSCONFDIR}
375 -examplesdir ${QTEXAMPLESDIR} 322 -examplesdir ${QTEXAMPLESDIR}
376 -demosdir ${QTDEMOSDIR} 323 -demosdir ${QTDEMOSDIR}
405 conf+=" -no-separate-debug-info" 352 conf+=" -no-separate-debug-info"
406 353
407 # exceptions USE flag 354 # exceptions USE flag
408 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)" 355 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
409 356
410 # disable rpath on Qt >= 4.8 (bug 380415) 357 # disable rpath (bug 380415), except on prefix (bug 417169)
411 # but leave it enabled on prefix (bug 417169) 358 use prefix || conf+=" -no-rpath"
412 version_is_at_least 4.8 && use !prefix && conf+=" -no-rpath"
413 359
414 # precompiled headers don't work on hardened, where the flag is masked 360 # precompiled headers don't work on hardened, where the flag is masked
415 conf+=" $(qt_use pch)" 361 conf+=" $(qt_use pch)"
416 362
417 # -reduce-relocations 363 # -reduce-relocations
430 if use_if_iuse glib; then 376 if use_if_iuse glib; then
431 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)" 377 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
432 # avoid the -pthread argument 378 # avoid the -pthread argument
433 conf+=" ${glibflags//-pthread}" 379 conf+=" ${glibflags//-pthread}"
434 unset glibflags 380 unset glibflags
435 fi
436
437 if use_if_iuse qpa; then
438 echo
439 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
440 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
441 ewarn "disable it before reporting any bugs related to this useflag."
442 echo
443 conf+=" -qpa"
444 fi 381 fi
445 382
446 if use aqua; then 383 if use aqua; then
447 # On (snow) leopard use the new (frameworked) cocoa code. 384 # On (snow) leopard use the new (frameworked) cocoa code.
448 if [[ ${CHOST##*-darwin} -ge 9 ]]; then 385 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
486# @FUNCTION: qt4-build_src_test 423# @FUNCTION: qt4-build_src_test
487# @DESCRIPTION: 424# @DESCRIPTION:
488# Runs tests only in target directories. 425# Runs tests only in target directories.
489qt4-build_src_test() { 426qt4-build_src_test() {
490 # QtMultimedia does not have any test suite (bug #332299) 427 # QtMultimedia does not have any test suite (bug #332299)
491 [[ ${PN} == qt-multimedia ]] && return 428 [[ ${CATEGORY}/${PN} == dev-qt/qtmultimedia ]] && return
492 429
493 for dir in ${QT4_TARGET_DIRECTORIES}; do 430 for dir in ${QT4_TARGET_DIRECTORIES}; do
494 emake -j1 check -C ${dir} 431 emake -j1 check -C ${dir}
495 done 432 done
496} 433}
540 477
541# @FUNCTION: qt4-build_src_install 478# @FUNCTION: qt4-build_src_install
542# @DESCRIPTION: 479# @DESCRIPTION:
543# Perform the actual installation including some library fixes. 480# Perform the actual installation including some library fixes.
544qt4-build_src_install() { 481qt4-build_src_install() {
545 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
546 setqtenv 482 setqtenv
547 483
548 install_directories ${QT4_TARGET_DIRECTORIES} 484 install_directories ${QT4_TARGET_DIRECTORIES}
549 install_qconfigs 485 install_qconfigs
550 fix_library_files 486 fix_library_files
551 fix_includes 487 fix_includes
552 488
553 # remove .la files since we are building only shared Qt libraries 489 # remove .la files since we are building only shared libraries
554 find "${D}"${QTLIBDIR} -type f -name '*.la' -print0 | xargs -0 rm -f 490 prune_libtool_files
555} 491}
556 492
557# @FUNCTION: setqtenv 493# @FUNCTION: setqtenv
558# @INTERNAL 494# @INTERNAL
559setqtenv() { 495setqtenv() {
560 # Set up installation directories 496 # Set up installation directories
561 QTPREFIXDIR=${EPREFIX}/usr 497 QTPREFIXDIR=${EPREFIX}/usr
562 QTBINDIR=${EPREFIX}/usr/bin 498 QTBINDIR=${QTPREFIXDIR}/bin
563 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 499 QTLIBDIR=${QTPREFIXDIR}/$(get_libdir)/qt4
564 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig 500 QTPCDIR=${QTPREFIXDIR}/$(get_libdir)/pkgconfig
565 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV} 501 QTDOCDIR=${QTPREFIXDIR}/share/doc/qt-${PV}
566 QTHEADERDIR=${EPREFIX}/usr/include/qt4 502 QTHEADERDIR=${QTPREFIXDIR}/include/qt4
567 QTPLUGINDIR=${QTLIBDIR}/plugins 503 QTPLUGINDIR=${QTLIBDIR}/plugins
568 QTIMPORTDIR=${QTLIBDIR}/imports 504 QTIMPORTDIR=${QTLIBDIR}/imports
569 QTDATADIR=${EPREFIX}/usr/share/qt4 505 QTDATADIR=${QTPREFIXDIR}/share/qt4
570 QTTRANSDIR=${QTDATADIR}/translations 506 QTTRANSDIR=${QTDATADIR}/translations
571 QTSYSCONFDIR=${EPREFIX}/etc/qt4 507 QTSYSCONFDIR=${EPREFIX}/etc/qt4
572 QTEXAMPLESDIR=${QTDATADIR}/examples 508 QTEXAMPLESDIR=${QTDATADIR}/examples
573 QTDEMOSDIR=${QTDATADIR}/demos 509 QTDEMOSDIR=${QTDATADIR}/demos
574 QMAKE_LIBDIR_QT=${QTLIBDIR} 510 QMAKE_LIBDIR_QT=${QTLIBDIR}
575 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
576 511
577 PLATFORM=$(qt_mkspecs_dir) 512 PLATFORM=$(qt_mkspecs_dir)
578 unset QMAKESPEC 513 unset QMAKESPEC
579 514
580 export XDG_CONFIG_HOME="${T}" 515 export XDG_CONFIG_HOME="${T}"
587# Generates Makefiles for the given list of directories. 522# Generates Makefiles for the given list of directories.
588prepare_directories() { 523prepare_directories() {
589 for x in "$@"; do 524 for x in "$@"; do
590 pushd "${S}"/${x} >/dev/null || die 525 pushd "${S}"/${x} >/dev/null || die
591 einfo "Running qmake in: ${x}" 526 einfo "Running qmake in: ${x}"
592 # avoid running over the maximum argument number, bug #299810 527 "${S}"/bin/qmake \
593 { 528 "LIBS+=-L${QTLIBDIR}" \
594 echo "${S}"/mkspecs/common/*.conf 529 "CONFIG+=nostrip" \
595 find "${S}" -name '*.pr[io]' 530 || die "qmake failed"
596 } | xargs sed -i \
597 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
598 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
599 || die
600 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
601 popd >/dev/null || die 531 popd >/dev/null || die
602 done 532 done
603} 533}
604
605 534
606# @FUNCTION: build_directories 535# @FUNCTION: build_directories
607# @USAGE: < directories > 536# @USAGE: < directories >
608# @INTERNAL 537# @INTERNAL
609# @DESCRIPTION: 538# @DESCRIPTION:
610# Compiles the code in the given list of directories. 539# Compiles the code in the given list of directories.
611build_directories() { 540build_directories() {
612 for x in "$@"; do 541 for x in "$@"; do
613 pushd "${S}"/${x} >/dev/null || die 542 pushd "${S}"/${x} >/dev/null || die
543 emake \
544 AR="$(tc-getAR) cqs" \
614 emake CC="$(tc-getCC)" \ 545 CC="$(tc-getCC)" \
615 CXX="$(tc-getCXX)" \ 546 CXX="$(tc-getCXX)" \
616 LINK="$(tc-getCXX)" || die "emake failed" 547 LINK="$(tc-getCXX)" \
548 RANLIB=":" \
549 STRIP=":"
617 popd >/dev/null || die 550 popd >/dev/null || die
618 done 551 done
619} 552}
620 553
621# @FUNCTION: install_directories 554# @FUNCTION: install_directories
624# @DESCRIPTION: 557# @DESCRIPTION:
625# Runs emake install in the given directories, which are separated by spaces. 558# Runs emake install in the given directories, which are separated by spaces.
626install_directories() { 559install_directories() {
627 for x in "$@"; do 560 for x in "$@"; do
628 pushd "${S}"/${x} >/dev/null || die 561 pushd "${S}"/${x} >/dev/null || die
629 emake INSTALL_ROOT="${D}" install || die "emake install failed" 562 emake INSTALL_ROOT="${D}" install
630 popd >/dev/null || die 563 popd >/dev/null || die
631 done 564 done
632} 565}
633 566
634# @ECLASS-VARIABLE: QCONFIG_ADD 567# @ECLASS-VARIABLE: QCONFIG_ADD
655 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 588 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
656 for x in QCONFIG_ADD QCONFIG_REMOVE; do 589 for x in QCONFIG_ADD QCONFIG_REMOVE; do
657 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 590 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
658 done 591 done
659 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo 592 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
660 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" 593 doins "${T}"/${PN}-qconfig.pri
661 fi 594 fi
662 595
663 if [[ -n ${QCONFIG_DEFINE} ]]; then 596 if [[ -n ${QCONFIG_DEFINE} ]]; then
664 for x in ${QCONFIG_DEFINE}; do 597 for x in ${QCONFIG_DEFINE}; do
665 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h 598 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
666 done 599 done
667 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo 600 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
668 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 601 doins "${T}"/gentoo-${PN}-qconfig.h
669 fi 602 fi
670} 603}
671 604
672# @FUNCTION: generate_qconfigs 605# @FUNCTION: generate_qconfigs
673# @INTERNAL 606# @INTERNAL
674# @DESCRIPTION: 607# @DESCRIPTION:
675# Generates gentoo-specific qconfig.{h,pri}. 608# Generates gentoo-specific qconfig.{h,pri}.
676generate_qconfigs() { 609generate_qconfigs() {
677 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${PN} == qt-core ]]; then 610 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == dev-qt/qtcore ]]; then
678 local x qconfig_add qconfig_remove qconfig_new 611 local x qconfig_add qconfig_remove qconfig_new
679 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 612 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
680 [[ -f ${x} ]] || continue 613 [[ -f ${x} ]] || continue
681 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" 614 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
682 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" 615 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
683 done 616 done
684 617
685 # these error checks do not use die because dying in pkg_post{inst,rm} 618 # these error checks do not use die because dying in pkg_post{inst,rm}
686 # just makes things worse. 619 # just makes things worse.
687 if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then 620 if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
688 # start with the qconfig.pri that qt-core installed 621 # start with the qconfig.pri that qtcore installed
689 if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \ 622 if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
690 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 623 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
691 eerror "cp qconfig failed." 624 eerror "cp qconfig failed."
692 return 1 625 return 1
693 fi 626 fi
745} 678}
746 679
747# @FUNCTION: skip_qmake_build 680# @FUNCTION: skip_qmake_build
748# @INTERNAL 681# @INTERNAL
749# @DESCRIPTION: 682# @DESCRIPTION:
750# Patches configure to skip qmake compilation, as it's already installed by qt-core. 683# Patches configure to skip qmake compilation, as it's already installed by qtcore.
751skip_qmake_build() { 684skip_qmake_build() {
752 sed -i -e "s:if true:if false:g" "${S}"/configure || die 685 sed -i -e "s:if true:if false:g" "${S}"/configure || die
753} 686}
754 687
755# @FUNCTION: skip_project_generation 688# @FUNCTION: skip_project_generation
863} 796}
864 797
865# @FUNCTION: qt_nolibx11 798# @FUNCTION: qt_nolibx11
866# @INTERNAL 799# @INTERNAL
867# @DESCRIPTION: 800# @DESCRIPTION:
868# Ignore X11 tests for packages that don't need X libraries installed. 801# Skip X11 tests for packages that don't need X libraries installed.
869qt_nolibx11() { 802qt_nolibx11() {
870 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 803 sed -i -e '/^if.*PLATFORM_X11.*CFG_GUI/,/^fi$/d' "${S}"/configure || die
871 die "x11 check sed failed"
872} 804}
873 805
874EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 806EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.133  
changed lines
  Added in v.1.151

  ViewVC Help
Powered by ViewVC 1.1.20