/[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.120 Revision 1.123
1# Copyright 1999-2012 Gentoo Foundation 1# Copyright 1999-2012 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.120 2012/02/28 18:53:45 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.123 2012/03/08 14:24:40 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
12case ${EAPI} in
13 2|3|4) : ;;
14 *) die "qt4-build.eclass requires EAPI 2, 3 or 4." ;;
15esac
11 16
12inherit base eutils multilib toolchain-funcs flag-o-matic versionator 17inherit base eutils multilib toolchain-funcs flag-o-matic versionator
13 18
14MY_PV=${PV/_/-} 19MY_PV=${PV/_/-}
15MY_P=qt-everywhere-opensource-src-${MY_PV} 20MY_P=qt-everywhere-opensource-src-${MY_PV}
84 else 89 else
85 ewarn "Downgrading Qt is completely unsupported and will break your system!" 90 ewarn "Downgrading Qt is completely unsupported and will break your system!"
86 fi 91 fi
87 fi 92 fi
88 93
89 if [[ ${PN} == "qt-webkit" ]]; then 94 if [[ ${PN} == qt-webkit ]]; then
90 eshopts_push -s extglob 95 eshopts_push -s extglob
91 if is-flagq '-g?(gdb)?([1-9])'; then 96 if is-flagq '-g?(gdb)?([1-9])'; then
92 echo 97 echo
93 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)." 98 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
94 ewarn "You may experience really long compilation times and/or increased memory usage." 99 ewarn "You may experience really long compilation times and/or increased memory usage."
95 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug." 100 ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug."
96 ewarn "For more info check out bug #307861" 101 ewarn "For more info check out bug #307861"
97 echo 102 echo
98 fi 103 fi
99 eshopts_pop 104 eshopts_pop
100 fi 105 fi
110 [[ ${CHOST} == *-apple-darwin* ]] && \ 115 [[ ${CHOST} == *-apple-darwin* ]] && \
111 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm 116 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
112 ${QT4_EXTRACT_DIRECTORIES}" 117 ${QT4_EXTRACT_DIRECTORIES}"
113 fi 118 fi
114 119
115 # Make sure ebuilds use the required EAPI
116 if [[ ${EAPI} != [234] ]]; then
117 eerror "The qt4-build eclass requires EAPI 2,3 or 4 but this ebuild is using"
118 eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
119 eerror "fixed. Using qt4-build eclass without EAPI 2,3 or 4 will fail."
120 die "qt4-build eclass requires EAPI 2,3 or 4"
121 fi
122
123 if ! version_is_at_least 4.1 $(gcc-version); then 120 if ! version_is_at_least 4.1 $(gcc-version); then
124 ewarn "Using a GCC version lower than 4.1 is not supported!" 121 ewarn "Using a GCC version lower than 4.1 is not supported."
125 fi 122 fi
126} 123}
127 124
128# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 125# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
129# @DESCRIPTION: 126# @DESCRIPTION:
173# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf. 170# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
174qt4-build_src_prepare() { 171qt4-build_src_prepare() {
175 setqtenv 172 setqtenv
176 cd "${S}" 173 cd "${S}"
177 174
178 if version_is_at_least "4.7"; then 175 if version_is_at_least 4.7; then
179 # fix libX11 dependency on non X packages 176 # fix libX11 dependency on non X packages
180 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 177 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
181 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 178 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
182 179
183 qt_assistant_cleanup 180 qt_assistant_cleanup
208 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" 205 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
209 append-flags -fno-gcse 206 append-flags -fno-gcse
210 fi 207 fi
211 208
212 if use_if_iuse c++0x; then 209 if use_if_iuse c++0x; then
210 echo
213 ewarn "You are about to build Qt4 using the C++11 standard. Even though" 211 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
214 ewarn "this is an official standard, some of the reverse dependencies" 212 ewarn "this is an official standard, some of the reverse dependencies"
215 ewarn "may fail to compile or link againt the Qt4 libraries. Before" 213 ewarn "may fail to compile or link againt the Qt4 libraries. Before"
216 ewarn "reporting a bug, make sure your bug is reproducible with c++0x" 214 ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
217 ewarn "disabled." 215 ewarn "disabled."
216 echo
218 append-flags -std=c++0x 217 append-flags -std=c++0x
219 fi 218 fi
220 219
221 # Unsupported old gcc versions - hardened needs this :( 220 # Unsupported old gcc versions - hardened needs this :(
222 if [[ $(gcc-major-version) -lt 4 ]]; then 221 if [[ $(gcc-major-version) -lt 4 ]]; then
315# @FUNCTION: qt4-build_src_configure 314# @FUNCTION: qt4-build_src_configure
316# @DESCRIPTION: 315# @DESCRIPTION:
317# Default configure phase 316# Default configure phase
318qt4-build_src_configure() { 317qt4-build_src_configure() {
319 setqtenv 318 setqtenv
320 myconf="$(standard_configure_options) ${myconf}" 319
320 local conf="
321 -prefix ${QTPREFIXDIR}
322 -bindir ${QTBINDIR}
323 -libdir ${QTLIBDIR}
324 -docdir ${QTDOCDIR}
325 -headerdir ${QTHEADERDIR}
326 -plugindir ${QTPLUGINDIR}
327 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR})
328 -datadir ${QTDATADIR}
329 -translationdir ${QTTRANSDIR}
330 -sysconfdir ${QTSYSCONFDIR}
331 -examplesdir ${QTEXAMPLESDIR}
332 -demosdir ${QTDEMOSDIR}
333 -opensource -confirm-license
334 -shared -fast -largefile -stl -verbose
335 -nomake examples -nomake demos"
336
337 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
338 # $(tc-arch). Therefore we convert it to supported values.
339 case "$(tc-arch)" in
340 amd64|x64-*) conf+=" -arch x86_64" ;;
341 ppc-macos) conf+=" -arch ppc" ;;
342 ppc|ppc64|ppc-*) conf+=" -arch powerpc" ;;
343 sparc|sparc-*|sparc64-*) conf+=" -arch sparc" ;;
344 x86-macos) conf+=" -arch x86" ;;
345 x86|x86-*) conf+=" -arch i386" ;;
346 alpha|arm|ia64|mips|s390) conf+=" -arch $(tc-arch)" ;;
347 hppa|sh) conf+=" -arch generic" ;;
348 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
349 esac
350
351 conf+=" -platform $(qt_mkspecs_dir)"
352
353 [[ $(get_libdir) != lib ]] && conf+=" -L${EPREFIX}/usr/$(get_libdir)"
354
355 # debug/release
356 if use debug; then
357 conf+=" -debug"
358 else
359 conf+=" -release"
360 fi
361 conf+=" -no-separate-debug-info"
362
363 # exceptions USE flag
364 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
365
366 # disable RPATH on Qt >= 4.8 (bug 380415)
367 version_is_at_least 4.8 && conf+=" -no-rpath"
368
369 # precompiled headers don't work on hardened, where the flag is masked
370 conf+=" $(qt_use pch)"
371
372 # -reduce-relocations
373 # This flag seems to introduce major breakage to applications,
374 # mostly to be seen as a core dump with the message "QPixmap: Must
375 # construct a QApplication before a QPaintDevice" on Solaris.
376 # -- Daniel Vergien
377 [[ ${CHOST} != *-solaris* ]] && conf+=" -reduce-relocations"
321 378
322 # this one is needed for all systems with a separate -liconv, apart from 379 # this one is needed for all systems with a separate -liconv, apart from
323 # Darwin, for which the sources already cater for -liconv 380 # Darwin, for which the sources already cater for -liconv
324 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then 381 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
325 myconf+=" -liconv" 382 conf+=" -liconv"
326 fi 383 fi
327 384
328 if use_if_iuse glib; then 385 if use_if_iuse glib; then
329 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)" 386 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
330 # avoid the -pthread argument 387 # avoid the -pthread argument
331 myconf+=" ${glibflags//-pthread}" 388 conf+=" ${glibflags//-pthread}"
332 unset glibflags 389 unset glibflags
333 fi 390 fi
334 391
335 if use_if_iuse qpa; then 392 if use_if_iuse qpa; then
336 ewarn 393 echo
337 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely" 394 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
338 ewarn "known as Qt Lighthouse. If you are not sure what that is, then" 395 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
339 ewarn "disable it before reporting any bugs related to this useflag." 396 ewarn "disable it before reporting any bugs related to this useflag."
340 ewarn 397 echo
341 myconf+=" -qpa" 398 conf+=" -qpa"
342 fi 399 fi
343 400
344 if use aqua; then 401 if use aqua; then
345 # On (snow) leopard use the new (frameworked) cocoa code. 402 # On (snow) leopard use the new (frameworked) cocoa code.
346 if [[ ${CHOST##*-darwin} -ge 9 ]]; then 403 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
347 myconf+=" -cocoa -framework" 404 conf+=" -cocoa -framework"
348 # We need the source's headers, not the installed ones. 405 # We need the source's headers, not the installed ones.
349 myconf+=" -I${S}/include" 406 conf+=" -I${S}/include"
350 # Add hint for the framework location. 407 # Add hint for the framework location.
351 myconf+=" -F${QTLIBDIR}" 408 conf+=" -F${QTLIBDIR}"
352 409
353 # We are crazy and build cocoa + qt3support :-) 410 # We are crazy and build cocoa + qt3support :-)
354 if use qt3support; then 411 if use qt3support; then
355 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \ 412 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
356 -i configure || die 413 -i configure || die
357 fi 414 fi
358 else 415 else
359 myconf+=" -no-framework" 416 conf+=" -no-framework"
360 fi 417 fi
361 else 418 else
362 # freetype2 include dir is non-standard, thus include it on configure 419 # freetype2 include dir is non-standard, thus pass it to configure
363 # use -I from configure
364 myconf+=" $(pkg-config --cflags freetype2)" 420 conf+=" $(pkg-config --cflags-only-I freetype2)"
365 fi 421 fi
366 422
423 conf+=" ${myconf}"
424 myconf=
425
367 echo ./configure ${myconf} 426 echo ./configure ${conf}
368 ./configure ${myconf} || die "./configure failed" 427 ./configure ${conf} || die "./configure failed"
369 myconf=""
370 428
371 prepare_directories ${QT4_TARGET_DIRECTORIES} 429 prepare_directories ${QT4_TARGET_DIRECTORIES}
372} 430}
373 431
374# @FUNCTION: qt4-build_src_compile 432# @FUNCTION: qt4-build_src_compile
383# @FUNCTION: qt4-build_src_test 441# @FUNCTION: qt4-build_src_test
384# @DESCRIPTION: 442# @DESCRIPTION:
385# Runs tests only in target directories. 443# Runs tests only in target directories.
386qt4-build_src_test() { 444qt4-build_src_test() {
387 # QtMultimedia does not have any test suite (bug #332299) 445 # QtMultimedia does not have any test suite (bug #332299)
388 [[ ${PN} == "qt-multimedia" ]] && return 446 [[ ${PN} == qt-multimedia ]] && return
389 447
390 for dir in ${QT4_TARGET_DIRECTORIES}; do 448 for dir in ${QT4_TARGET_DIRECTORIES}; do
391 emake -j1 check -C ${dir} 449 emake -j1 check -C ${dir}
392 done 450 done
393} 451}
457 PLATFORM=$(qt_mkspecs_dir) 515 PLATFORM=$(qt_mkspecs_dir)
458 516
459 unset QMAKESPEC 517 unset QMAKESPEC
460} 518}
461 519
462# @FUNCTION: standard_configure_options
463# @INTERNAL
464# @DESCRIPTION:
465# Sets up some standard configure options, like libdir (if necessary), whether
466# debug info is wanted or not.
467standard_configure_options() {
468 local myconf="
469 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
470 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
471 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR})
472 -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR} -sysconfdir ${QTSYSCONFDIR}
473 -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
474 -opensource -confirm-license -shared -fast -largefile -stl -verbose
475 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
476
477 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
478
479 # debug/release
480 if use debug; then
481 myconf+=" -debug"
482 else
483 myconf+=" -release"
484 fi
485 myconf+=" -no-separate-debug-info"
486
487 # exceptions USE flag
488 myconf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
489
490 # disable RPATH on Qt >= 4.8 (bug 380415)
491 version_is_at_least 4.8 && myconf+=" -no-rpath"
492
493 # precompiled headers don't work on hardened, where the flag is masked
494 myconf+=" $(qt_use pch)"
495
496 # -reduce-relocations
497 # This flag seems to introduce major breakage to applications,
498 # mostly to be seen as a core dump with the message "QPixmap: Must
499 # construct a QApplication before a QPaintDevice" on Solaris.
500 # -- Daniel Vergien
501 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
502
503 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
504 # $(tc-arch). Therefore we convert it to supported values.
505 case "$(tc-arch)" in
506 amd64|x64-*) myconf+=" -arch x86_64" ;;
507 ppc-macos) myconf+=" -arch ppc" ;;
508 ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
509 sparc|sparc-*|sparc64-*) myconf+=" -arch sparc" ;;
510 x86-macos) myconf+=" -arch x86" ;;
511 x86|x86-*) myconf+=" -arch i386" ;;
512 alpha|arm|ia64|mips|s390) myconf+=" -arch $(tc-arch)" ;;
513 hppa|sh) myconf+=" -arch generic" ;;
514 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
515 esac
516
517 echo "${myconf}"
518}
519
520# @FUNCTION: prepare_directories 520# @FUNCTION: prepare_directories
521# @USAGE: < directories > 521# @USAGE: < directories >
522# @INTERNAL 522# @INTERNAL
523# @DESCRIPTION: 523# @DESCRIPTION:
524# Generates Makefiles for the given list of directories. 524# Generates Makefiles for the given list of directories.
609# @FUNCTION: generate_qconfigs 609# @FUNCTION: generate_qconfigs
610# @INTERNAL 610# @INTERNAL
611# @DESCRIPTION: 611# @DESCRIPTION:
612# Generates gentoo-specific qconfig.{h,pri}. 612# Generates gentoo-specific qconfig.{h,pri}.
613generate_qconfigs() { 613generate_qconfigs() {
614 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 614 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${PN} == qt-core ]]; then
615 local x qconfig_add qconfig_remove qconfig_new 615 local x qconfig_add qconfig_remove qconfig_new
616 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 616 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
617 [[ -f ${x} ]] || continue 617 [[ -f ${x} ]] || continue
618 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" 618 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
619 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" 619 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
750# @RETURN: the specs-directory w/o path 750# @RETURN: the specs-directory w/o path
751# @DESCRIPTION: 751# @DESCRIPTION:
752# Allows us to define which mkspecs dir we want to use. 752# Allows us to define which mkspecs dir we want to use.
753qt_mkspecs_dir() { 753qt_mkspecs_dir() {
754 local spec= 754 local spec=
755
755 case ${CHOST} in 756 case "${CHOST}" in
756 *-freebsd*|*-dragonfly*) 757 *-freebsd*|*-dragonfly*)
757 spec=freebsd ;; 758 spec=freebsd ;;
758 *-openbsd*) 759 *-openbsd*)
759 spec=openbsd ;; 760 spec=openbsd ;;
760 *-netbsd*) 761 *-netbsd*)
771 *-solaris*) 772 *-solaris*)
772 spec=solaris ;; 773 spec=solaris ;;
773 *-linux-*|*-linux) 774 *-linux-*|*-linux)
774 spec=linux ;; 775 spec=linux ;;
775 *) 776 *)
776 die "Unknown CHOST, no platform chosen" 777 die "${FUNCNAME}(): Unknown CHOST '${CHOST}'" ;;
777 esac 778 esac
778 779
779 CXX=$(tc-getCXX) 780 case "$(tc-getCXX)" in
780 if [[ ${CXX} == *g++* ]]; then 781 *g++*)
781 spec+=-g++ 782 spec+=-g++ ;;
782 elif [[ ${CXX} == *icpc* ]]; then 783 *icpc*)
783 spec+=-icc 784 spec+=-icc ;;
784 else 785 *)
785 die "Unknown compiler '${CXX}'" 786 die "${FUNCNAME}(): Unknown compiler '$(tc-getCXX)'" ;;
786 fi 787 esac
787 788
788 # Add -64 for 64bit profiles 789 # Add -64 for 64bit profiles
789 if use x64-freebsd || 790 if use x64-freebsd ||
790 use amd64-linux || 791 use amd64-linux ||
791 use x64-macos || 792 use x64-macos ||
804# Tries to clean up tools.pro for qt-assistant ebuilds. 805# Tries to clean up tools.pro for qt-assistant ebuilds.
805# Meant to be called in src_prepare(). 806# Meant to be called in src_prepare().
806# Since Qt 4.7.4 this function is a no-op. 807# Since Qt 4.7.4 this function is a no-op.
807qt_assistant_cleanup() { 808qt_assistant_cleanup() {
808 # apply patching to qt-assistant ebuilds only 809 # apply patching to qt-assistant ebuilds only
809 [[ ${PN} != "qt-assistant" ]] && return 810 [[ ${PN} != qt-assistant ]] && return
810 811
811 # no longer needed for 4.7.4 and later 812 # no longer needed for 4.7.4 and later
812 version_is_at_least "4.7.4" && return 813 version_is_at_least 4.7.4 && return
813 814
814 # different versions (and branches...) may need different handling, 815 # different versions (and branches...) may need different handling,
815 # add a case if you need special handling 816 # add a case if you need special handling
816 case "${MY_PV_EXTRA}" in 817 case "${MY_PV_EXTRA}" in
817 *kde-qt*) 818 *kde-qt*)

Legend:
Removed from v.1.120  
changed lines
  Added in v.1.123

  ViewVC Help
Powered by ViewVC 1.1.20