/[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.107 Revision 1.119
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.107 2011/12/21 23:38:45 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.119 2012/02/28 18:19:29 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}
66 68
67S=${WORKDIR}/${MY_P} 69S=${WORKDIR}/${MY_P}
68 70
69# @FUNCTION: qt4-build_pkg_setup 71# @FUNCTION: qt4-build_pkg_setup
70# @DESCRIPTION: 72# @DESCRIPTION:
71# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH 73# Sets up PATH and LD_LIBRARY_PATH.
72qt4-build_pkg_setup() { 74qt4-build_pkg_setup() {
73 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX= 75 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
74 76
75 # Protect users by not allowing downgrades between releases 77 # Protect users by not allowing downgrades between releases
76 # Downgrading revisions within the same release should be allowed 78 # Downgrading revisions within the same release should be allowed
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
124} 126}
125 127
126# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 128# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
127# @DESCRIPTION: 129# @DESCRIPTION:
128# Arguments for build_target_directories. Takes the directories, in which the 130# Arguments for build_target_directories. Takes the directories in which the
129# code should be compiled. This is a space-separated list 131# code should be compiled. This is a space-separated list.
130 132
131# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES 133# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
132# @DESCRIPTION: 134# @DESCRIPTION:
133# Space separated list including the directories that will be extracted from Qt 135# Space-separated list including the directories that will be extracted from
134# tarball 136# Qt tarball.
135 137
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 unpack_p="${MY_P}" 143
142 case "${PV}" in 144 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 \ 145 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
149 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ 146 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
150 ${QT4_EXTRACT_DIRECTORIES}; do 147 mkspecs qmake ${QT4_EXTRACT_DIRECTORIES}
148 do
151 targets+=" ${unpack_p}/${target}" 149 targets+="${MY_P}/${target} "
152 done 150 done
153 151
152 ebegin "Unpacking parts of ${tarball}:" ${targets//${MY_P}\/}
154 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} 153 tar -xzf "${DISTDIR}/${tarball}" ${targets}
155 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die 154 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} 155}
163 156
164# @ECLASS-VARIABLE: PATCHES 157# @ECLASS-VARIABLE: PATCHES
158# @DEFAULT_UNSET
165# @DESCRIPTION: 159# @DESCRIPTION:
166# 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.
167# 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.
168# example: 162# Make sure to specify the full path. This variable is utilised in
169# PATCHES="${FILESDIR}"/mypatch.patch 163# src_unpack/src_prepare phase, based on EAPI.
170# ${FILESDIR}"/mypatch2.patch"
171# 164#
165# @CODE
166# PATCHES=( "${FILESDIR}/mypatch.patch"
167# "${FILESDIR}/patches_folder/" )
168# @CODE
172 169
173# @FUNCTION: qt4-build_src_prepare 170# @FUNCTION: qt4-build_src_prepare
174# @DESCRIPTION: 171# @DESCRIPTION:
175# 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
176# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 173# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
177qt4-build_src_prepare() { 174qt4-build_src_prepare() {
178 setqtenv 175 setqtenv
179 cd "${S}" 176 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 177
188 if version_is_at_least "4.7"; then 178 if version_is_at_least "4.7"; then
189 # fix libX11 dependency on non X packages 179 # fix libX11 dependency on non X packages
190 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 180 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
191 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 181 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
197 # provide a proper macx-g++-64 187 # provide a proper macx-g++-64
198 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 188 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
199 189
200 sed -e '/^CONFIG/s:app_bundle::' \ 190 sed -e '/^CONFIG/s:app_bundle::' \
201 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \ 191 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
202 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed" 192 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
203 fi 193 fi
204 194
205 if [[ ${PN} != qt-core ]]; then 195 if [[ ${PN} != qt-core ]]; then
206 skip_qmake_build 196 skip_qmake_build
207 skip_project_generation 197 skip_project_generation
232 if [[ $(gcc-major-version) -lt 4 ]] ; then 222 if [[ $(gcc-major-version) -lt 4 ]] ; then
233 ewarn "Appending -fno-stack-protector to CXXFLAGS" 223 ewarn "Appending -fno-stack-protector to CXXFLAGS"
234 append-cxxflags -fno-stack-protector 224 append-cxxflags -fno-stack-protector
235 # Bug 253127 225 # Bug 253127
236 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 226 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" 227 -i mkspecs/common/g++.conf || die
238 fi 228 fi
239 229
240 # Bug 261632 230 # Bug 261632
241 if use ppc64; then 231 if use ppc64; then
242 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 232 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
243 append-flags -mminimal-toc 233 append-flags -mminimal-toc
244 fi 234 fi
245 235
246 # Bug 282984 && Bug 295530 236 # 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:" \ 237 sed -e "/^SYSTEM_VARIABLES=/i \
248 -i configure || die "sed qmake compilers failed" 238 CC='$(tc-getCC)'\n\
239 CXX='$(tc-getCXX)'\n\
240 CFLAGS='${CFLAGS}'\n\
241 CXXFLAGS='${CXXFLAGS}'\n\
242 LDFLAGS='${LDFLAGS}'\n" \
243 -i configure \
244 || die "sed SYSTEM_VARIABLES failed"
249 245
250 # Bug 321335 246 # Respect CC, CXX, LINK and *FLAGS in config.tests
251 if version_is_at_least 4.6; then 247 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
252 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 248 sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \
253 xargs -0 \ 249 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
254 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \ 250 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
255 -i || die "sed test compilers failed" 251 || die "sed config.tests failed"
256 fi 252
253 # Strip predefined CFLAGS from mkspecs (bug 312689)
254 sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf || die
257 255
258 # Bug 172219 256 # Bug 172219
259 sed -e "s:X11R6/::" \ 257 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 258
262 if [[ ${CHOST} == *-darwin* ]]; then 259 if [[ ${CHOST} == *-darwin* ]]; then
263 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 260 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
264 # crippled (by design) :/ 261 # crippled (by design) :/
262 sed \
265 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 263 -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
266 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 264 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
267 -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}:" \
268 -e "s:-arch\s\w*::g" \ 266 -e "s:-arch\s\w*::g" \
269 -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"
270 269
271 # 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
272 # fix arch handling (automagically duplicates our -arch arg and breaks 271 # fix arch handling (automagically duplicates our -arch arg and breaks
273 # pch). Additionally disable Xarch support. 272 # pch). Additionally disable Xarch support.
274 sed \ 273 sed \
279 -e "s:-arch \$i::" \ 278 -e "s:-arch \$i::" \
280 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \ 279 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
281 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \ 280 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
282 -e "s:-Xarch_x86_64::g" \ 281 -e "s:-Xarch_x86_64::g" \
283 -e "s:-Xarch_ppc64::g" \ 282 -e "s:-Xarch_ppc64::g" \
284 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 283 -i configure mkspecs/common/mac-g++.conf \
284 || die "sed -arch/-Xarch failed"
285 285
286 # 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.
287 if [[ ${CHOST} == *-apple-darwin10 ]] ; then 287 if [[ ${CHOST} == *-apple-darwin10 ]] ; then
288 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" \
289 -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" \
290 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 290 -i configure mkspecs/common/mac-g++.conf \
291 || die "sed deployment target failed"
291 fi 292 fi
292 fi 293 fi
293 294
294 # 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
295 # Darwin, for which the sources already cater for -liconv 296 # Darwin, for which the sources already cater for -liconv
296 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then 297 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
297 sed \ 298 sed -e 's|mac:\(LIBS += -liconv\)|\1|g' \
298 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
299 -i config.tests/unix/iconv/iconv.pro \ 299 -i config.tests/unix/iconv/iconv.pro \
300 || die "sed on iconv.pro failed" 300 || die "sed iconv.pro failed"
301 fi 301 fi
302 302
303 # we need some patches for Solaris 303 # we need some patches for Solaris
304 sed -i \
305 -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,' \
306 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 305 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
307 # use GCC over SunStudio 306 # use GCC over SunStudio
308 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 307 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
309 # don't flirt with non-Prefix stuff, we're quite possessive 308 # do not flirt with non-Prefix stuff, we're quite possessive
310 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 309 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
311 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 310 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
312 # strip predefined CFLAGS from qmake ( bug #312689 )
313 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
314 311
315 base_src_prepare 312 base_src_prepare
316} 313}
317 314
318# @FUNCTION: qt4-build_src_configure 315# @FUNCTION: qt4-build_src_configure
350 myconf+=" -cocoa -framework" 347 myconf+=" -cocoa -framework"
351 348
352 # We are crazy and build cocoa + qt3support :-) 349 # We are crazy and build cocoa + qt3support :-)
353 if use qt3support; then 350 if use qt3support; then
354 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \ 351 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
355 -i configure 352 -i configure || die
356 fi 353 fi
357 354
358 # We need the source's headers, not the installed ones. 355 # We need the source's headers, not the installed ones.
359 myconf+=" -I${S}/include" 356 myconf+=" -I${S}/include"
360 357
385 382
386# @FUNCTION: qt4-build_src_test 383# @FUNCTION: qt4-build_src_test
387# @DESCRIPTION: 384# @DESCRIPTION:
388# Runs tests only in target directories. 385# Runs tests only in target directories.
389qt4-build_src_test() { 386qt4-build_src_test() {
387 # QtMultimedia does not have any test suite (bug #332299)
388 [[ ${PN} == "qt-multimedia" ]] && return
389
390 for dir in ${QT4_TARGET_DIRECTORIES}; do 390 for dir in ${QT4_TARGET_DIRECTORIES}; do
391 emake -j1 check -C ${dir} 391 emake -j1 check -C ${dir}
392 done 392 done
393} 393}
394 394
395# @FUNCTION: fix_includes 395# @FUNCTION: fix_includes
396# @DESCRIPTION: 396# @DESCRIPTION:
397# For MacOSX we need to add some symlinks when frameworks are 397# 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. 398# being used, to avoid complications with some more or less stupid packages.
399fix_includes() { 399fix_includes() {
400 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then 400 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
401 # Some packages tend to include <Qt/...> 401 # Some packages tend to include <Qt/...>
402 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt 402 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
403 403
404 # Fake normal headers when frameworks are installed... eases life later on 404 # Fake normal headers when frameworks are installed... eases life later on
405 local dest f 405 local dest f h
406 for frw in "${D}${QTLIBDIR}"/*.framework; do 406 for frw in "${D}${QTLIBDIR}"/*.framework; do
407 [[ -e "${frw}"/Headers ]] || continue 407 [[ -e "${frw}"/Headers ]] || continue
408 f=$(basename ${frw}) 408 f=$(basename ${frw})
409 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework} 409 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
410 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}" 410 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
429 install_qconfigs 429 install_qconfigs
430 fix_library_files 430 fix_library_files
431 fix_includes 431 fix_includes
432 432
433 # remove .la files since we are building only shared Qt libraries 433 # remove .la files since we are building only shared Qt libraries
434 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm 434 find "${D}"${QTLIBDIR} -type f -name '*.la' -print0 | xargs -0 rm -f
435} 435}
436 436
437# @FUNCTION: setqtenv 437# @FUNCTION: setqtenv
438# @INTERNAL
438setqtenv() { 439setqtenv() {
439 # Set up installation directories 440 # Set up installation directories
440 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
441 QTPREFIXDIR=${EPREFIX}/usr 441 QTPREFIXDIR=${EPREFIX}/usr
442 QTBINDIR=${EPREFIX}/usr/bin 442 QTBINDIR=${EPREFIX}/usr/bin
443 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 443 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
444 QMAKE_LIBDIR_QT=${QTLIBDIR}
445 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig 444 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
446 QTDATADIR=${EPREFIX}/usr/share/qt4
447 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV} 445 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
448 QTHEADERDIR=${EPREFIX}/usr/include/qt4 446 QTHEADERDIR=${EPREFIX}/usr/include/qt4
449 QTPLUGINDIR=${QTLIBDIR}/plugins 447 QTPLUGINDIR=${QTLIBDIR}/plugins
450 QTIMPORTDIR=${QTLIBDIR}/imports 448 QTIMPORTDIR=${QTLIBDIR}/imports
449 QTDATADIR=${EPREFIX}/usr/share/qt4
450 QTTRANSDIR=${QTDATADIR}/translations
451 QTSYSCONFDIR=${EPREFIX}/etc/qt4 451 QTSYSCONFDIR=${EPREFIX}/etc/qt4
452 QTTRANSDIR=${QTDATADIR}/translations
453 QTEXAMPLESDIR=${QTDATADIR}/examples 452 QTEXAMPLESDIR=${QTDATADIR}/examples
454 QTDEMOSDIR=${QTDATADIR}/demos 453 QTDEMOSDIR=${QTDATADIR}/demos
454 QMAKE_LIBDIR_QT=${QTLIBDIR}
455 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4 455 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
456
456 PLATFORM=$(qt_mkspecs_dir) 457 PLATFORM=$(qt_mkspecs_dir)
457 458
458 unset QMAKESPEC 459 unset QMAKESPEC
459} 460}
460 461
461# @FUNCTION: standard_configure_options 462# @FUNCTION: standard_configure_options
463# @INTERNAL
462# @DESCRIPTION: 464# @DESCRIPTION:
463# Sets up some standard configure options, like libdir (if necessary), whether 465# Sets up some standard configure options, like libdir (if necessary), whether
464# debug info is wanted or not. 466# debug info is wanted or not.
465standard_configure_options() { 467standard_configure_options() {
466 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} 468 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
467 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} 469 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
468 -importdir ${QTIMPORTDIR} -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR} 470 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR})
471 -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR} -sysconfdir ${QTSYSCONFDIR}
469 -sysconfdir ${QTSYSCONFDIR} -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR} 472 -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
470 -opensource -confirm-license -shared -fast -largefile -stl -verbose 473 -opensource -confirm-license -shared -fast -largefile -stl -verbose
471 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos" 474 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
472 475
473 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)" 476 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
474 477
517 echo "${myconf}" 520 echo "${myconf}"
518} 521}
519 522
520# @FUNCTION: prepare_directories 523# @FUNCTION: prepare_directories
521# @USAGE: < directories > 524# @USAGE: < directories >
525# @INTERNAL
522# @DESCRIPTION: 526# @DESCRIPTION:
523# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES 527# Generates Makefiles for the given list of directories.
524prepare_directories() { 528prepare_directories() {
525 for x in "$@"; do 529 for x in "$@"; do
526 pushd "${S}"/${x} >/dev/null 530 pushd "${S}"/${x} >/dev/null || die
527 einfo "Running qmake in: ${x}" 531 einfo "Running qmake in: ${x}"
528 # avoid running over the maximum argument number, bug #299810 532 # avoid running over the maximum argument number, bug #299810
529 { 533 {
530 echo "${S}"/mkspecs/common/*.conf 534 echo "${S}"/mkspecs/common/*.conf
531 find "${S}" -name '*.pr[io]' 535 find "${S}" -name '*.pr[io]'
532 } | xargs sed -i \ 536 } | xargs sed -i \
533 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \ 537 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
534 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \ 538 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
535 || die 539 || die
536 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" 540 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
537 popd >/dev/null 541 popd >/dev/null || die
538 done 542 done
539} 543}
540 544
541 545
542# @FUNCTION: build_directories 546# @FUNCTION: build_directories
543# @USAGE: < directories > 547# @USAGE: < directories >
548# @INTERNAL
544# @DESCRIPTION: 549# @DESCRIPTION:
545# Compiles the code in $QT4_TARGET_DIRECTORIES 550# Compiles the code in the given list of directories.
546build_directories() { 551build_directories() {
547 for x in "$@"; do 552 for x in "$@"; do
548 pushd "${S}"/${x} >/dev/null 553 pushd "${S}"/${x} >/dev/null || die
549 emake CC="$(tc-getCC)" \ 554 emake CC="$(tc-getCC)" \
550 CXX="$(tc-getCXX)" \ 555 CXX="$(tc-getCXX)" \
551 LINK="$(tc-getCXX)" || die "emake failed" 556 LINK="$(tc-getCXX)" || die "emake failed"
552 popd >/dev/null 557 popd >/dev/null || die
553 done 558 done
554} 559}
555 560
556# @FUNCTION: install_directories 561# @FUNCTION: install_directories
557# @USAGE: < directories > 562# @USAGE: < directories >
563# @INTERNAL
558# @DESCRIPTION: 564# @DESCRIPTION:
559# run emake install in the given directories, which are separated by spaces 565# Runs emake install in the given directories, which are separated by spaces.
560install_directories() { 566install_directories() {
561 for x in "$@"; do 567 for x in "$@"; do
562 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" 568 pushd "${S}"/${x} >/dev/null || die
563 emake INSTALL_ROOT="${D}" install || die "emake install failed" 569 emake INSTALL_ROOT="${D}" install || die "emake install failed"
564 popd >/dev/null || die "Can't popd from ${S}/${x}" 570 popd >/dev/null || die
565 done 571 done
566} 572}
567 573
568# @ECLASS-VARIABLE: QCONFIG_ADD 574# @ECLASS-VARIABLE: QCONFIG_ADD
569# @DESCRIPTION: 575# @DESCRIPTION:
579# @DESCRIPTION: 585# @DESCRIPTION:
580# List variables that should be defined at the top of QtCore/qconfig.h 586# List variables that should be defined at the top of QtCore/qconfig.h
581: ${QCONFIG_DEFINE:=} 587: ${QCONFIG_DEFINE:=}
582 588
583# @FUNCTION: install_qconfigs 589# @FUNCTION: install_qconfigs
590# @INTERNAL
584# @DESCRIPTION: 591# @DESCRIPTION:
585# Install gentoo-specific mkspecs configurations 592# Install gentoo-specific mkspecs configurations.
586install_qconfigs() { 593install_qconfigs() {
587 local x 594 local x
588 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 595 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
589 for x in QCONFIG_ADD QCONFIG_REMOVE; do 596 for x in QCONFIG_ADD QCONFIG_REMOVE; do
590 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 597 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
601 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 608 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
602 fi 609 fi
603} 610}
604 611
605# @FUNCTION: generate_qconfigs 612# @FUNCTION: generate_qconfigs
613# @INTERNAL
606# @DESCRIPTION: 614# @DESCRIPTION:
607# Generates gentoo-specific configurations 615# Generates gentoo-specific qconfig.{h,pri}.
608generate_qconfigs() { 616generate_qconfigs() {
609 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 617 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
610 local x qconfig_add qconfig_remove qconfig_new 618 local x qconfig_add qconfig_remove qconfig_new
611 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 619 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
612 [[ -f ${x} ]] || continue 620 [[ -f ${x} ]] || continue
661 fi 669 fi
662} 670}
663 671
664# @FUNCTION: qt4-build_pkg_postrm 672# @FUNCTION: qt4-build_pkg_postrm
665# @DESCRIPTION: 673# @DESCRIPTION:
666# Generate configurations when the package is completely removed 674# Regenerate configuration when the package is completely removed.
667qt4-build_pkg_postrm() { 675qt4-build_pkg_postrm() {
668 generate_qconfigs 676 generate_qconfigs
669} 677}
670 678
671# @FUNCTION: qt4-build_pkg_postinst 679# @FUNCTION: qt4-build_pkg_postinst
672# @DESCRIPTION: 680# @DESCRIPTION:
673# Generate configuration, plus throws a message about possible 681# Regenerate configuration, plus throw a message about possible
674# breakages and proposed solutions. 682# breakages and proposed solutions.
675qt4-build_pkg_postinst() { 683qt4-build_pkg_postinst() {
676 generate_qconfigs 684 generate_qconfigs
677} 685}
678 686
679# @FUNCTION: skip_qmake_build 687# @FUNCTION: skip_qmake_build
688# @INTERNAL
680# @DESCRIPTION: 689# @DESCRIPTION:
681# Don't need to build qmake, as it's already installed from qt-core 690# Patches configure to skip qmake compilation, as it's already installed by qt-core.
682skip_qmake_build() { 691skip_qmake_build() {
683 # Don't need to build qmake, as it's already installed from qt-core
684 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed" 692 sed -i -e "s:if true:if false:g" "${S}"/configure || die
685} 693}
686 694
687# @FUNCTION: skip_project_generation 695# @FUNCTION: skip_project_generation
696# @INTERNAL
688# @DESCRIPTION: 697# @DESCRIPTION:
689# Exit the script early by throwing in an exit before all of the .pro files are scanned 698# Exit the script early by throwing in an exit before all of the .pro files are scanned.
690skip_project_generation() { 699skip_project_generation() {
691 # Exit the script early by throwing in an exit before all of the .pro files are scanned
692 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ 700 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
693 -i "${S}"/configure || die "sed failed"
694} 701}
695 702
696# @FUNCTION: symlink_binaries_to_buildtree 703# @FUNCTION: symlink_binaries_to_buildtree
704# @INTERNAL
697# @DESCRIPTION: 705# @DESCRIPTION:
698# Symlink generated binaries to buildtree so they can be used during compilation 706# Symlinks generated binaries to buildtree, so they can be used during compilation time.
699# time
700symlink_binaries_to_buildtree() { 707symlink_binaries_to_buildtree() {
701 for bin in qmake moc uic rcc; do 708 for bin in qmake moc uic rcc; do
702 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed" 709 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
703 done 710 done
704} 711}
705 712
706# @FUNCTION: fix_library_files 713# @FUNCTION: fix_library_files
714# @INTERNAL
707# @DESCRIPTION: 715# @DESCRIPTION:
708# Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and 716# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
709# moves the *.pc-files into the pkgconfig directory 717# moves the *.pc files into the pkgconfig directory.
710fix_library_files() { 718fix_library_files() {
719 local libfile
711 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do 720 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
712 if [[ -e ${libfile} ]]; then 721 if [[ -e ${libfile} ]]; then
713 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed" 722 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
714 fi 723 fi
715 done 724 done
716 725
717 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: 726 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
718 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 727 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
719 if [[ -e ${libfile} ]]; then 728 if [[ -e ${libfile} ]]; then
720 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed" 729 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
721 730
722 # Move .pc files into the pkgconfig directory 731 # Move .pc files into the pkgconfig directory
723 dodir ${QTPCDIR#${EPREFIX}} 732 dodir ${QTPCDIR#${EPREFIX}}
724 mv ${libfile} "${D}"/${QTPCDIR}/ \ 733 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
725 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
726 fi 734 fi
727 done 735 done
728 736
729 # Don't install an empty directory 737 # Don't install an empty directory
730 rmdir "${D}"/${QTLIBDIR}/pkgconfig 738 rmdir "${D}"/${QTLIBDIR}/pkgconfig
731} 739}
732 740
733# @FUNCTION: qt_use 741# @FUNCTION: qt_use
734# @USAGE: < flag > [ feature ] [ enableval ] 742# @USAGE: < flag > [ feature ] [ enableval ]
735# @DESCRIPTION: 743# @DESCRIPTION:
736# This will echo "${enableval}-${feature}" if <flag> is enabled, or 744# This will echo "-${enableval}-${feature}" if <flag> is enabled, or
737# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> 745# "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
738# will be used for that. If [enableval] is not specified, it omits the 746# will be used for that. If [enableval] is not specified, it omits the
739# assignment-part 747# "-${enableval}" part.
740qt_use() { 748qt_use() {
741 local flag=$1 749 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
742 local feature=$1
743 local enableval=
744
745 [[ -n $2 ]] && feature=$2
746 [[ -n $3 ]] && enableval=-$3
747
748 if use ${flag}; then
749 echo "${enableval}-${feature}"
750 else
751 echo "-no-${feature}"
752 fi
753} 750}
754 751
755# @FUNCTION: qt_mkspecs_dir 752# @FUNCTION: qt_mkspecs_dir
756# @RETURN: the specs-directory w/o path 753# @RETURN: the specs-directory w/o path
757# @DESCRIPTION: 754# @DESCRIPTION:
758# Allows us to define which mkspecs dir we want to use. 755# Allows us to define which mkspecs dir we want to use.
759qt_mkspecs_dir() { 756qt_mkspecs_dir() {
760 # Allows us to define which mkspecs dir we want to use.
761 local spec 757 local spec=
762
763 case ${CHOST} in 758 case ${CHOST} in
764 *-freebsd*|*-dragonfly*) 759 *-freebsd*|*-dragonfly*)
765 spec=freebsd ;; 760 spec=freebsd ;;
766 *-openbsd*) 761 *-openbsd*)
767 spec=openbsd ;; 762 spec=openbsd ;;
790 elif [[ ${CXX} == *icpc* ]]; then 785 elif [[ ${CXX} == *icpc* ]]; then
791 spec+=-icc 786 spec+=-icc
792 else 787 else
793 die "Unknown compiler '${CXX}'" 788 die "Unknown compiler '${CXX}'"
794 fi 789 fi
795 if [[ -n ${LIBDIR/lib} ]]; then
796 spec+=-${LIBDIR/lib}
797 fi
798 790
799 # Add -64 for 64bit profiles 791 # Add -64 for 64bit profiles
800 if use x64-freebsd || 792 if use x64-freebsd ||
801 use amd64-linux || 793 use amd64-linux ||
802 use x64-macos || 794 use x64-macos ||
808 800
809 echo "${spec}" 801 echo "${spec}"
810} 802}
811 803
812# @FUNCTION: qt_assistant_cleanup 804# @FUNCTION: qt_assistant_cleanup
813# @RETURN: nothing 805# @INTERNAL
814# @DESCRIPTION: 806# @DESCRIPTION:
815# Tries to clean up tools.pro for qt-assistant ebuilds. 807# Tries to clean up tools.pro for qt-assistant ebuilds.
816# Meant to be called in src_prepare(). 808# Meant to be called in src_prepare().
817# Since Qt 4.7.4 this function is a no-op. 809# Since Qt 4.7.4 this function is a no-op.
818qt_assistant_cleanup() { 810qt_assistant_cleanup() {
838 ;; 830 ;;
839 esac 831 esac
840} 832}
841 833
842# @FUNCTION: qt_nolibx11 834# @FUNCTION: qt_nolibx11
843# @RETURN: nothing 835# @INTERNAL
844# @DESCRIPTION: 836# @DESCRIPTION:
845# Ignore X11 tests for packages that don't need X libraries installed 837# Ignore X11 tests for packages that don't need X libraries installed.
846qt_nolibx11() { 838qt_nolibx11() {
847 einfo "Removing X11 check to allow X-less compilation"
848 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 839 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
849 die "x11 check sed failed" 840 die "x11 check sed failed"
850} 841}
851 842
852EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 843EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.107  
changed lines
  Added in v.1.119

  ViewVC Help
Powered by ViewVC 1.1.20