/[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.73 Revision 1.91
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-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.73 2010/05/27 21:27:31 spatz Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.91 2011/07/08 11:35:01 ssuominen 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>,
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/_/-} 17MY_PV=${PV/_/-}
18if version_is_at_least 4.5.99999999; then 18if version_is_at_least 4.5.99999999; then
19 MY_P=qt-everywhere-opensource-src-${MY_PV} 19 MY_P=qt-everywhere-opensource-src-${MY_PV}
20 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE="+exceptions" 20 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] &&
21 [[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] &&
22 IUSE="+exceptions"
21else 23else
22 MY_P=qt-x11-opensource-src-${MY_PV} 24 MY_P=qt-x11-opensource-src-${MY_PV}
23fi 25fi
24 26
25HOMEPAGE="http://qt.nokia.com/" 27HOMEPAGE="http://qt.nokia.com/"
81 fi 83 fi
82 fi 84 fi
83 85
84 if [[ "${PN}" == "qt-webkit" ]]; then 86 if [[ "${PN}" == "qt-webkit" ]]; then
85 eshopts_push -s extglob 87 eshopts_push -s extglob
86 if is-flagq '-g?(gdb)?([0-9])'; then 88 if is-flagq '-g?(gdb)?([1-9])'; then
87 echo 89 echo
88 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)." 90 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
89 ewarn "You may experience really long compilation times and/or increased memory usage." 91 ewarn "You may experience really long compilation times and/or increased memory usage."
90 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug." 92 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
91 ewarn "For more info check out bug #307861" 93 ewarn "For more info check out bug #307861"
160# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 162# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
161# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 163# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
162qt4-build_src_prepare() { 164qt4-build_src_prepare() {
163 setqtenv 165 setqtenv
164 cd "${S}" 166 cd "${S}"
165 167
166 # fix qt 4.7 regression that skips -fvisibility=hidden 168 # fix qt 4.7 regression that skips -fvisibility=hidden
167 if version_is_at_least "4.7.0_beta1"; then 169 if version_is_at_least "4.7.0_beta1"; then
168 sed -e "s/^gcc|g++)/*gcc|*g++)/" \ 170 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
169 -i config.tests/unix/fvisibility.test || 171 -i config.tests/unix/fvisibility.test ||
170 die "visibility fixing sed failed" 172 die "visibility fixing sed failed"
173 fi
174 # fix libx11 dependency on non X packages
175 if version_is_at_least "4.7.0_beta2"; then
176 local NOLIBX11PKG="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
177 has ${PN} ${NOLIBX11PKG} && qt_nolibx11
178 [[ ${PN} == "qt-assistant" ]] && qt_assistant_cleanup
171 fi 179 fi
172 180
173 if use aqua; then 181 if use aqua; then
174 # provide a proper macx-g++-64 182 # provide a proper macx-g++-64
175 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 183 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
210 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 218 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
211 append-flags -mminimal-toc 219 append-flags -mminimal-toc
212 fi 220 fi
213 221
214 # Bug 282984 && Bug 295530 222 # Bug 282984 && Bug 295530
215 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \ 223 sed -e "s:\(^SYSTEM_VARIABLES\):CC=\"$(tc-getCC)\"\nCXX=\"$(tc-getCXX)\"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
216 -i configure || die "sed qmake compilers failed" 224 -i configure || die "sed qmake compilers failed"
217 # bug 321335 225 # bug 321335
226 if version_is_at_least 4.6; then
218 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 227 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
219 xargs -0 \ 228 xargs -0 \
220 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):g" \ 229 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \
221 -i || die "sed test compilers failed" 230 -i || die "sed test compilers failed"
231 fi
222 232
223 # Bug 172219 233 # Bug 172219
224 sed -e "s:X11R6/::" \ 234 sed -e "s:X11R6/::" \
225 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" 235 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
226 236
272 # use GCC over SunStudio 282 # use GCC over SunStudio
273 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 283 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
274 # don't flirt with non-Prefix stuff, we're quite possessive 284 # don't flirt with non-Prefix stuff, we're quite possessive
275 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 285 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
276 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 286 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
287 # strip predefined CFLAGS from qmake ( bug #312689 )
288 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
277 289
278 base_src_prepare 290 base_src_prepare
279} 291}
280 292
281# @FUNCTION: qt4-build_src_configure 293# @FUNCTION: qt4-build_src_configure
319 # freetype2 include dir is non-standard, thus include it on configure 331 # freetype2 include dir is non-standard, thus include it on configure
320 # use -I from configure 332 # use -I from configure
321 myconf+=" $(pkg-config --cflags freetype2)" 333 myconf+=" $(pkg-config --cflags freetype2)"
322 fi 334 fi
323 335
336 # Disable SSE4.x, since auto-detection is currently broken
337 # Upstream bug http://bugreports.qt.nokia.com/browse/QTBUG-13623
338 [[ ${PV} == "4.7.1" ]] && myconf+=" -no-sse4.1 -no-sse4.2"
339
324 echo ./configure ${myconf} 340 echo ./configure ${myconf}
325 ./configure ${myconf} || die "./configure failed" 341 ./configure ${myconf} || die "./configure failed"
326 myconf="" 342 myconf=""
343
344 prepare_directories ${QT4_TARGET_DIRECTORIES}
327} 345}
328 346
329# @FUNCTION: qt4-build_src_compile 347# @FUNCTION: qt4-build_src_compile
330# @DESCRIPTION: Actual compile phase 348# @DESCRIPTION: Actual compile phase
331qt4-build_src_compile() { 349qt4-build_src_compile() {
332 setqtenv 350 setqtenv
333 351
334 build_directories ${QT4_TARGET_DIRECTORIES} 352 build_directories ${QT4_TARGET_DIRECTORIES}
353}
354
355# @FUNCTION: qt4-build_src_test
356# @DESCRIPTION:
357# Runs tests only in target directories.
358qt4-build_src_test() {
359 for dir in ${QT4_TARGET_DIRECTORIES}; do
360 emake -j1 check -C ${dir}
361 done
335} 362}
336 363
337# @FUNCTION: fix_includes 364# @FUNCTION: fix_includes
338# @DESCRIPTION: 365# @DESCRIPTION:
339# For MacOSX we need to add some symlinks when frameworks are 366# For MacOSX we need to add some symlinks when frameworks are
368 setqtenv 395 setqtenv
369 install_directories ${QT4_TARGET_DIRECTORIES} 396 install_directories ${QT4_TARGET_DIRECTORIES}
370 install_qconfigs 397 install_qconfigs
371 fix_library_files 398 fix_library_files
372 fix_includes 399 fix_includes
400 # remove .la files since we are building only shared Qt libraries
401 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
373} 402}
374 403
375# @FUNCTION: setqtenv 404# @FUNCTION: setqtenv
376setqtenv() { 405setqtenv() {
377 # Set up installation directories 406 # Set up installation directories
464 -nomake examples -nomake demos" 493 -nomake examples -nomake demos"
465 494
466 echo "${myconf}" 495 echo "${myconf}"
467} 496}
468 497
469# @FUNCTION: build_directories 498# @FUNCTION: prepare_directories
470# @USAGE: < directories > 499# @USAGE: < directories >
471# @DESCRIPTION: 500# @DESCRIPTION:
472# Compiles the code in $QT4_TARGET_DIRECTORIES 501# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
473build_directories() { 502prepare_directories() {
474 for x in "$@"; do 503 for x in "$@"; do
475 pushd "${S}"/${x} >/dev/null 504 pushd "${S}"/${x} >/dev/null
505 einfo "running qmake in: $x"
476 # avoid running over the maximum argument number, bug #299810 506 # avoid running over the maximum argument number, bug #299810
477 { 507 {
478 echo "${S}"/mkspecs/common/*.conf 508 echo "${S}"/mkspecs/common/*.conf
479 find "${S}" -name '*.pr[io]' 509 find "${S}" -name '*.pr[io]'
480 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die 510 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
481 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 511 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
512 popd >/dev/null
513 done
514}
515
516
517# @FUNCTION: build_directories
518# @USAGE: < directories >
519# @DESCRIPTION:
520# Compiles the code in $QT4_TARGET_DIRECTORIES
521build_directories() {
522 for x in "$@"; do
523 pushd "${S}"/${x} >/dev/null
482 emake CC="$(tc-getCC)" \ 524 emake CC="$(tc-getCC)" \
483 CXX="$(tc-getCXX)" \ 525 CXX="$(tc-getCXX)" \
484 LINK="$(tc-getCXX)" || die "emake failed" 526 LINK="$(tc-getCXX)" || die "emake failed"
485 popd >/dev/null 527 popd >/dev/null
486 done 528 done
557 599
558 # generate list of QT_CONFIG entries from the existing list 600 # generate list of QT_CONFIG entries from the existing list
559 # including qconfig_add and excluding qconfig_remove 601 # including qconfig_add and excluding qconfig_remove
560 for x in $(sed -n 's/^QT_CONFIG +=//p' \ 602 for x in $(sed -n 's/^QT_CONFIG +=//p' \
561 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do 603 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
562 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}" 604 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
563 done 605 done
564 606
565 # replace the existing QT_CONFIG list with qconfig_new 607 # replace the existing QT_CONFIG list with qconfig_new
566 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ 608 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
567 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 609 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
736 fi 778 fi
737 779
738 echo "${spec}" 780 echo "${spec}"
739} 781}
740 782
783# @FUNCTION: qt_assistant_cleanup
784# @RETURN: nothing
785# @DESCRIPTION:
786# Tries to clean up tools.pro for qt-assistant ebuilds
787# Meant to be called in src_prepare
788qt_assistant_cleanup() {
789 # different versions (and branches...) may need different handling,
790 # add a case if you need special handling
791 case "${MY_PV_EXTRA}" in
792 *kde-qt*)
793 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
794 -e "/mac/,/^embedded.*makeqpf$/d" \
795 -i tools/tools.pro || die "patching tools.pro failed"
796 ;;
797 *)
798 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
799 -e "/mac/,/^embedded.*makeqpf$/d" \
800 -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
801 -i tools/tools.pro || die "patching tools.pro failed"
802 ;;
803 esac
804}
805
806# @FUNCTION: qt_nolibx11
807# @RETURN: nothing
808# @DESCRIPTION:
809# Ignore X11 tests for packages that don't need X libraries installed
810qt_nolibx11() {
811 einfo "removing X11 check to allow X-less compilation"
812 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
813 die "x11 check sed failed"
814}
815
741EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst 816EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.73  
changed lines
  Added in v.1.91

  ViewVC Help
Powered by ViewVC 1.1.20