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

Legend:
Removed from v.1.106  
changed lines
  Added in v.1.112

  ViewVC Help
Powered by ViewVC 1.1.20