/[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.109 Revision 1.120
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2012 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.109 2011/12/26 00:11:07 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.120 2012/02/28 18:53:45 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.
44 !>x11-libs/qt-gui-${PV}-r9999 44 !>x11-libs/qt-gui-${PV}-r9999
45 !<x11-libs/qt-multimedia-${PV} 45 !<x11-libs/qt-multimedia-${PV}
46 !>x11-libs/qt-multimedia-${PV}-r9999 46 !>x11-libs/qt-multimedia-${PV}-r9999
47 !<x11-libs/qt-opengl-${PV} 47 !<x11-libs/qt-opengl-${PV}
48 !>x11-libs/qt-opengl-${PV}-r9999 48 !>x11-libs/qt-opengl-${PV}-r9999
49 !<x11-libs/qt-openvg-${PV}
50 !>x11-libs/qt-openvg-${PV}-r9999
49 !<x11-libs/qt-phonon-${PV} 51 !<x11-libs/qt-phonon-${PV}
50 !>x11-libs/qt-phonon-${PV}-r9999 52 !>x11-libs/qt-phonon-${PV}-r9999
51 !<x11-libs/qt-qt3support-${PV} 53 !<x11-libs/qt-qt3support-${PV}
52 !>x11-libs/qt-qt3support-${PV}-r9999 54 !>x11-libs/qt-qt3support-${PV}-r9999
53 !<x11-libs/qt-script-${PV} 55 !<x11-libs/qt-script-${PV}
109 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm 111 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
110 ${QT4_EXTRACT_DIRECTORIES}" 112 ${QT4_EXTRACT_DIRECTORIES}"
111 fi 113 fi
112 114
113 # Make sure ebuilds use the required EAPI 115 # Make sure ebuilds use the required EAPI
114 if [[ ${EAPI} != [23] ]]; then 116 if [[ ${EAPI} != [234] ]]; then
115 eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using" 117 eerror "The qt4-build eclass requires EAPI 2,3 or 4 but this ebuild is using"
116 eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be" 118 eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
117 eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail." 119 eerror "fixed. Using qt4-build eclass without EAPI 2,3 or 4 will fail."
118 die "qt4-build eclass requires EAPI=2 or EAPI=3" 120 die "qt4-build eclass requires EAPI 2,3 or 4"
119 fi 121 fi
120 122
121 if ! version_is_at_least 4.1 $(gcc-version); then 123 if ! version_is_at_least 4.1 $(gcc-version); then
122 ewarn "Using a GCC version lower than 4.1 is not supported!" 124 ewarn "Using a GCC version lower than 4.1 is not supported!"
123 fi 125 fi
136# @FUNCTION: qt4-build_src_unpack 138# @FUNCTION: qt4-build_src_unpack
137# @DESCRIPTION: 139# @DESCRIPTION:
138# Unpacks the sources. 140# Unpacks the sources.
139qt4-build_src_unpack() { 141qt4-build_src_unpack() {
140 setqtenv 142 setqtenv
141 local target targets= 143
144 local tarball="${MY_P}.tar.gz" target= targets=
142 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 145 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
143 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 146 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
144 ${QT4_EXTRACT_DIRECTORIES}; do 147 mkspecs qmake ${QT4_EXTRACT_DIRECTORIES}
148 do
145 targets+=" ${MY_P}/${target}" 149 targets+="${MY_P}/${target} "
146 done 150 done
147 151
152 ebegin "Unpacking parts of ${tarball}:" ${targets//${MY_P}\/}
148 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 153 tar -xzf "${DISTDIR}/${tarball}" ${targets}
149 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die 154 eend $? || die "failed to unpack"
150} 155}
151 156
152# @ECLASS-VARIABLE: PATCHES 157# @ECLASS-VARIABLE: PATCHES
158# @DEFAULT_UNSET
153# @DESCRIPTION: 159# @DESCRIPTION:
154# In case you have patches to apply, specify them in PATCHES variable. Make sure 160# PATCHES array variable containing all various patches to be applied.
155# to specify the full path. This variable is necessary for src_prepare phase. 161# This variable is expected to be defined in global scope of ebuild.
156# Example: 162# Make sure to specify the full path. This variable is utilised in
157# PATCHES="${FILESDIR}"/mypatch.patch 163# src_unpack/src_prepare phase, based on EAPI.
158# ${FILESDIR}"/mypatch2.patch"
159# 164#
165# @CODE
166# PATCHES=( "${FILESDIR}/mypatch.patch"
167# "${FILESDIR}/patches_folder/" )
168# @CODE
160 169
161# @FUNCTION: qt4-build_src_prepare 170# @FUNCTION: qt4-build_src_prepare
162# @DESCRIPTION: 171# @DESCRIPTION:
163# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 172# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
164# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf. 173# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
187 skip_qmake_build 196 skip_qmake_build
188 skip_project_generation 197 skip_project_generation
189 symlink_binaries_to_buildtree 198 symlink_binaries_to_buildtree
190 fi 199 fi
191 200
192 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then 201 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
193 # qmake bus errors with -O2 but -O3 works 202 # qmake bus errors with -O2 but -O3 works
194 replace-flags -O2 -O3 203 replace-flags -O2 -O3
195 fi 204 fi
196 205
197 # Bug 178652 206 # Bug 178652
208 ewarn "disabled." 217 ewarn "disabled."
209 append-flags -std=c++0x 218 append-flags -std=c++0x
210 fi 219 fi
211 220
212 # Unsupported old gcc versions - hardened needs this :( 221 # Unsupported old gcc versions - hardened needs this :(
213 if [[ $(gcc-major-version) -lt 4 ]] ; then 222 if [[ $(gcc-major-version) -lt 4 ]]; then
214 ewarn "Appending -fno-stack-protector to CXXFLAGS" 223 ewarn "Appending -fno-stack-protector to CXXFLAGS"
215 append-cxxflags -fno-stack-protector 224 append-cxxflags -fno-stack-protector
216 # Bug 253127 225 # Bug 253127
217 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 226 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
218 -i mkspecs/common/g++.conf || die 227 -i mkspecs/common/g++.conf || die
229 CC='$(tc-getCC)'\n\ 238 CC='$(tc-getCC)'\n\
230 CXX='$(tc-getCXX)'\n\ 239 CXX='$(tc-getCXX)'\n\
231 CFLAGS='${CFLAGS}'\n\ 240 CFLAGS='${CFLAGS}'\n\
232 CXXFLAGS='${CXXFLAGS}'\n\ 241 CXXFLAGS='${CXXFLAGS}'\n\
233 LDFLAGS='${LDFLAGS}'\n" \ 242 LDFLAGS='${LDFLAGS}'\n" \
243 -i configure \
234 -i configure || die "sed SYSTEM_VARIABLES failed" 244 || die "sed SYSTEM_VARIABLES failed"
235 245
236 # Bug 321335 246 # Respect CC, CXX, LINK and *FLAGS in config.tests
237 find config.tests/unix -name '*.test' -type f -exec grep -lZ \$MAKE '{}' \; | xargs -0 \ 247 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
238 sed -e "s:\(\$MAKE\):\1 CC='$(tc-getCC)' CXX='$(tc-getCXX)' LINK='$(tc-getCXX)':g" \ 248 sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \
239 -i || die "sed test compilers failed" 249 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
250 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
251 || die "sed config.tests failed"
252
253 # Strip predefined CFLAGS from mkspecs (bug 312689)
254 sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf || die
240 255
241 # Bug 172219 256 # Bug 172219
242 sed -e "s:X11R6/::" -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 257 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
243 258
244 if [[ ${CHOST} == *-darwin* ]]; then 259 if [[ ${CHOST} == *-darwin* ]]; then
245 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 260 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
246 # crippled (by design) :/ 261 # crippled (by design) :/
262 sed \
247 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 263 -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
248 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 264 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
249 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \ 265 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
250 -e "s:-arch\s\w*::g" \ 266 -e "s:-arch\s\w*::g" \
251 -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed" 267 -i mkspecs/common/mac-g++.conf \
268 || die "sed mkspecs/common/mac-g++.conf failed"
252 269
253 # Fix configure's -arch settings that appear in qmake/Makefile and also 270 # Fix configure's -arch settings that appear in qmake/Makefile and also
254 # fix arch handling (automagically duplicates our -arch arg and breaks 271 # fix arch handling (automagically duplicates our -arch arg and breaks
255 # pch). Additionally disable Xarch support. 272 # pch). Additionally disable Xarch support.
256 sed \ 273 sed \
261 -e "s:-arch \$i::" \ 278 -e "s:-arch \$i::" \
262 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \ 279 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
263 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \ 280 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
264 -e "s:-Xarch_x86_64::g" \ 281 -e "s:-Xarch_x86_64::g" \
265 -e "s:-Xarch_ppc64::g" \ 282 -e "s:-Xarch_ppc64::g" \
266 -i configure mkspecs/common/mac-g++.conf || die "sed -arch/-Xarch failed" 283 -i configure mkspecs/common/mac-g++.conf \
284 || die "sed -arch/-Xarch failed"
267 285
268 # On Snow Leopard don't fall back to 10.5 deployment target. 286 # On Snow Leopard don't fall back to 10.5 deployment target.
269 if [[ ${CHOST} == *-apple-darwin10 ]] ; then 287 if [[ ${CHOST} == *-apple-darwin10 ]]; then
270 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \ 288 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
271 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \ 289 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
272 -i configure mkspecs/common/mac-g++.conf || die "sed deployment target failed" 290 -i configure mkspecs/common/mac-g++.conf \
291 || die "sed deployment target failed"
273 fi 292 fi
274 fi 293 fi
275 294
276 # this one is needed for all systems with a separate -liconv, apart from 295 # this one is needed for all systems with a separate -liconv, apart from
277 # Darwin, for which the sources already cater for -liconv 296 # Darwin, for which the sources already cater for -liconv
278 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then 297 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
279 sed \ 298 sed -e 's|mac:\(LIBS += -liconv\)|\1|g' \
280 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
281 -i config.tests/unix/iconv/iconv.pro \ 299 -i config.tests/unix/iconv/iconv.pro \
282 || die "sed on iconv.pro failed" 300 || die "sed iconv.pro failed"
283 fi 301 fi
284 302
285 # we need some patches for Solaris 303 # we need some patches for Solaris
286 sed -i \
287 -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \ 304 sed -i -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
288 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 305 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
289 # use GCC over SunStudio 306 # use GCC over SunStudio
290 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 307 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
291 # don't flirt with non-Prefix stuff, we're quite possessive 308 # do not flirt with non-Prefix stuff, we're quite possessive
292 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 309 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
293 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 310 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
294 # strip predefined CFLAGS from qmake ( bug #312689 )
295 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
296 311
297 base_src_prepare 312 base_src_prepare
298} 313}
299 314
300# @FUNCTION: qt4-build_src_configure 315# @FUNCTION: qt4-build_src_configure
304 setqtenv 319 setqtenv
305 myconf="$(standard_configure_options) ${myconf}" 320 myconf="$(standard_configure_options) ${myconf}"
306 321
307 # this one is needed for all systems with a separate -liconv, apart from 322 # this one is needed for all systems with a separate -liconv, apart from
308 # Darwin, for which the sources already cater for -liconv 323 # Darwin, for which the sources already cater for -liconv
309 use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \ 324 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
310 myconf+=" -liconv" 325 myconf+=" -liconv"
326 fi
311 327
312 if use_if_iuse glib; then 328 if use_if_iuse glib; then
313 # use -I, -L and -l from configure
314 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)" 329 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
315 # avoid the -pthread argument 330 # avoid the -pthread argument
316 myconf+=" ${glibflags//-pthread}" 331 myconf+=" ${glibflags//-pthread}"
317 unset glibflags 332 unset glibflags
318 fi 333 fi
324 ewarn "disable it before reporting any bugs related to this useflag." 339 ewarn "disable it before reporting any bugs related to this useflag."
325 ewarn 340 ewarn
326 myconf+=" -qpa" 341 myconf+=" -qpa"
327 fi 342 fi
328 343
329 if use aqua ; then 344 if use aqua; then
330 # On (snow) leopard use the new (frameworked) cocoa code. 345 # On (snow) leopard use the new (frameworked) cocoa code.
331 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then 346 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
332 myconf+=" -cocoa -framework" 347 myconf+=" -cocoa -framework"
348 # We need the source's headers, not the installed ones.
349 myconf+=" -I${S}/include"
350 # Add hint for the framework location.
351 myconf+=" -F${QTLIBDIR}"
333 352
334 # We are crazy and build cocoa + qt3support :-) 353 # We are crazy and build cocoa + qt3support :-)
335 if use qt3support; then 354 if use qt3support; then
336 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \ 355 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
337 -i configure 356 -i configure || die
338 fi 357 fi
339 358 else
340 # We need the source's headers, not the installed ones. 359 myconf+=" -no-framework"
341 myconf+=" -I${S}/include"
342
343 # Add hint for the framework location.
344 myconf+=" -F${QTLIBDIR}"
345 fi 360 fi
346 else 361 else
347 # freetype2 include dir is non-standard, thus include it on configure 362 # freetype2 include dir is non-standard, thus include it on configure
348 # use -I from configure 363 # use -I from configure
349 myconf+=" $(pkg-config --cflags freetype2)" 364 myconf+=" $(pkg-config --cflags freetype2)"
367 382
368# @FUNCTION: qt4-build_src_test 383# @FUNCTION: qt4-build_src_test
369# @DESCRIPTION: 384# @DESCRIPTION:
370# Runs tests only in target directories. 385# Runs tests only in target directories.
371qt4-build_src_test() { 386qt4-build_src_test() {
387 # QtMultimedia does not have any test suite (bug #332299)
388 [[ ${PN} == "qt-multimedia" ]] && return
389
372 for dir in ${QT4_TARGET_DIRECTORIES}; do 390 for dir in ${QT4_TARGET_DIRECTORIES}; do
373 emake -j1 check -C ${dir} 391 emake -j1 check -C ${dir}
374 done 392 done
375} 393}
376 394
377# @FUNCTION: fix_includes 395# @FUNCTION: fix_includes
378# @DESCRIPTION: 396# @DESCRIPTION:
379# For MacOS X we need to add some symlinks when frameworks are 397# For MacOS X we need to add some symlinks when frameworks are
380# being used, to avoid complications with some more or less stupid packages. 398# being used, to avoid complications with some more or less stupid packages.
381fix_includes() { 399fix_includes() {
382 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then 400 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]]; then
383 # Some packages tend to include <Qt/...> 401 # Some packages tend to include <Qt/...>
384 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt 402 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
385 403
386 # Fake normal headers when frameworks are installed... eases life later on 404 # Fake normal headers when frameworks are installed... eases life later on
387 local dest f 405 local dest f h
388 for frw in "${D}${QTLIBDIR}"/*.framework; do 406 for frw in "${D}${QTLIBDIR}"/*.framework; do
389 [[ -e "${frw}"/Headers ]] || continue 407 [[ -e "${frw}"/Headers ]] || continue
390 f=$(basename ${frw}) 408 f=$(basename ${frw})
391 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework} 409 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
392 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}" 410 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
411 install_qconfigs 429 install_qconfigs
412 fix_library_files 430 fix_library_files
413 fix_includes 431 fix_includes
414 432
415 # remove .la files since we are building only shared Qt libraries 433 # remove .la files since we are building only shared Qt libraries
416 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm 434 find "${D}"${QTLIBDIR} -type f -name '*.la' -print0 | xargs -0 rm -f
417} 435}
418 436
419# @FUNCTION: setqtenv 437# @FUNCTION: setqtenv
438# @INTERNAL
420setqtenv() { 439setqtenv() {
421 # Set up installation directories 440 # Set up installation directories
422 QTPREFIXDIR=${EPREFIX}/usr 441 QTPREFIXDIR=${EPREFIX}/usr
423 QTBINDIR=${EPREFIX}/usr/bin 442 QTBINDIR=${EPREFIX}/usr/bin
424 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 443 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
439 458
440 unset QMAKESPEC 459 unset QMAKESPEC
441} 460}
442 461
443# @FUNCTION: standard_configure_options 462# @FUNCTION: standard_configure_options
463# @INTERNAL
444# @DESCRIPTION: 464# @DESCRIPTION:
445# Sets up some standard configure options, like libdir (if necessary), whether 465# Sets up some standard configure options, like libdir (if necessary), whether
446# debug info is wanted or not. 466# debug info is wanted or not.
447standard_configure_options() { 467standard_configure_options() {
468 local myconf="
448 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 469 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
449 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} 470 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
450 -importdir ${QTIMPORTDIR} -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR} 471 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR})
472 -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR} -sysconfdir ${QTSYSCONFDIR}
451 -sysconfdir ${QTSYSCONFDIR} -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR} 473 -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
452 -opensource -confirm-license -shared -fast -largefile -stl -verbose 474 -opensource -confirm-license -shared -fast -largefile -stl -verbose
453 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos" 475 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
454 476
455 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)" 477 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
456 478
461 myconf+=" -release" 483 myconf+=" -release"
462 fi 484 fi
463 myconf+=" -no-separate-debug-info" 485 myconf+=" -no-separate-debug-info"
464 486
465 # exceptions USE flag 487 # exceptions USE flag
466 local exceptions="-exceptions" 488 myconf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
467 in_iuse exceptions && exceptions="$(qt_use exceptions)"
468 myconf+=" ${exceptions}"
469 489
470 # disable RPATH on Qt >= 4.8 (bug 380415) 490 # disable RPATH on Qt >= 4.8 (bug 380415)
471 version_is_at_least 4.8 && myconf+=" -no-rpath" 491 version_is_at_least 4.8 && myconf+=" -no-rpath"
472 492
473 # precompiled headers don't work on hardened, where the flag is masked 493 # precompiled headers don't work on hardened, where the flag is masked
477 # This flag seems to introduce major breakage to applications, 497 # This flag seems to introduce major breakage to applications,
478 # mostly to be seen as a core dump with the message "QPixmap: Must 498 # mostly to be seen as a core dump with the message "QPixmap: Must
479 # construct a QApplication before a QPaintDevice" on Solaris. 499 # construct a QApplication before a QPaintDevice" on Solaris.
480 # -- Daniel Vergien 500 # -- Daniel Vergien
481 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations" 501 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
482
483 use aqua && myconf+=" -no-framework"
484 502
485 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 503 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
486 # $(tc-arch). Therefore we convert it to supported values. 504 # $(tc-arch). Therefore we convert it to supported values.
487 case "$(tc-arch)" in 505 case "$(tc-arch)" in
488 amd64|x64-*) myconf+=" -arch x86_64" ;; 506 amd64|x64-*) myconf+=" -arch x86_64" ;;
499 echo "${myconf}" 517 echo "${myconf}"
500} 518}
501 519
502# @FUNCTION: prepare_directories 520# @FUNCTION: prepare_directories
503# @USAGE: < directories > 521# @USAGE: < directories >
522# @INTERNAL
504# @DESCRIPTION: 523# @DESCRIPTION:
505# Generates Makefiles for the given list of directories. 524# Generates Makefiles for the given list of directories.
506prepare_directories() { 525prepare_directories() {
507 for x in "$@"; do 526 for x in "$@"; do
508 pushd "${S}"/${x} >/dev/null || die 527 pushd "${S}"/${x} >/dev/null || die
521} 540}
522 541
523 542
524# @FUNCTION: build_directories 543# @FUNCTION: build_directories
525# @USAGE: < directories > 544# @USAGE: < directories >
545# @INTERNAL
526# @DESCRIPTION: 546# @DESCRIPTION:
527# Compiles the code in the given list of directories. 547# Compiles the code in the given list of directories.
528build_directories() { 548build_directories() {
529 for x in "$@"; do 549 for x in "$@"; do
530 pushd "${S}"/${x} >/dev/null || die 550 pushd "${S}"/${x} >/dev/null || die
535 done 555 done
536} 556}
537 557
538# @FUNCTION: install_directories 558# @FUNCTION: install_directories
539# @USAGE: < directories > 559# @USAGE: < directories >
560# @INTERNAL
540# @DESCRIPTION: 561# @DESCRIPTION:
541# Runs emake install in the given directories, which are separated by spaces. 562# Runs emake install in the given directories, which are separated by spaces.
542install_directories() { 563install_directories() {
543 for x in "$@"; do 564 for x in "$@"; do
544 pushd "${S}"/${x} >/dev/null || die 565 pushd "${S}"/${x} >/dev/null || die
561# @DESCRIPTION: 582# @DESCRIPTION:
562# List variables that should be defined at the top of QtCore/qconfig.h 583# List variables that should be defined at the top of QtCore/qconfig.h
563: ${QCONFIG_DEFINE:=} 584: ${QCONFIG_DEFINE:=}
564 585
565# @FUNCTION: install_qconfigs 586# @FUNCTION: install_qconfigs
587# @INTERNAL
566# @DESCRIPTION: 588# @DESCRIPTION:
567# Install gentoo-specific mkspecs configurations. 589# Install gentoo-specific mkspecs configurations.
568install_qconfigs() { 590install_qconfigs() {
569 local x 591 local x
570 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 592 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
583 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 605 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
584 fi 606 fi
585} 607}
586 608
587# @FUNCTION: generate_qconfigs 609# @FUNCTION: generate_qconfigs
610# @INTERNAL
588# @DESCRIPTION: 611# @DESCRIPTION:
589# Generates gentoo-specific qconfig.{h,pri}. 612# Generates gentoo-specific qconfig.{h,pri}.
590generate_qconfigs() { 613generate_qconfigs() {
591 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 614 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
592 local x qconfig_add qconfig_remove qconfig_new 615 local x qconfig_add qconfig_remove qconfig_new
657qt4-build_pkg_postinst() { 680qt4-build_pkg_postinst() {
658 generate_qconfigs 681 generate_qconfigs
659} 682}
660 683
661# @FUNCTION: skip_qmake_build 684# @FUNCTION: skip_qmake_build
685# @INTERNAL
662# @DESCRIPTION: 686# @DESCRIPTION:
663# Patches configure to skip qmake compilation, as it's already installed by qt-core. 687# Patches configure to skip qmake compilation, as it's already installed by qt-core.
664skip_qmake_build() { 688skip_qmake_build() {
665 sed -i -e "s:if true:if false:g" "${S}"/configure || die 689 sed -i -e "s:if true:if false:g" "${S}"/configure || die
666} 690}
667 691
668# @FUNCTION: skip_project_generation 692# @FUNCTION: skip_project_generation
693# @INTERNAL
669# @DESCRIPTION: 694# @DESCRIPTION:
670# Exit the script early by throwing in an exit before all of the .pro files are scanned. 695# Exit the script early by throwing in an exit before all of the .pro files are scanned.
671skip_project_generation() { 696skip_project_generation() {
672 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die 697 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
673} 698}
674 699
675# @FUNCTION: symlink_binaries_to_buildtree 700# @FUNCTION: symlink_binaries_to_buildtree
701# @INTERNAL
676# @DESCRIPTION: 702# @DESCRIPTION:
677# Symlinks generated binaries to buildtree, so they can be used during compilation time. 703# Symlinks generated binaries to buildtree, so they can be used during compilation time.
678symlink_binaries_to_buildtree() { 704symlink_binaries_to_buildtree() {
679 for bin in qmake moc uic rcc; do 705 for bin in qmake moc uic rcc; do
680 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed" 706 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
681 done 707 done
682} 708}
683 709
684# @FUNCTION: fix_library_files 710# @FUNCTION: fix_library_files
711# @INTERNAL
685# @DESCRIPTION: 712# @DESCRIPTION:
686# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and 713# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
687# moves the *.pc files into the pkgconfig directory. 714# moves the *.pc files into the pkgconfig directory.
688fix_library_files() { 715fix_library_files() {
689 local libfile 716 local libfile
709} 736}
710 737
711# @FUNCTION: qt_use 738# @FUNCTION: qt_use
712# @USAGE: < flag > [ feature ] [ enableval ] 739# @USAGE: < flag > [ feature ] [ enableval ]
713# @DESCRIPTION: 740# @DESCRIPTION:
714# This will echo "${enableval}-${feature}" if <flag> is enabled, or 741# This will echo "-${enableval}-${feature}" if <flag> is enabled, or
715# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> 742# "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
716# will be used for that. If [enableval] is not specified, it omits the 743# will be used for that. If [enableval] is not specified, it omits the
717# assignment part. 744# "-${enableval}" part.
718qt_use() { 745qt_use() {
719 local flag=$1 746 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
720 local feature=$1
721 local enableval=
722
723 [[ -n $2 ]] && feature=$2
724 [[ -n $3 ]] && enableval=-$3
725
726 if use ${flag}; then
727 echo "${enableval}-${feature}"
728 else
729 echo "-no-${feature}"
730 fi
731} 747}
732 748
733# @FUNCTION: qt_mkspecs_dir 749# @FUNCTION: qt_mkspecs_dir
734# @RETURN: the specs-directory w/o path 750# @RETURN: the specs-directory w/o path
735# @DESCRIPTION: 751# @DESCRIPTION:
766 elif [[ ${CXX} == *icpc* ]]; then 782 elif [[ ${CXX} == *icpc* ]]; then
767 spec+=-icc 783 spec+=-icc
768 else 784 else
769 die "Unknown compiler '${CXX}'" 785 die "Unknown compiler '${CXX}'"
770 fi 786 fi
771 if [[ -n ${LIBDIR/lib} ]]; then
772 spec+=-${LIBDIR/lib}
773 fi
774 787
775 # Add -64 for 64bit profiles 788 # Add -64 for 64bit profiles
776 if use x64-freebsd || 789 if use x64-freebsd ||
777 use amd64-linux || 790 use amd64-linux ||
778 use x64-macos || 791 use x64-macos ||
784 797
785 echo "${spec}" 798 echo "${spec}"
786} 799}
787 800
788# @FUNCTION: qt_assistant_cleanup 801# @FUNCTION: qt_assistant_cleanup
802# @INTERNAL
789# @DESCRIPTION: 803# @DESCRIPTION:
790# Tries to clean up tools.pro for qt-assistant ebuilds. 804# Tries to clean up tools.pro for qt-assistant ebuilds.
791# Meant to be called in src_prepare(). 805# Meant to be called in src_prepare().
792# Since Qt 4.7.4 this function is a no-op. 806# Since Qt 4.7.4 this function is a no-op.
793qt_assistant_cleanup() { 807qt_assistant_cleanup() {
813 ;; 827 ;;
814 esac 828 esac
815} 829}
816 830
817# @FUNCTION: qt_nolibx11 831# @FUNCTION: qt_nolibx11
832# @INTERNAL
818# @DESCRIPTION: 833# @DESCRIPTION:
819# Ignore X11 tests for packages that don't need X libraries installed. 834# Ignore X11 tests for packages that don't need X libraries installed.
820qt_nolibx11() { 835qt_nolibx11() {
821 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 836 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
822 die "x11 check sed failed" 837 die "x11 check sed failed"

Legend:
Removed from v.1.109  
changed lines
  Added in v.1.120

  ViewVC Help
Powered by ViewVC 1.1.20