/[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.76 Revision 1.92
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.76 2010/07/03 15:49:39 ayoy Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.92 2011/08/13 11:31:03 hwoarang 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"
133# @FUNCTION: qt4-build_src_unpack 135# @FUNCTION: qt4-build_src_unpack
134# @DESCRIPTION: 136# @DESCRIPTION:
135# Unpacks the sources 137# Unpacks the sources
136qt4-build_src_unpack() { 138qt4-build_src_unpack() {
137 setqtenv 139 setqtenv
140 local unpack_p="${MY_P}"
141 case "${PV}" in
142 4.8.0_beta*)
143 unpack_p="qt-everywhere-opensource-src-${PV/_*}"
144 ;;
145 esac
138 local target targets= 146 local target targets=
139 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 147 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
140 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 148 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
141 ${QT4_EXTRACT_DIRECTORIES}; do 149 ${QT4_EXTRACT_DIRECTORIES}; do
142 targets+=" ${MY_P}/${target}" 150 targets+=" ${unpack_p}/${target}"
143 done 151 done
144 152
145 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 153 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
146 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die 154 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
155 case "${PV}" in
156 4.8.0_beta*)
157 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
158 ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
159 ;;
160 esac
147} 161}
148 162
149# @ECLASS-VARIABLE: PATCHES 163# @ECLASS-VARIABLE: PATCHES
150# @DESCRIPTION: 164# @DESCRIPTION:
151# In case you have patches to apply, specify them in PATCHES variable. Make sure 165# In case you have patches to apply, specify them in PATCHES variable. Make sure
160# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 174# 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. 175# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
162qt4-build_src_prepare() { 176qt4-build_src_prepare() {
163 setqtenv 177 setqtenv
164 cd "${S}" 178 cd "${S}"
165 179
166 # fix qt 4.7 regression that skips -fvisibility=hidden 180 # fix qt 4.7 regression that skips -fvisibility=hidden
167 if version_is_at_least "4.7.0_beta1"; then 181 if version_is_at_least "4.7.0_beta1"; then
168 sed -e "s/^gcc|g++)/*gcc|*g++)/" \ 182 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
169 -i config.tests/unix/fvisibility.test || 183 -i config.tests/unix/fvisibility.test ||
170 die "visibility fixing sed failed" 184 die "visibility fixing sed failed"
185 fi
186 # fix libx11 dependency on non X packages
187 if version_is_at_least "4.7.0_beta2"; then
188 local NOLIBX11PKG="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
189 has ${PN} ${NOLIBX11PKG} && qt_nolibx11
190 [[ ${PN} == "qt-assistant" ]] && qt_assistant_cleanup
171 fi 191 fi
172 192
173 if use aqua; then 193 if use aqua; then
174 # provide a proper macx-g++-64 194 # provide a proper macx-g++-64
175 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 195 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
210 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 230 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
211 append-flags -mminimal-toc 231 append-flags -mminimal-toc
212 fi 232 fi
213 233
214 # Bug 282984 && Bug 295530 234 # Bug 282984 && Bug 295530
215 sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \ 235 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" 236 -i configure || die "sed qmake compilers failed"
217 # bug 321335 237 # bug 321335
218 if version_is_at_least 4.6; then 238 if version_is_at_least 4.6; then
219 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 239 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
220 xargs -0 \ 240 xargs -0 \
221 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):g" \ 241 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \
222 -i || die "sed test compilers failed" 242 -i || die "sed test compilers failed"
223 fi 243 fi
224 244
225 # Bug 172219 245 # Bug 172219
226 sed -e "s:X11R6/::" \ 246 sed -e "s:X11R6/::" \
275 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 295 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
276 # don't flirt with non-Prefix stuff, we're quite possessive 296 # don't flirt with non-Prefix stuff, we're quite possessive
277 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 297 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
278 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 298 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
279 # strip predefined CFLAGS from qmake ( bug #312689 ) 299 # strip predefined CFLAGS from qmake ( bug #312689 )
280 sed -i '/^QMAKE_CFLAGS_\(RELEASE\|DEBUG\)/s:+=.*:+=:' mkspecs/common/g++.conf 300 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
281 301
282 base_src_prepare 302 base_src_prepare
283} 303}
284 304
285# @FUNCTION: qt4-build_src_configure 305# @FUNCTION: qt4-build_src_configure
323 # freetype2 include dir is non-standard, thus include it on configure 343 # freetype2 include dir is non-standard, thus include it on configure
324 # use -I from configure 344 # use -I from configure
325 myconf+=" $(pkg-config --cflags freetype2)" 345 myconf+=" $(pkg-config --cflags freetype2)"
326 fi 346 fi
327 347
348 # Disable SSE4.x, since auto-detection is currently broken
349 # Upstream bug http://bugreports.qt.nokia.com/browse/QTBUG-13623
350 [[ ${PV} == "4.7.1" ]] && myconf+=" -no-sse4.1 -no-sse4.2"
351
328 echo ./configure ${myconf} 352 echo ./configure ${myconf}
329 ./configure ${myconf} || die "./configure failed" 353 ./configure ${myconf} || die "./configure failed"
330 myconf="" 354 myconf=""
355
356 prepare_directories ${QT4_TARGET_DIRECTORIES}
331} 357}
332 358
333# @FUNCTION: qt4-build_src_compile 359# @FUNCTION: qt4-build_src_compile
334# @DESCRIPTION: Actual compile phase 360# @DESCRIPTION: Actual compile phase
335qt4-build_src_compile() { 361qt4-build_src_compile() {
381 setqtenv 407 setqtenv
382 install_directories ${QT4_TARGET_DIRECTORIES} 408 install_directories ${QT4_TARGET_DIRECTORIES}
383 install_qconfigs 409 install_qconfigs
384 fix_library_files 410 fix_library_files
385 fix_includes 411 fix_includes
412 # remove .la files since we are building only shared Qt libraries
413 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
386} 414}
387 415
388# @FUNCTION: setqtenv 416# @FUNCTION: setqtenv
389setqtenv() { 417setqtenv() {
390 # Set up installation directories 418 # Set up installation directories
477 -nomake examples -nomake demos" 505 -nomake examples -nomake demos"
478 506
479 echo "${myconf}" 507 echo "${myconf}"
480} 508}
481 509
482# @FUNCTION: build_directories 510# @FUNCTION: prepare_directories
483# @USAGE: < directories > 511# @USAGE: < directories >
484# @DESCRIPTION: 512# @DESCRIPTION:
485# Compiles the code in $QT4_TARGET_DIRECTORIES 513# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
486build_directories() { 514prepare_directories() {
487 for x in "$@"; do 515 for x in "$@"; do
488 pushd "${S}"/${x} >/dev/null 516 pushd "${S}"/${x} >/dev/null
517 einfo "running qmake in: $x"
489 # avoid running over the maximum argument number, bug #299810 518 # avoid running over the maximum argument number, bug #299810
490 { 519 {
491 echo "${S}"/mkspecs/common/*.conf 520 echo "${S}"/mkspecs/common/*.conf
492 find "${S}" -name '*.pr[io]' 521 find "${S}" -name '*.pr[io]'
493 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die 522 } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
494 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 523 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
524 popd >/dev/null
525 done
526}
527
528
529# @FUNCTION: build_directories
530# @USAGE: < directories >
531# @DESCRIPTION:
532# Compiles the code in $QT4_TARGET_DIRECTORIES
533build_directories() {
534 for x in "$@"; do
535 pushd "${S}"/${x} >/dev/null
495 emake CC="$(tc-getCC)" \ 536 emake CC="$(tc-getCC)" \
496 CXX="$(tc-getCXX)" \ 537 CXX="$(tc-getCXX)" \
497 LINK="$(tc-getCXX)" || die "emake failed" 538 LINK="$(tc-getCXX)" || die "emake failed"
498 popd >/dev/null 539 popd >/dev/null
499 done 540 done
570 611
571 # generate list of QT_CONFIG entries from the existing list 612 # generate list of QT_CONFIG entries from the existing list
572 # including qconfig_add and excluding qconfig_remove 613 # including qconfig_add and excluding qconfig_remove
573 for x in $(sed -n 's/^QT_CONFIG +=//p' \ 614 for x in $(sed -n 's/^QT_CONFIG +=//p' \
574 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do 615 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
575 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}" 616 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
576 done 617 done
577 618
578 # replace the existing QT_CONFIG list with qconfig_new 619 # replace the existing QT_CONFIG list with qconfig_new
579 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ 620 if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
580 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 621 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
749 fi 790 fi
750 791
751 echo "${spec}" 792 echo "${spec}"
752} 793}
753 794
795# @FUNCTION: qt_assistant_cleanup
796# @RETURN: nothing
797# @DESCRIPTION:
798# Tries to clean up tools.pro for qt-assistant ebuilds
799# Meant to be called in src_prepare
800qt_assistant_cleanup() {
801 # different versions (and branches...) may need different handling,
802 # add a case if you need special handling
803 case "${MY_PV_EXTRA}" in
804 *kde-qt*)
805 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
806 -e "/mac/,/^embedded.*makeqpf$/d" \
807 -i tools/tools.pro || die "patching tools.pro failed"
808 ;;
809 *)
810 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
811 -e "/mac/,/^embedded.*makeqpf$/d" \
812 -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
813 -i tools/tools.pro || die "patching tools.pro failed"
814 ;;
815 esac
816}
817
818# @FUNCTION: qt_nolibx11
819# @RETURN: nothing
820# @DESCRIPTION:
821# Ignore X11 tests for packages that don't need X libraries installed
822qt_nolibx11() {
823 einfo "removing X11 check to allow X-less compilation"
824 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
825 die "x11 check sed failed"
826}
827
754EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 828EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.92

  ViewVC Help
Powered by ViewVC 1.1.20