/[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.104 Revision 1.111
1# Copyright 1999-2011 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.104 2011/12/16 20:02:48 abcd Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.111 2011/12/27 16:04:27 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.
66 66
67S=${WORKDIR}/${MY_P} 67S=${WORKDIR}/${MY_P}
68 68
69# @FUNCTION: qt4-build_pkg_setup 69# @FUNCTION: qt4-build_pkg_setup
70# @DESCRIPTION: 70# @DESCRIPTION:
71# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH 71# Sets up PATH and LD_LIBRARY_PATH.
72qt4-build_pkg_setup() { 72qt4-build_pkg_setup() {
73 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX= 73 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
74 74
75 # Protect users by not allowing downgrades between releases 75 # Protect users by not allowing downgrades between releases
76 # Downgrading revisions within the same release should be allowed 76 # Downgrading revisions within the same release should be allowed
123 fi 123 fi
124} 124}
125 125
126# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 126# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
127# @DESCRIPTION: 127# @DESCRIPTION:
128# Arguments for build_target_directories. Takes the directories, in which the 128# Arguments for build_target_directories. Takes the directories in which the
129# code should be compiled. This is a space-separated list 129# code should be compiled. This is a space-separated list.
130 130
131# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES 131# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
132# @DESCRIPTION: 132# @DESCRIPTION:
133# Space separated list including the directories that will be extracted from Qt 133# Space-separated list including the directories that will be extracted from
134# tarball 134# Qt tarball.
135 135
136# @FUNCTION: qt4-build_src_unpack 136# @FUNCTION: qt4-build_src_unpack
137# @DESCRIPTION: 137# @DESCRIPTION:
138# Unpacks the sources 138# Unpacks the sources.
139qt4-build_src_unpack() { 139qt4-build_src_unpack() {
140 setqtenv 140 setqtenv
141 local unpack_p="${MY_P}"
142 case "${PV}" in
143 4.8.0_*)
144 unpack_p="qt-everywhere-opensource-src-${PV/_*}"
145 ;;
146 esac
147 local target targets= 141 local target targets=
148 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 142 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
149 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 143 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
150 ${QT4_EXTRACT_DIRECTORIES}; do 144 ${QT4_EXTRACT_DIRECTORIES}; do
151 targets+=" ${unpack_p}/${target}" 145 targets+=" ${MY_P}/${target}"
152 done 146 done
153 147
154 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 148 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
155 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die 149 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
156 case "${PV}" in
157 4.8.0_*)
158 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
159 ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
160 ;;
161 esac
162} 150}
163 151
164# @ECLASS-VARIABLE: PATCHES 152# @ECLASS-VARIABLE: PATCHES
153# @DEFAULT_UNSET
165# @DESCRIPTION: 154# @DESCRIPTION:
166# In case you have patches to apply, specify them in PATCHES variable. Make sure 155# PATCHES array variable containing all various patches to be applied.
167# to specify the full path. This variable is necessary for src_prepare phase. 156# This variable is expected to be defined in global scope of ebuild.
168# example: 157# Make sure to specify the full path. This variable is utilised in
169# PATCHES="${FILESDIR}"/mypatch.patch 158# src_unpack/src_prepare phase, based on EAPI.
170# ${FILESDIR}"/mypatch2.patch"
171# 159#
160# @CODE
161# PATCHES=( "${FILESDIR}/mypatch.patch"
162# "${FILESDIR}/patches_folder/" )
163# @CODE
172 164
173# @FUNCTION: qt4-build_src_prepare 165# @FUNCTION: qt4-build_src_prepare
174# @DESCRIPTION: 166# @DESCRIPTION:
175# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 167# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
176# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 168# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
177qt4-build_src_prepare() { 169qt4-build_src_prepare() {
178 setqtenv 170 setqtenv
179 cd "${S}" 171 cd "${S}"
180
181 # fix qt 4.7 regression that skips -fvisibility=hidden
182 if version_is_at_least "4.7.0_beta1"; then
183 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
184 -i config.tests/unix/fvisibility.test ||
185 die "visibility fixing sed failed"
186 fi
187 172
188 if version_is_at_least "4.7"; then 173 if version_is_at_least "4.7"; then
189 # fix libX11 dependency on non X packages 174 # fix libX11 dependency on non X packages
190 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 175 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
191 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 176 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
197 # provide a proper macx-g++-64 182 # provide a proper macx-g++-64
198 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 183 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
199 184
200 sed -e '/^CONFIG/s:app_bundle::' \ 185 sed -e '/^CONFIG/s:app_bundle::' \
201 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \ 186 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
202 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed" 187 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
203 fi 188 fi
204 189
205 if [[ ${PN} != qt-core ]]; then 190 if [[ ${PN} != qt-core ]]; then
206 skip_qmake_build 191 skip_qmake_build
207 skip_project_generation 192 skip_project_generation
232 if [[ $(gcc-major-version) -lt 4 ]] ; then 217 if [[ $(gcc-major-version) -lt 4 ]] ; then
233 ewarn "Appending -fno-stack-protector to CXXFLAGS" 218 ewarn "Appending -fno-stack-protector to CXXFLAGS"
234 append-cxxflags -fno-stack-protector 219 append-cxxflags -fno-stack-protector
235 # Bug 253127 220 # Bug 253127
236 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 221 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
237 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 222 -i mkspecs/common/g++.conf || die
238 fi 223 fi
239 224
240 # Bug 261632 225 # Bug 261632
241 if use ppc64; then 226 if use ppc64; then
242 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 227 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
243 append-flags -mminimal-toc 228 append-flags -mminimal-toc
244 fi 229 fi
245 230
246 # Bug 282984 && Bug 295530 231 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
247 sed -e "s:\(^SYSTEM_VARIABLES\):CC=\"$(tc-getCC)\"\nCXX=\"$(tc-getCXX)\"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \ 232 sed -e "/^SYSTEM_VARIABLES=/i \
248 -i configure || die "sed qmake compilers failed" 233 CC='$(tc-getCC)'\n\
234 CXX='$(tc-getCXX)'\n\
235 CFLAGS='${CFLAGS}'\n\
236 CXXFLAGS='${CXXFLAGS}'\n\
237 LDFLAGS='${LDFLAGS}'\n" \
238 -i configure || die "sed SYSTEM_VARIABLES failed"
249 239
250 # Bug 321335 240 # Bug 321335
251 if version_is_at_least 4.6; then
252 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 241 find config.tests/unix -name '*.test' -type f -exec grep -lZ \$MAKE '{}' \; | xargs -0 \
253 xargs -0 \
254 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \ 242 sed -e "s:\(\$MAKE\):\1 CC='$(tc-getCC)' CXX='$(tc-getCXX)' LINK='$(tc-getCXX)':g" \
255 -i || die "sed test compilers failed" 243 -i || die "sed test compilers failed"
256 fi
257 244
258 # Bug 172219 245 # Bug 172219
259 sed -e "s:X11R6/::" \ 246 sed -e "s:X11R6/::" -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
260 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
261 247
262 if [[ ${CHOST} == *-darwin* ]]; then 248 if [[ ${CHOST} == *-darwin* ]]; then
263 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 249 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
264 # crippled (by design) :/ 250 # crippled (by design) :/
265 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 251 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
279 -e "s:-arch \$i::" \ 265 -e "s:-arch \$i::" \
280 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \ 266 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
281 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \ 267 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
282 -e "s:-Xarch_x86_64::g" \ 268 -e "s:-Xarch_x86_64::g" \
283 -e "s:-Xarch_ppc64::g" \ 269 -e "s:-Xarch_ppc64::g" \
284 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 270 -i configure mkspecs/common/mac-g++.conf || die "sed -arch/-Xarch failed"
285 271
286 # On Snow Leopard don't fall back to 10.5 deployment target. 272 # On Snow Leopard don't fall back to 10.5 deployment target.
287 if [[ ${CHOST} == *-apple-darwin10 ]] ; then 273 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
288 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \ 274 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
289 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \ 275 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
290 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 276 -i configure mkspecs/common/mac-g++.conf || die "sed deployment target failed"
291 fi 277 fi
292 fi 278 fi
293 279
294 # this one is needed for all systems with a separate -liconv, apart from 280 # this one is needed for all systems with a separate -liconv, apart from
295 # Darwin, for which the sources already cater for -liconv 281 # Darwin, for which the sources already cater for -liconv
365 # freetype2 include dir is non-standard, thus include it on configure 351 # freetype2 include dir is non-standard, thus include it on configure
366 # use -I from configure 352 # use -I from configure
367 myconf+=" $(pkg-config --cflags freetype2)" 353 myconf+=" $(pkg-config --cflags freetype2)"
368 fi 354 fi
369 355
370 # Disable SSE4.x, since auto-detection is currently broken
371 # Upstream bug http://bugreports.qt.nokia.com/browse/QTBUG-13623
372 [[ ${PV} == "4.7.1" ]] && myconf+=" -no-sse4.1 -no-sse4.2"
373
374 echo ./configure ${myconf} 356 echo ./configure ${myconf}
375 ./configure ${myconf} || die "./configure failed" 357 ./configure ${myconf} || die "./configure failed"
376 myconf="" 358 myconf=""
377 359
378 prepare_directories ${QT4_TARGET_DIRECTORIES} 360 prepare_directories ${QT4_TARGET_DIRECTORIES}
396 done 378 done
397} 379}
398 380
399# @FUNCTION: fix_includes 381# @FUNCTION: fix_includes
400# @DESCRIPTION: 382# @DESCRIPTION:
401# For MacOSX we need to add some symlinks when frameworks are 383# For MacOS X we need to add some symlinks when frameworks are
402# being used, to avoid complications with some more or less stupid packages. 384# being used, to avoid complications with some more or less stupid packages.
403fix_includes() { 385fix_includes() {
404 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then 386 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
405 # Some packages tend to include <Qt/...> 387 # Some packages tend to include <Qt/...>
406 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt 388 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
437 # remove .la files since we are building only shared Qt libraries 419 # remove .la files since we are building only shared Qt libraries
438 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm 420 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
439} 421}
440 422
441# @FUNCTION: setqtenv 423# @FUNCTION: setqtenv
424# @INTERNAL
442setqtenv() { 425setqtenv() {
443 # Set up installation directories 426 # Set up installation directories
444 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
445 QTPREFIXDIR=${EPREFIX}/usr 427 QTPREFIXDIR=${EPREFIX}/usr
446 QTBINDIR=${EPREFIX}/usr/bin 428 QTBINDIR=${EPREFIX}/usr/bin
447 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 429 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
448 QMAKE_LIBDIR_QT=${QTLIBDIR}
449 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig 430 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
450 QTDATADIR=${EPREFIX}/usr/share/qt4
451 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV} 431 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
452 QTHEADERDIR=${EPREFIX}/usr/include/qt4 432 QTHEADERDIR=${EPREFIX}/usr/include/qt4
453 QTPLUGINDIR=${QTLIBDIR}/plugins 433 QTPLUGINDIR=${QTLIBDIR}/plugins
454 QTIMPORTDIR=${QTLIBDIR}/imports 434 QTIMPORTDIR=${QTLIBDIR}/imports
435 QTDATADIR=${EPREFIX}/usr/share/qt4
436 QTTRANSDIR=${QTDATADIR}/translations
455 QTSYSCONFDIR=${EPREFIX}/etc/qt4 437 QTSYSCONFDIR=${EPREFIX}/etc/qt4
456 QTTRANSDIR=${QTDATADIR}/translations
457 QTEXAMPLESDIR=${QTDATADIR}/examples 438 QTEXAMPLESDIR=${QTDATADIR}/examples
458 QTDEMOSDIR=${QTDATADIR}/demos 439 QTDEMOSDIR=${QTDATADIR}/demos
440 QMAKE_LIBDIR_QT=${QTLIBDIR}
459 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4 441 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
442
460 PLATFORM=$(qt_mkspecs_dir) 443 PLATFORM=$(qt_mkspecs_dir)
461 444
462 unset QMAKESPEC 445 unset QMAKESPEC
463} 446}
464 447
465# @FUNCTION: standard_configure_options 448# @FUNCTION: standard_configure_options
449# @INTERNAL
466# @DESCRIPTION: 450# @DESCRIPTION:
467# Sets up some standard configure options, like libdir (if necessary), whether 451# Sets up some standard configure options, like libdir (if necessary), whether
468# debug info is wanted or not. 452# debug info is wanted or not.
469standard_configure_options() { 453standard_configure_options() {
470 local myconf= 454 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
455 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
456 -importdir ${QTIMPORTDIR} -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR}
457 -sysconfdir ${QTSYSCONFDIR} -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
458 -opensource -confirm-license -shared -fast -largefile -stl -verbose
459 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
471 460
472 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)" 461 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
473 462
474 # Disable visibility explicitly if gcc version isn't 4 463 # debug/release
475 if [[ $(gcc-major-version) -lt 4 ]]; then
476 myconf+=" -no-reduce-exports"
477 fi
478
479 # precompiled headers doesn't work on hardened, where the flag is masked.
480 myconf+=" $(qt_use pch)"
481
482 if use debug; then 464 if use debug; then
483 myconf+=" -debug" 465 myconf+=" -debug"
484 else 466 else
485 myconf+=" -release" 467 myconf+=" -release"
486 fi 468 fi
487 myconf+=" -no-separate-debug-info" 469 myconf+=" -no-separate-debug-info"
470
471 # exceptions USE flag
472 local exceptions="-exceptions"
473 in_iuse exceptions && exceptions="$(qt_use exceptions)"
474 myconf+=" ${exceptions}"
475
476 # disable RPATH on Qt >= 4.8 (bug 380415)
477 version_is_at_least 4.8 && myconf+=" -no-rpath"
478
479 # precompiled headers don't work on hardened, where the flag is masked
480 myconf+=" $(qt_use pch)"
481
482 # -reduce-relocations
483 # This flag seems to introduce major breakage to applications,
484 # mostly to be seen as a core dump with the message "QPixmap: Must
485 # construct a QApplication before a QPaintDevice" on Solaris.
486 # -- Daniel Vergien
487 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
488 488
489 use aqua && myconf+=" -no-framework" 489 use aqua && myconf+=" -no-framework"
490 490
491 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 491 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
492 # $(tc-arch). Therefore we convert it to supported values. 492 # $(tc-arch). Therefore we convert it to supported values.
500 alpha|arm|ia64|mips|s390) myconf+=" -arch $(tc-arch)" ;; 500 alpha|arm|ia64|mips|s390) myconf+=" -arch $(tc-arch)" ;;
501 hppa|sh) myconf+=" -arch generic" ;; 501 hppa|sh) myconf+=" -arch generic" ;;
502 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 502 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
503 esac 503 esac
504 504
505 # exceptions USE flag
506 local exceptions="-exceptions"
507 in_iuse exceptions && exceptions="$(qt_use exceptions)"
508
509 # note about -reduce-relocations:
510 # That flag seems to introduce major breakage to applications,
511 # mostly to be seen as a core dump with the message "QPixmap: Must
512 # construct a QApplication before a QPaintDevice" on Solaris
513 # -- Daniel Vergien
514 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
515
516 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
517 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
518 -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
519 -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
520 -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
521 -demosdir ${QTDEMOSDIR} -importdir ${QTIMPORTDIR} -silent -fast -opensource
522 ${exceptions}
523 -nomake examples -nomake demos"
524
525 echo "${myconf}" 505 echo "${myconf}"
526} 506}
527 507
528# @FUNCTION: prepare_directories 508# @FUNCTION: prepare_directories
529# @USAGE: < directories > 509# @USAGE: < directories >
510# @INTERNAL
530# @DESCRIPTION: 511# @DESCRIPTION:
531# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES 512# Generates Makefiles for the given list of directories.
532prepare_directories() { 513prepare_directories() {
533 for x in "$@"; do 514 for x in "$@"; do
534 pushd "${S}"/${x} >/dev/null 515 pushd "${S}"/${x} >/dev/null || die
535 einfo "Running qmake in: ${x}" 516 einfo "Running qmake in: ${x}"
536 # avoid running over the maximum argument number, bug #299810 517 # avoid running over the maximum argument number, bug #299810
537 { 518 {
538 echo "${S}"/mkspecs/common/*.conf 519 echo "${S}"/mkspecs/common/*.conf
539 find "${S}" -name '*.pr[io]' 520 find "${S}" -name '*.pr[io]'
540 } | xargs sed -i \ 521 } | xargs sed -i \
541 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \ 522 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
542 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \ 523 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
543 || die 524 || die
544 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 525 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
545 popd >/dev/null 526 popd >/dev/null || die
546 done 527 done
547} 528}
548 529
549 530
550# @FUNCTION: build_directories 531# @FUNCTION: build_directories
551# @USAGE: < directories > 532# @USAGE: < directories >
533# @INTERNAL
552# @DESCRIPTION: 534# @DESCRIPTION:
553# Compiles the code in $QT4_TARGET_DIRECTORIES 535# Compiles the code in the given list of directories.
554build_directories() { 536build_directories() {
555 for x in "$@"; do 537 for x in "$@"; do
556 pushd "${S}"/${x} >/dev/null 538 pushd "${S}"/${x} >/dev/null || die
557 emake CC="$(tc-getCC)" \ 539 emake CC="$(tc-getCC)" \
558 CXX="$(tc-getCXX)" \ 540 CXX="$(tc-getCXX)" \
559 LINK="$(tc-getCXX)" || die "emake failed" 541 LINK="$(tc-getCXX)" || die "emake failed"
560 popd >/dev/null 542 popd >/dev/null || die
561 done 543 done
562} 544}
563 545
564# @FUNCTION: install_directories 546# @FUNCTION: install_directories
565# @USAGE: < directories > 547# @USAGE: < directories >
548# @INTERNAL
566# @DESCRIPTION: 549# @DESCRIPTION:
567# run emake install in the given directories, which are separated by spaces 550# Runs emake install in the given directories, which are separated by spaces.
568install_directories() { 551install_directories() {
569 for x in "$@"; do 552 for x in "$@"; do
570 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" 553 pushd "${S}"/${x} >/dev/null || die
571 emake INSTALL_ROOT="${D}" install || die "emake install failed" 554 emake INSTALL_ROOT="${D}" install || die "emake install failed"
572 popd >/dev/null || die "Can't popd from ${S}/${x}" 555 popd >/dev/null || die
573 done 556 done
574} 557}
575 558
576# @ECLASS-VARIABLE: QCONFIG_ADD 559# @ECLASS-VARIABLE: QCONFIG_ADD
577# @DESCRIPTION: 560# @DESCRIPTION:
587# @DESCRIPTION: 570# @DESCRIPTION:
588# List variables that should be defined at the top of QtCore/qconfig.h 571# List variables that should be defined at the top of QtCore/qconfig.h
589: ${QCONFIG_DEFINE:=} 572: ${QCONFIG_DEFINE:=}
590 573
591# @FUNCTION: install_qconfigs 574# @FUNCTION: install_qconfigs
575# @INTERNAL
592# @DESCRIPTION: 576# @DESCRIPTION:
593# Install gentoo-specific mkspecs configurations 577# Install gentoo-specific mkspecs configurations.
594install_qconfigs() { 578install_qconfigs() {
595 local x 579 local x
596 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 580 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
597 for x in QCONFIG_ADD QCONFIG_REMOVE; do 581 for x in QCONFIG_ADD QCONFIG_REMOVE; do
598 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 582 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
609 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 593 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
610 fi 594 fi
611} 595}
612 596
613# @FUNCTION: generate_qconfigs 597# @FUNCTION: generate_qconfigs
598# @INTERNAL
614# @DESCRIPTION: 599# @DESCRIPTION:
615# Generates gentoo-specific configurations 600# Generates gentoo-specific qconfig.{h,pri}.
616generate_qconfigs() { 601generate_qconfigs() {
617 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 602 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
618 local x qconfig_add qconfig_remove qconfig_new 603 local x qconfig_add qconfig_remove qconfig_new
619 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 604 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
620 [[ -f ${x} ]] || continue 605 [[ -f ${x} ]] || continue
669 fi 654 fi
670} 655}
671 656
672# @FUNCTION: qt4-build_pkg_postrm 657# @FUNCTION: qt4-build_pkg_postrm
673# @DESCRIPTION: 658# @DESCRIPTION:
674# Generate configurations when the package is completely removed 659# Regenerate configuration when the package is completely removed.
675qt4-build_pkg_postrm() { 660qt4-build_pkg_postrm() {
676 generate_qconfigs 661 generate_qconfigs
677} 662}
678 663
679# @FUNCTION: qt4-build_pkg_postinst 664# @FUNCTION: qt4-build_pkg_postinst
680# @DESCRIPTION: 665# @DESCRIPTION:
681# Generate configuration, plus throws a message about possible 666# Regenerate configuration, plus throw a message about possible
682# breakages and proposed solutions. 667# breakages and proposed solutions.
683qt4-build_pkg_postinst() { 668qt4-build_pkg_postinst() {
684 generate_qconfigs 669 generate_qconfigs
685} 670}
686 671
687# @FUNCTION: skip_qmake_build 672# @FUNCTION: skip_qmake_build
673# @INTERNAL
688# @DESCRIPTION: 674# @DESCRIPTION:
689# Don't need to build qmake, as it's already installed from qt-core 675# Patches configure to skip qmake compilation, as it's already installed by qt-core.
690skip_qmake_build() { 676skip_qmake_build() {
691 # Don't need to build qmake, as it's already installed from qt-core
692 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed" 677 sed -i -e "s:if true:if false:g" "${S}"/configure || die
693} 678}
694 679
695# @FUNCTION: skip_project_generation 680# @FUNCTION: skip_project_generation
681# @INTERNAL
696# @DESCRIPTION: 682# @DESCRIPTION:
697# Exit the script early by throwing in an exit before all of the .pro files are scanned 683# Exit the script early by throwing in an exit before all of the .pro files are scanned.
698skip_project_generation() { 684skip_project_generation() {
699 # Exit the script early by throwing in an exit before all of the .pro files are scanned
700 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ 685 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
701 -i "${S}"/configure || die "sed failed"
702} 686}
703 687
704# @FUNCTION: symlink_binaries_to_buildtree 688# @FUNCTION: symlink_binaries_to_buildtree
689# @INTERNAL
705# @DESCRIPTION: 690# @DESCRIPTION:
706# Symlink generated binaries to buildtree so they can be used during compilation 691# Symlinks generated binaries to buildtree, so they can be used during compilation time.
707# time
708symlink_binaries_to_buildtree() { 692symlink_binaries_to_buildtree() {
709 for bin in qmake moc uic rcc; do 693 for bin in qmake moc uic rcc; do
710 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed" 694 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
711 done 695 done
712} 696}
713 697
714# @FUNCTION: fix_library_files 698# @FUNCTION: fix_library_files
699# @INTERNAL
715# @DESCRIPTION: 700# @DESCRIPTION:
716# Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and 701# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
717# moves the *.pc-files into the pkgconfig directory 702# moves the *.pc files into the pkgconfig directory.
718fix_library_files() { 703fix_library_files() {
704 local libfile
719 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do 705 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
720 if [[ -e ${libfile} ]]; then 706 if [[ -e ${libfile} ]]; then
721 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed" 707 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
722 fi 708 fi
723 done 709 done
724 710
725 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: 711 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
726 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 712 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
727 if [[ -e ${libfile} ]]; then 713 if [[ -e ${libfile} ]]; then
728 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed" 714 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
729 715
730 # Move .pc files into the pkgconfig directory 716 # Move .pc files into the pkgconfig directory
731 dodir ${QTPCDIR#${EPREFIX}} 717 dodir ${QTPCDIR#${EPREFIX}}
732 mv ${libfile} "${D}"/${QTPCDIR}/ \ 718 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
733 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
734 fi 719 fi
735 done 720 done
736 721
737 # Don't install an empty directory 722 # Don't install an empty directory
738 rmdir "${D}"/${QTLIBDIR}/pkgconfig 723 rmdir "${D}"/${QTLIBDIR}/pkgconfig
739} 724}
740 725
741# @FUNCTION: qt_use 726# @FUNCTION: qt_use
742# @USAGE: < flag > [ feature ] [ enableval ] 727# @USAGE: < flag > [ feature ] [ enableval ]
743# @DESCRIPTION: 728# @DESCRIPTION:
744# This will echo "${enableval}-${feature}" if <flag> is enabled, or 729# This will echo "-${enableval}-${feature}" if <flag> is enabled, or
745# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> 730# "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
746# will be used for that. If [enableval] is not specified, it omits the 731# will be used for that. If [enableval] is not specified, it omits the
747# assignment-part 732# "-${enableval}" part.
748qt_use() { 733qt_use() {
749 local flag=$1 734 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
750 local feature=$1
751 local enableval=
752
753 [[ -n $2 ]] && feature=$2
754 [[ -n $3 ]] && enableval=-$3
755
756 if use ${flag}; then
757 echo "${enableval}-${feature}"
758 else
759 echo "-no-${feature}"
760 fi
761} 735}
762 736
763# @FUNCTION: qt_mkspecs_dir 737# @FUNCTION: qt_mkspecs_dir
764# @RETURN: the specs-directory w/o path 738# @RETURN: the specs-directory w/o path
765# @DESCRIPTION: 739# @DESCRIPTION:
766# Allows us to define which mkspecs dir we want to use. 740# Allows us to define which mkspecs dir we want to use.
767qt_mkspecs_dir() { 741qt_mkspecs_dir() {
768 # Allows us to define which mkspecs dir we want to use.
769 local spec 742 local spec=
770
771 case ${CHOST} in 743 case ${CHOST} in
772 *-freebsd*|*-dragonfly*) 744 *-freebsd*|*-dragonfly*)
773 spec=freebsd ;; 745 spec=freebsd ;;
774 *-openbsd*) 746 *-openbsd*)
775 spec=openbsd ;; 747 spec=openbsd ;;
816 788
817 echo "${spec}" 789 echo "${spec}"
818} 790}
819 791
820# @FUNCTION: qt_assistant_cleanup 792# @FUNCTION: qt_assistant_cleanup
821# @RETURN: nothing 793# @INTERNAL
822# @DESCRIPTION: 794# @DESCRIPTION:
823# Tries to clean up tools.pro for qt-assistant ebuilds. 795# Tries to clean up tools.pro for qt-assistant ebuilds.
824# Meant to be called in src_prepare(). 796# Meant to be called in src_prepare().
825# Since Qt 4.7.4 this function is a no-op. 797# Since Qt 4.7.4 this function is a no-op.
826qt_assistant_cleanup() { 798qt_assistant_cleanup() {
846 ;; 818 ;;
847 esac 819 esac
848} 820}
849 821
850# @FUNCTION: qt_nolibx11 822# @FUNCTION: qt_nolibx11
851# @RETURN: nothing 823# @INTERNAL
852# @DESCRIPTION: 824# @DESCRIPTION:
853# Ignore X11 tests for packages that don't need X libraries installed 825# Ignore X11 tests for packages that don't need X libraries installed.
854qt_nolibx11() { 826qt_nolibx11() {
855 einfo "Removing X11 check to allow X-less compilation"
856 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 827 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
857 die "x11 check sed failed" 828 die "x11 check sed failed"
858} 829}
859 830
860EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 831EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.104  
changed lines
  Added in v.1.111

  ViewVC Help
Powered by ViewVC 1.1.20