/[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.67 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.67 2010/05/22 15:22:46 wired 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/"
79 else 81 else
80 ewarn "Downgrading Qt is completely unsupported and will break your system!" 82 ewarn "Downgrading Qt is completely unsupported and will break your system!"
81 fi 83 fi
82 fi 84 fi
83 85
86 if [[ "${PN}" == "qt-webkit" ]]; then
87 eshopts_push -s extglob
88 if is-flagq '-g?(gdb)?([1-9])'; then
89 echo
90 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
91 ewarn "You may experience really long compilation times and/or increased memory usage."
92 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
93 ewarn "For more info check out bug #307861"
94 echo
95 fi
96 eshopts_pop
97 fi
98
84 PATH="${S}/bin${PATH:+:}${PATH}" 99 PATH="${S}/bin${PATH:+:}${PATH}"
85 if [[ ${CHOST} != *-darwin* ]]; then 100 if [[ ${CHOST} != *-darwin* ]]; then
86 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 101 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
87 else 102 else
88 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}" 103 DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
127 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 142 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
128 ${QT4_EXTRACT_DIRECTORIES}; do 143 ${QT4_EXTRACT_DIRECTORIES}; do
129 targets+=" ${MY_P}/${target}" 144 targets+=" ${MY_P}/${target}"
130 done 145 done
131 146
132 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 147 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
133 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die 148 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
134} 149}
135 150
136# @ECLASS-VARIABLE: PATCHES 151# @ECLASS-VARIABLE: PATCHES
137# @DESCRIPTION: 152# @DESCRIPTION:
138# In case you have patches to apply, specify them in PATCHES variable. Make sure 153# In case you have patches to apply, specify them in PATCHES variable. Make sure
147# 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
148# 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.
149qt4-build_src_prepare() { 164qt4-build_src_prepare() {
150 setqtenv 165 setqtenv
151 cd "${S}" 166 cd "${S}"
167
168 # fix qt 4.7 regression that skips -fvisibility=hidden
169 if version_is_at_least "4.7.0_beta1"; then
170 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
171 -i config.tests/unix/fvisibility.test ||
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
179 fi
152 180
153 if use aqua; then 181 if use aqua; then
154 # provide a proper macx-g++-64 182 # provide a proper macx-g++-64
155 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 183 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
156 184
190 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 218 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
191 append-flags -mminimal-toc 219 append-flags -mminimal-toc
192 fi 220 fi
193 221
194 # Bug 282984 && Bug 295530 222 # Bug 282984 && Bug 295530
195 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:" \
196 -i configure || die "sed qmake compilers failed" 224 -i configure || die "sed qmake compilers failed"
225 # bug 321335
226 if version_is_at_least 4.6; then
227 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
228 xargs -0 \
197 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):" \ 229 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \
198 -i config.tests/unix/compile.test || die "sed test compilers failed" 230 -i || die "sed test compilers failed"
231 fi
199 232
200 # Bug 172219 233 # Bug 172219
201 sed -e "s:X11R6/::" \ 234 sed -e "s:X11R6/::" \
202 -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"
203 236
249 # use GCC over SunStudio 282 # use GCC over SunStudio
250 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 283 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
251 # don't flirt with non-Prefix stuff, we're quite possessive 284 # don't flirt with non-Prefix stuff, we're quite possessive
252 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 285 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
253 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
254 289
255 base_src_prepare 290 base_src_prepare
256} 291}
257 292
258# @FUNCTION: qt4-build_src_configure 293# @FUNCTION: qt4-build_src_configure
296 # freetype2 include dir is non-standard, thus include it on configure 331 # freetype2 include dir is non-standard, thus include it on configure
297 # use -I from configure 332 # use -I from configure
298 myconf+=" $(pkg-config --cflags freetype2)" 333 myconf+=" $(pkg-config --cflags freetype2)"
299 fi 334 fi
300 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
301 echo ./configure ${myconf} 340 echo ./configure ${myconf}
302 ./configure ${myconf} || die "./configure failed" 341 ./configure ${myconf} || die "./configure failed"
303 myconf="" 342 myconf=""
343
344 prepare_directories ${QT4_TARGET_DIRECTORIES}
304} 345}
305 346
306# @FUNCTION: qt4-build_src_compile 347# @FUNCTION: qt4-build_src_compile
307# @DESCRIPTION: Actual compile phase 348# @DESCRIPTION: Actual compile phase
308qt4-build_src_compile() { 349qt4-build_src_compile() {
309 setqtenv 350 setqtenv
310 351
311 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
312} 362}
313 363
314# @FUNCTION: fix_includes 364# @FUNCTION: fix_includes
315# @DESCRIPTION: 365# @DESCRIPTION:
316# For MacOSX we need to add some symlinks when frameworks are 366# For MacOSX we need to add some symlinks when frameworks are
345 setqtenv 395 setqtenv
346 install_directories ${QT4_TARGET_DIRECTORIES} 396 install_directories ${QT4_TARGET_DIRECTORIES}
347 install_qconfigs 397 install_qconfigs
348 fix_library_files 398 fix_library_files
349 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
350} 402}
351 403
352# @FUNCTION: setqtenv 404# @FUNCTION: setqtenv
353setqtenv() { 405setqtenv() {
354 # Set up installation directories 406 # Set up installation directories
441 -nomake examples -nomake demos" 493 -nomake examples -nomake demos"
442 494
443 echo "${myconf}" 495 echo "${myconf}"
444} 496}
445 497
446# @FUNCTION: build_directories 498# @FUNCTION: prepare_directories
447# @USAGE: < directories > 499# @USAGE: < directories >
448# @DESCRIPTION: 500# @DESCRIPTION:
449# Compiles the code in $QT4_TARGET_DIRECTORIES 501# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
450build_directories() { 502prepare_directories() {
451 for x in "$@"; do 503 for x in "$@"; do
452 pushd "${S}"/${x} >/dev/null 504 pushd "${S}"/${x} >/dev/null
505 einfo "running qmake in: $x"
453 # avoid running over the maximum argument number, bug #299810 506 # avoid running over the maximum argument number, bug #299810
454 { 507 {
455 echo "${S}"/mkspecs/common/*.conf 508 echo "${S}"/mkspecs/common/*.conf
456 find "${S}" -name '*.pr[io]' 509 find "${S}" -name '*.pr[io]'
457 } | 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
458 "${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
459 emake CC="$(tc-getCC)" \ 524 emake CC="$(tc-getCC)" \
460 CXX="$(tc-getCXX)" \ 525 CXX="$(tc-getCXX)" \
461 LINK="$(tc-getCXX)" || die "emake failed" 526 LINK="$(tc-getCXX)" || die "emake failed"
462 popd >/dev/null 527 popd >/dev/null
463 done 528 done
534 599
535 # generate list of QT_CONFIG entries from the existing list 600 # generate list of QT_CONFIG entries from the existing list
536 # including qconfig_add and excluding qconfig_remove 601 # including qconfig_add and excluding qconfig_remove
537 for x in $(sed -n 's/^QT_CONFIG +=//p' \ 602 for x in $(sed -n 's/^QT_CONFIG +=//p' \
538 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do 603 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
539 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}" 604 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
540 done 605 done
541 606
542 # replace the existing QT_CONFIG list with qconfig_new 607 # replace the existing QT_CONFIG list with qconfig_new
543 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ 608 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
544 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 609 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
713 fi 778 fi
714 779
715 echo "${spec}" 780 echo "${spec}"
716} 781}
717 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
718EXPORT_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.67  
changed lines
  Added in v.1.91

  ViewVC Help
Powered by ViewVC 1.1.20