/[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.108 Revision 1.113
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.108 2011/12/25 18:49:52 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.113 2011/12/31 00:46:04 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 175
181 if version_is_at_least "4.7"; then 176 if version_is_at_least "4.7"; then
190 # provide a proper macx-g++-64 185 # provide a proper macx-g++-64
191 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 186 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
192 187
193 sed -e '/^CONFIG/s:app_bundle::' \ 188 sed -e '/^CONFIG/s:app_bundle::' \
194 -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:' \
195 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed" 190 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
196 fi 191 fi
197 192
198 if [[ ${PN} != qt-core ]]; then 193 if [[ ${PN} != qt-core ]]; then
199 skip_qmake_build 194 skip_qmake_build
200 skip_project_generation 195 skip_project_generation
225 if [[ $(gcc-major-version) -lt 4 ]] ; then 220 if [[ $(gcc-major-version) -lt 4 ]] ; then
226 ewarn "Appending -fno-stack-protector to CXXFLAGS" 221 ewarn "Appending -fno-stack-protector to CXXFLAGS"
227 append-cxxflags -fno-stack-protector 222 append-cxxflags -fno-stack-protector
228 # Bug 253127 223 # Bug 253127
229 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 224 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
230 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 225 -i mkspecs/common/g++.conf || die
231 fi 226 fi
232 227
233 # Bug 261632 228 # Bug 261632
234 if use ppc64; then 229 if use ppc64; then
235 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 230 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
236 append-flags -mminimal-toc 231 append-flags -mminimal-toc
237 fi 232 fi
238 233
239 # Bug 282984 && Bug 295530 234 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
240 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 \
241 -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"
242 242
243 # Bug 321335 243 # Respect CC, CXX, LINK and *FLAGS in config.tests
244 if version_is_at_least 4.6; then 244 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
245 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 245 sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \
246 xargs -0 \ 246 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
247 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \ 247 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
248 -i || die "sed test compilers failed" 248 || die "sed config.tests failed"
249 fi
250 249
251 # Bug 172219 250 # Bug 172219
252 sed -e "s:X11R6/::" \ 251 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
253 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
254 252
255 if [[ ${CHOST} == *-darwin* ]]; then 253 if [[ ${CHOST} == *-darwin* ]]; then
256 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 254 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
257 # crippled (by design) :/ 255 # crippled (by design) :/
258 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 256 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
272 -e "s:-arch \$i::" \ 270 -e "s:-arch \$i::" \
273 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \ 271 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
274 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \ 272 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
275 -e "s:-Xarch_x86_64::g" \ 273 -e "s:-Xarch_x86_64::g" \
276 -e "s:-Xarch_ppc64::g" \ 274 -e "s:-Xarch_ppc64::g" \
277 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 275 -i configure mkspecs/common/mac-g++.conf || die "sed -arch/-Xarch failed"
278 276
279 # On Snow Leopard don't fall back to 10.5 deployment target. 277 # On Snow Leopard don't fall back to 10.5 deployment target.
280 if [[ ${CHOST} == *-apple-darwin10 ]] ; then 278 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
281 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \ 279 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
282 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \ 280 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
283 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 281 -i configure mkspecs/common/mac-g++.conf || die "sed deployment target failed"
284 fi 282 fi
285 fi 283 fi
286 284
287 # this one is needed for all systems with a separate -liconv, apart from 285 # this one is needed for all systems with a separate -liconv, apart from
288 # Darwin, for which the sources already cater for -liconv 286 # Darwin, for which the sources already cater for -liconv
300 # use GCC over SunStudio 298 # use GCC over SunStudio
301 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 299 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
302 # don't flirt with non-Prefix stuff, we're quite possessive 300 # don't flirt with non-Prefix stuff, we're quite possessive
303 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 301 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
304 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 302 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
303
305 # strip predefined CFLAGS from qmake ( bug #312689 ) 304 # strip predefined CFLAGS from mkspecs (bug 312689)
306 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf 305 sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
307 306
308 base_src_prepare 307 base_src_prepare
309} 308}
310 309
311# @FUNCTION: qt4-build_src_configure 310# @FUNCTION: qt4-build_src_configure
385 done 384 done
386} 385}
387 386
388# @FUNCTION: fix_includes 387# @FUNCTION: fix_includes
389# @DESCRIPTION: 388# @DESCRIPTION:
390# For MacOSX we need to add some symlinks when frameworks are 389# For MacOS X we need to add some symlinks when frameworks are
391# being used, to avoid complications with some more or less stupid packages. 390# being used, to avoid complications with some more or less stupid packages.
392fix_includes() { 391fix_includes() {
393 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then 392 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
394 # Some packages tend to include <Qt/...> 393 # Some packages tend to include <Qt/...>
395 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt 394 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
426 # remove .la files since we are building only shared Qt libraries 425 # remove .la files since we are building only shared Qt libraries
427 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm 426 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
428} 427}
429 428
430# @FUNCTION: setqtenv 429# @FUNCTION: setqtenv
430# @INTERNAL
431setqtenv() { 431setqtenv() {
432 # Set up installation directories 432 # Set up installation directories
433 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
434 QTPREFIXDIR=${EPREFIX}/usr 433 QTPREFIXDIR=${EPREFIX}/usr
435 QTBINDIR=${EPREFIX}/usr/bin 434 QTBINDIR=${EPREFIX}/usr/bin
436 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 435 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
437 QMAKE_LIBDIR_QT=${QTLIBDIR}
438 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig 436 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
439 QTDATADIR=${EPREFIX}/usr/share/qt4
440 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV} 437 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
441 QTHEADERDIR=${EPREFIX}/usr/include/qt4 438 QTHEADERDIR=${EPREFIX}/usr/include/qt4
442 QTPLUGINDIR=${QTLIBDIR}/plugins 439 QTPLUGINDIR=${QTLIBDIR}/plugins
443 QTIMPORTDIR=${QTLIBDIR}/imports 440 QTIMPORTDIR=${QTLIBDIR}/imports
441 QTDATADIR=${EPREFIX}/usr/share/qt4
442 QTTRANSDIR=${QTDATADIR}/translations
444 QTSYSCONFDIR=${EPREFIX}/etc/qt4 443 QTSYSCONFDIR=${EPREFIX}/etc/qt4
445 QTTRANSDIR=${QTDATADIR}/translations
446 QTEXAMPLESDIR=${QTDATADIR}/examples 444 QTEXAMPLESDIR=${QTDATADIR}/examples
447 QTDEMOSDIR=${QTDATADIR}/demos 445 QTDEMOSDIR=${QTDATADIR}/demos
446 QMAKE_LIBDIR_QT=${QTLIBDIR}
448 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4 447 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
448
449 PLATFORM=$(qt_mkspecs_dir) 449 PLATFORM=$(qt_mkspecs_dir)
450 450
451 unset QMAKESPEC 451 unset QMAKESPEC
452} 452}
453 453
454# @FUNCTION: standard_configure_options 454# @FUNCTION: standard_configure_options
455# @INTERNAL
455# @DESCRIPTION: 456# @DESCRIPTION:
456# Sets up some standard configure options, like libdir (if necessary), whether 457# Sets up some standard configure options, like libdir (if necessary), whether
457# debug info is wanted or not. 458# debug info is wanted or not.
458standard_configure_options() { 459standard_configure_options() {
459 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 460 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
510 echo "${myconf}" 511 echo "${myconf}"
511} 512}
512 513
513# @FUNCTION: prepare_directories 514# @FUNCTION: prepare_directories
514# @USAGE: < directories > 515# @USAGE: < directories >
516# @INTERNAL
515# @DESCRIPTION: 517# @DESCRIPTION:
516# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES 518# Generates Makefiles for the given list of directories.
517prepare_directories() { 519prepare_directories() {
518 for x in "$@"; do 520 for x in "$@"; do
519 pushd "${S}"/${x} >/dev/null 521 pushd "${S}"/${x} >/dev/null || die
520 einfo "Running qmake in: ${x}" 522 einfo "Running qmake in: ${x}"
521 # avoid running over the maximum argument number, bug #299810 523 # avoid running over the maximum argument number, bug #299810
522 { 524 {
523 echo "${S}"/mkspecs/common/*.conf 525 echo "${S}"/mkspecs/common/*.conf
524 find "${S}" -name '*.pr[io]' 526 find "${S}" -name '*.pr[io]'
525 } | xargs sed -i \ 527 } | xargs sed -i \
526 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \ 528 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
527 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \ 529 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
528 || die 530 || die
529 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 531 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
530 popd >/dev/null 532 popd >/dev/null || die
531 done 533 done
532} 534}
533 535
534 536
535# @FUNCTION: build_directories 537# @FUNCTION: build_directories
536# @USAGE: < directories > 538# @USAGE: < directories >
539# @INTERNAL
537# @DESCRIPTION: 540# @DESCRIPTION:
538# Compiles the code in $QT4_TARGET_DIRECTORIES 541# Compiles the code in the given list of directories.
539build_directories() { 542build_directories() {
540 for x in "$@"; do 543 for x in "$@"; do
541 pushd "${S}"/${x} >/dev/null 544 pushd "${S}"/${x} >/dev/null || die
542 emake CC="$(tc-getCC)" \ 545 emake CC="$(tc-getCC)" \
543 CXX="$(tc-getCXX)" \ 546 CXX="$(tc-getCXX)" \
544 LINK="$(tc-getCXX)" || die "emake failed" 547 LINK="$(tc-getCXX)" || die "emake failed"
545 popd >/dev/null 548 popd >/dev/null || die
546 done 549 done
547} 550}
548 551
549# @FUNCTION: install_directories 552# @FUNCTION: install_directories
550# @USAGE: < directories > 553# @USAGE: < directories >
554# @INTERNAL
551# @DESCRIPTION: 555# @DESCRIPTION:
552# run emake install in the given directories, which are separated by spaces 556# Runs emake install in the given directories, which are separated by spaces.
553install_directories() { 557install_directories() {
554 for x in "$@"; do 558 for x in "$@"; do
555 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" 559 pushd "${S}"/${x} >/dev/null || die
556 emake INSTALL_ROOT="${D}" install || die "emake install failed" 560 emake INSTALL_ROOT="${D}" install || die "emake install failed"
557 popd >/dev/null || die "Can't popd from ${S}/${x}" 561 popd >/dev/null || die
558 done 562 done
559} 563}
560 564
561# @ECLASS-VARIABLE: QCONFIG_ADD 565# @ECLASS-VARIABLE: QCONFIG_ADD
562# @DESCRIPTION: 566# @DESCRIPTION:
572# @DESCRIPTION: 576# @DESCRIPTION:
573# List variables that should be defined at the top of QtCore/qconfig.h 577# List variables that should be defined at the top of QtCore/qconfig.h
574: ${QCONFIG_DEFINE:=} 578: ${QCONFIG_DEFINE:=}
575 579
576# @FUNCTION: install_qconfigs 580# @FUNCTION: install_qconfigs
581# @INTERNAL
577# @DESCRIPTION: 582# @DESCRIPTION:
578# Install gentoo-specific mkspecs configurations 583# Install gentoo-specific mkspecs configurations.
579install_qconfigs() { 584install_qconfigs() {
580 local x 585 local x
581 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 586 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
582 for x in QCONFIG_ADD QCONFIG_REMOVE; do 587 for x in QCONFIG_ADD QCONFIG_REMOVE; do
583 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 588 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
594 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 599 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
595 fi 600 fi
596} 601}
597 602
598# @FUNCTION: generate_qconfigs 603# @FUNCTION: generate_qconfigs
604# @INTERNAL
599# @DESCRIPTION: 605# @DESCRIPTION:
600# Generates gentoo-specific configurations 606# Generates gentoo-specific qconfig.{h,pri}.
601generate_qconfigs() { 607generate_qconfigs() {
602 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 608 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
603 local x qconfig_add qconfig_remove qconfig_new 609 local x qconfig_add qconfig_remove qconfig_new
604 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 610 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
605 [[ -f ${x} ]] || continue 611 [[ -f ${x} ]] || continue
654 fi 660 fi
655} 661}
656 662
657# @FUNCTION: qt4-build_pkg_postrm 663# @FUNCTION: qt4-build_pkg_postrm
658# @DESCRIPTION: 664# @DESCRIPTION:
659# Generate configurations when the package is completely removed 665# Regenerate configuration when the package is completely removed.
660qt4-build_pkg_postrm() { 666qt4-build_pkg_postrm() {
661 generate_qconfigs 667 generate_qconfigs
662} 668}
663 669
664# @FUNCTION: qt4-build_pkg_postinst 670# @FUNCTION: qt4-build_pkg_postinst
665# @DESCRIPTION: 671# @DESCRIPTION:
666# Generate configuration, plus throws a message about possible 672# Regenerate configuration, plus throw a message about possible
667# breakages and proposed solutions. 673# breakages and proposed solutions.
668qt4-build_pkg_postinst() { 674qt4-build_pkg_postinst() {
669 generate_qconfigs 675 generate_qconfigs
670} 676}
671 677
672# @FUNCTION: skip_qmake_build 678# @FUNCTION: skip_qmake_build
679# @INTERNAL
673# @DESCRIPTION: 680# @DESCRIPTION:
674# Don't need to build qmake, as it's already installed from qt-core 681# Patches configure to skip qmake compilation, as it's already installed by qt-core.
675skip_qmake_build() { 682skip_qmake_build() {
676 # Don't need to build qmake, as it's already installed from qt-core
677 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed" 683 sed -i -e "s:if true:if false:g" "${S}"/configure || die
678} 684}
679 685
680# @FUNCTION: skip_project_generation 686# @FUNCTION: skip_project_generation
687# @INTERNAL
681# @DESCRIPTION: 688# @DESCRIPTION:
682# Exit the script early by throwing in an exit before all of the .pro files are scanned 689# Exit the script early by throwing in an exit before all of the .pro files are scanned.
683skip_project_generation() { 690skip_project_generation() {
684 # Exit the script early by throwing in an exit before all of the .pro files are scanned
685 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ 691 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
686 -i "${S}"/configure || die "sed failed"
687} 692}
688 693
689# @FUNCTION: symlink_binaries_to_buildtree 694# @FUNCTION: symlink_binaries_to_buildtree
695# @INTERNAL
690# @DESCRIPTION: 696# @DESCRIPTION:
691# Symlink generated binaries to buildtree so they can be used during compilation 697# Symlinks generated binaries to buildtree, so they can be used during compilation time.
692# time
693symlink_binaries_to_buildtree() { 698symlink_binaries_to_buildtree() {
694 for bin in qmake moc uic rcc; do 699 for bin in qmake moc uic rcc; do
695 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed" 700 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
696 done 701 done
697} 702}
698 703
699# @FUNCTION: fix_library_files 704# @FUNCTION: fix_library_files
705# @INTERNAL
700# @DESCRIPTION: 706# @DESCRIPTION:
701# Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and 707# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
702# moves the *.pc-files into the pkgconfig directory 708# moves the *.pc files into the pkgconfig directory.
703fix_library_files() { 709fix_library_files() {
710 local libfile
704 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do 711 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
705 if [[ -e ${libfile} ]]; then 712 if [[ -e ${libfile} ]]; then
706 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed" 713 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
707 fi 714 fi
708 done 715 done
709 716
710 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: 717 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
711 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 718 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
712 if [[ -e ${libfile} ]]; then 719 if [[ -e ${libfile} ]]; then
713 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed" 720 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
714 721
715 # Move .pc files into the pkgconfig directory 722 # Move .pc files into the pkgconfig directory
716 dodir ${QTPCDIR#${EPREFIX}} 723 dodir ${QTPCDIR#${EPREFIX}}
717 mv ${libfile} "${D}"/${QTPCDIR}/ \ 724 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
718 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
719 fi 725 fi
720 done 726 done
721 727
722 # Don't install an empty directory 728 # Don't install an empty directory
723 rmdir "${D}"/${QTLIBDIR}/pkgconfig 729 rmdir "${D}"/${QTLIBDIR}/pkgconfig
724} 730}
725 731
726# @FUNCTION: qt_use 732# @FUNCTION: qt_use
727# @USAGE: < flag > [ feature ] [ enableval ] 733# @USAGE: < flag > [ feature ] [ enableval ]
728# @DESCRIPTION: 734# @DESCRIPTION:
729# This will echo "${enableval}-${feature}" if <flag> is enabled, or 735# This will echo "-${enableval}-${feature}" if <flag> is enabled, or
730# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> 736# "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
731# will be used for that. If [enableval] is not specified, it omits the 737# will be used for that. If [enableval] is not specified, it omits the
732# assignment-part 738# "-${enableval}" part.
733qt_use() { 739qt_use() {
734 local flag=$1 740 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
735 local feature=$1
736 local enableval=
737
738 [[ -n $2 ]] && feature=$2
739 [[ -n $3 ]] && enableval=-$3
740
741 if use ${flag}; then
742 echo "${enableval}-${feature}"
743 else
744 echo "-no-${feature}"
745 fi
746} 741}
747 742
748# @FUNCTION: qt_mkspecs_dir 743# @FUNCTION: qt_mkspecs_dir
749# @RETURN: the specs-directory w/o path 744# @RETURN: the specs-directory w/o path
750# @DESCRIPTION: 745# @DESCRIPTION:
751# Allows us to define which mkspecs dir we want to use. 746# Allows us to define which mkspecs dir we want to use.
752qt_mkspecs_dir() { 747qt_mkspecs_dir() {
753 # Allows us to define which mkspecs dir we want to use.
754 local spec 748 local spec=
755
756 case ${CHOST} in 749 case ${CHOST} in
757 *-freebsd*|*-dragonfly*) 750 *-freebsd*|*-dragonfly*)
758 spec=freebsd ;; 751 spec=freebsd ;;
759 *-openbsd*) 752 *-openbsd*)
760 spec=openbsd ;; 753 spec=openbsd ;;
801 794
802 echo "${spec}" 795 echo "${spec}"
803} 796}
804 797
805# @FUNCTION: qt_assistant_cleanup 798# @FUNCTION: qt_assistant_cleanup
806# @RETURN: nothing 799# @INTERNAL
807# @DESCRIPTION: 800# @DESCRIPTION:
808# Tries to clean up tools.pro for qt-assistant ebuilds. 801# Tries to clean up tools.pro for qt-assistant ebuilds.
809# Meant to be called in src_prepare(). 802# Meant to be called in src_prepare().
810# Since Qt 4.7.4 this function is a no-op. 803# Since Qt 4.7.4 this function is a no-op.
811qt_assistant_cleanup() { 804qt_assistant_cleanup() {
831 ;; 824 ;;
832 esac 825 esac
833} 826}
834 827
835# @FUNCTION: qt_nolibx11 828# @FUNCTION: qt_nolibx11
836# @RETURN: nothing 829# @INTERNAL
837# @DESCRIPTION: 830# @DESCRIPTION:
838# Ignore X11 tests for packages that don't need X libraries installed 831# Ignore X11 tests for packages that don't need X libraries installed.
839qt_nolibx11() { 832qt_nolibx11() {
840 einfo "Removing X11 check to allow X-less compilation"
841 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 833 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
842 die "x11 check sed failed" 834 die "x11 check sed failed"
843} 835}
844 836
845EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 837EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.108  
changed lines
  Added in v.1.113

  ViewVC Help
Powered by ViewVC 1.1.20