/[gentoo-x86]/eclass/qt4-build.eclass
Gentoo

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.76 - (hide annotations) (download)
Sat Jul 3 15:49:39 2010 UTC (4 years, 2 months ago) by ayoy
Branch: MAIN
Changes since 1.75: +11 -2 lines
Add qt4-build_src_test that runs make check only in target build directories.

1 abcd 1.55 # Copyright 1999-2009 Gentoo Foundation
2 caleb 1.1 # Distributed under the terms of the GNU General Public License v2
3 ayoy 1.76 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.75 2010/07/03 09:10:55 hwoarang Exp $
4 caleb 1.1
5     # @ECLASS: qt4-build.eclass
6     # @MAINTAINER:
7 yngwin 1.25 # Ben de Groot <yngwin@gentoo.org>,
8     # Markos Chandras <hwoarang@gentoo.org>,
9 caleb 1.1 # Caleb Tennis <caleb@gentoo.org>
10 wired 1.46 # Alex Alexander <wired@gentoo.org>
11 ingmar 1.8 # @BLURB: Eclass for Qt4 split ebuilds.
12 caleb 1.1 # @DESCRIPTION:
13     # This eclass contains various functions that are used when building Qt4
14    
15 hwoarang 1.37 inherit base eutils multilib toolchain-funcs flag-o-matic versionator
16 caleb 1.1
17 abcd 1.59 MY_PV=${PV/_/-}
18     if version_is_at_least 4.5.99999999; then
19     MY_P=qt-everywhere-opensource-src-${MY_PV}
20 wired 1.65 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE="+exceptions"
21 abcd 1.59 else
22     MY_P=qt-x11-opensource-src-${MY_PV}
23     fi
24    
25     HOMEPAGE="http://qt.nokia.com/"
26     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
27    
28     LICENSE="|| ( LGPL-2.1 GPL-3 )"
29 wired 1.65 IUSE+=" debug pch aqua"
30 abcd 1.59
31 hwoarang 1.36 RDEPEND="
32     !<x11-libs/qt-assistant-${PV}
33     !>x11-libs/qt-assistant-${PV}-r9999
34     !<x11-libs/qt-core-${PV}
35     !>x11-libs/qt-core-${PV}-r9999
36     !<x11-libs/qt-dbus-${PV}
37     !>x11-libs/qt-dbus-${PV}-r9999
38     !<x11-libs/qt-demo-${PV}
39     !>x11-libs/qt-demo-${PV}-r9999
40     !<x11-libs/qt-gui-${PV}
41     !>x11-libs/qt-gui-${PV}-r9999
42 wired 1.65 !<x11-libs/qt-multimedia-${PV}
43     !>x11-libs/qt-multimedia-${PV}-r9999
44 hwoarang 1.36 !<x11-libs/qt-opengl-${PV}
45     !>x11-libs/qt-opengl-${PV}-r9999
46     !<x11-libs/qt-phonon-${PV}
47     !>x11-libs/qt-phonon-${PV}-r9999
48     !<x11-libs/qt-qt3support-${PV}
49     !>x11-libs/qt-qt3support-${PV}-r9999
50     !<x11-libs/qt-script-${PV}
51     !>x11-libs/qt-script-${PV}-r9999
52     !<x11-libs/qt-sql-${PV}
53     !>x11-libs/qt-sql-${PV}-r9999
54     !<x11-libs/qt-svg-${PV}
55     !>x11-libs/qt-svg-${PV}-r9999
56     !<x11-libs/qt-test-${PV}
57     !>x11-libs/qt-test-${PV}-r9999
58     !<x11-libs/qt-webkit-${PV}
59     !>x11-libs/qt-webkit-${PV}-r9999
60     !<x11-libs/qt-xmlpatterns-${PV}
61     !>x11-libs/qt-xmlpatterns-${PV}-r9999
62     "
63 abcd 1.55
64 abcd 1.59 S=${WORKDIR}/${MY_P}
65 yngwin 1.25
66 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
67     # @DESCRIPTION:
68 abcd 1.57 # Sets up S, MY_P, PATH, and LD_LIBRARY_PATH
69 caleb 1.1 qt4-build_pkg_setup() {
70 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
71    
72 yngwin 1.66 # Protect users by not allowing downgrades between releases
73     # Downgrading revisions within the same release should be allowed
74     if has_version '>'${CATEGORY}/${P}-r9999 ; then
75     if [[ -z $I_KNOW_WHAT_I_AM_DOING ]] ; then
76     eerror "Sanity check to keep you from breaking your system:"
77     eerror " Downgrading Qt is completely unsupported and will break your system!"
78     die "aborting to save your system"
79     else
80     ewarn "Downgrading Qt is completely unsupported and will break your system!"
81     fi
82     fi
83 abcd 1.57
84 spatz 1.71 if [[ "${PN}" == "qt-webkit" ]]; then
85     eshopts_push -s extglob
86     if is-flagq '-g?(gdb)?([0-9])'; then
87     echo
88     ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
89     ewarn "You may experience really long compilation times and/or increased memory usage."
90     ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
91     ewarn "For more info check out bug #307861"
92     echo
93     fi
94     eshopts_pop
95     fi
96    
97 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
98 abcd 1.57 if [[ ${CHOST} != *-darwin* ]]; then
99     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
100     else
101     DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
102 yngwin 1.63 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
103     # platform detection. Note: needs to come before any directories to
104     # avoid extract failure.
105     [[ ${CHOST} == *-apple-darwin* ]] && \
106 yngwin 1.66 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
107     ${QT4_EXTRACT_DIRECTORIES}"
108 abcd 1.57 fi
109 yngwin 1.20
110 abcd 1.55 # Make sure ebuilds use the required EAPI
111 abcd 1.57 if [[ ${EAPI} != [23] ]]; then
112     eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
113     eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
114     eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
115     die "qt4-build eclass requires EAPI=2 or EAPI=3"
116 yngwin 1.20 fi
117 caleb 1.1
118 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
119 yngwin 1.20 ewarn "Using a GCC version lower than 4.1 is not supported!"
120     fi
121 caleb 1.1 }
122    
123 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
124     # @DESCRIPTION:
125     # Arguments for build_target_directories. Takes the directories, in which the
126     # code should be compiled. This is a space-separated list
127    
128     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
129     # @DESCRIPTION:
130     # Space separated list including the directories that will be extracted from Qt
131     # tarball
132    
133     # @FUNCTION: qt4-build_src_unpack
134     # @DESCRIPTION:
135     # Unpacks the sources
136 yngwin 1.20 qt4-build_src_unpack() {
137 hwoarang 1.42 setqtenv
138 abcd 1.55 local target targets=
139     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
140 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
141 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
142 abcd 1.55 targets+=" ${MY_P}/${target}"
143 ingmar 1.11 done
144    
145 spatz 1.73 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
146     tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
147 ingmar 1.11 }
148    
149 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
150     # @DESCRIPTION:
151     # In case you have patches to apply, specify them in PATCHES variable. Make sure
152     # to specify the full path. This variable is necessary for src_prepare phase.
153     # example:
154     # PATCHES="${FILESDIR}"/mypatch.patch
155     # ${FILESDIR}"/mypatch2.patch"
156     #
157 hwoarang 1.34
158     # @FUNCTION: qt4-build_src_prepare
159     # @DESCRIPTION:
160     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
161     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
162 yngwin 1.20 qt4-build_src_prepare() {
163 hwoarang 1.42 setqtenv
164 yngwin 1.20 cd "${S}"
165    
166 wired 1.69 # fix qt 4.7 regression that skips -fvisibility=hidden
167 hwoarang 1.72 if version_is_at_least "4.7.0_beta1"; then
168 wired 1.69 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
169     -i config.tests/unix/fvisibility.test ||
170     die "visibility fixing sed failed"
171     fi
172    
173 abcd 1.57 if use aqua; then
174     # provide a proper macx-g++-64
175     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
176    
177     sed -e '/^CONFIG/s:app_bundle::' \
178     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
179     -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
180     fi
181    
182 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
183     skip_qmake_build_patch
184     skip_project_generation_patch
185     symlink_binaries_to_buildtree
186     fi
187 hwoarang 1.24
188 abcd 1.57 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
189     # qmake bus errors with -O2 but -O3 works
190     replace-flags -O2 -O3
191     fi
192    
193 hwoarang 1.21 # Bug 178652
194 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
195 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
196     append-flags -fno-gcse
197 gengor 1.18 fi
198    
199 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
200 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
201 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
202     append-cxxflags -fno-stack-protector
203     # Bug 253127
204 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
205     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
206     fi
207    
208 ayoy 1.49 # Bug 261632
209     if use ppc64; then
210     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
211     append-flags -mminimal-toc
212     fi
213    
214 wired 1.67 # Bug 282984 && Bug 295530
215     sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
216     -i configure || die "sed qmake compilers failed"
217 spatz 1.70 # bug 321335
218 spatz 1.74 if version_is_at_least 4.6; then
219     find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
220     xargs -0 \
221     sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):g" \
222     -i || die "sed test compilers failed"
223     fi
224 wired 1.67
225 hwoarang 1.24 # Bug 172219
226 wired 1.67 sed -e "s:X11R6/::" \
227 ingmar 1.7 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
228    
229 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
230 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
231     # crippled (by design) :/
232     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
233     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
234     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
235     -e "s:-arch\s\w*::g" \
236     -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
237    
238     # Fix configure's -arch settings that appear in qmake/Makefile and also
239     # fix arch handling (automagically duplicates our -arch arg and breaks
240     # pch). Additionally disable Xarch support.
241     sed \
242     -e "s:-arch i386::" \
243     -e "s:-arch ppc::" \
244     -e "s:-arch x86_64::" \
245     -e "s:-arch ppc64::" \
246     -e "s:-arch \$i::" \
247     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
248     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
249     -e "s:-Xarch_x86_64::g" \
250     -e "s:-Xarch_ppc64::g" \
251     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
252    
253     # On Snow Leopard don't fall back to 10.5 deployment target.
254     if [[ ${CHOST} == *-apple-darwin10 ]] ; then
255     sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
256     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
257     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
258     fi
259     fi
260    
261     # this one is needed for all systems with a separate -liconv, apart from
262     # Darwin, for which the sources already cater for -liconv
263     if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
264     sed \
265     -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
266     -i config.tests/unix/iconv/iconv.pro \
267     || die "sed on iconv.pro failed"
268     fi
269    
270     # we need some patches for Solaris
271     sed -i \
272     -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
273     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
274     # use GCC over SunStudio
275     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
276     # don't flirt with non-Prefix stuff, we're quite possessive
277     sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
278     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
279 hwoarang 1.75 # strip predefined CFLAGS from qmake ( bug #312689 )
280     sed -i '/^QMAKE_CFLAGS_\(RELEASE\|DEBUG\)/s:+=.*:+=:' mkspecs/common/g++.conf
281 yngwin 1.39
282 hwoarang 1.37 base_src_prepare
283 ingmar 1.7 }
284    
285 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
286     # @DESCRIPTION:
287     # Default configure phase
288 yngwin 1.20 qt4-build_src_configure() {
289 hwoarang 1.42 setqtenv
290 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
291    
292 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
293     # Darwin, for which the sources already cater for -liconv
294     use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
295     myconf+=" -liconv"
296    
297     if has glib ${IUSE//+} && use glib; then
298     # use -I, -L and -l from configure
299     local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
300     # avoid the -pthread argument
301     myconf+=" ${glibflags//-pthread}"
302     unset glibflags
303     fi
304    
305     if use aqua ; then
306     # On (snow) leopard use the new (frameworked) cocoa code.
307 abcd 1.61 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
308 abcd 1.57 myconf+=" -cocoa -framework"
309    
310     # We are crazy and build cocoa + qt3support :-)
311     if use qt3support; then
312     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
313     -i configure
314     fi
315    
316     # We need the source's headers, not the installed ones.
317     myconf+=" -I${S}/include"
318    
319     # Add hint for the framework location.
320     myconf+=" -F${QTLIBDIR}"
321     fi
322     else
323     # freetype2 include dir is non-standard, thus include it on configure
324     # use -I from configure
325     myconf+=" $(pkg-config --cflags freetype2)"
326     fi
327    
328 ingmar 1.7 echo ./configure ${myconf}
329     ./configure ${myconf} || die "./configure failed"
330 tommy 1.43 myconf=""
331 yngwin 1.20 }
332 ingmar 1.7
333 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
334     # @DESCRIPTION: Actual compile phase
335 yngwin 1.20 qt4-build_src_compile() {
336 hwoarang 1.42 setqtenv
337 yngwin 1.20
338 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
339 caleb 1.1 }
340    
341 ayoy 1.76 # @FUNCTION: qt4-build_src_test
342     # @DESCRIPTION:
343     # Runs tests only in target directories.
344     qt4-build_src_test() {
345     for dir in ${QT4_TARGET_DIRECTORIES}; do
346     emake -j1 check -C ${dir}
347     done
348     }
349    
350 abcd 1.57 # @FUNCTION: fix_includes
351     # @DESCRIPTION:
352     # For MacOSX we need to add some symlinks when frameworks are
353     # being used, to avoid complications with some more or less stupid packages.
354     fix_includes() {
355 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
356 abcd 1.57 # Some packages tend to include <Qt/...>
357     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
358    
359     # Fake normal headers when frameworks are installed... eases life later on
360     local dest f
361     for frw in "${D}${QTLIBDIR}"/*.framework; do
362     [[ -e "${frw}"/Headers ]] || continue
363     f=$(basename ${frw})
364     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
365     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
366    
367     # Link normal headers as well.
368     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
369     h=$(basename ${hdr})
370     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
371     done
372     done
373     fi
374     }
375    
376 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
377     # @DESCRIPTION:
378     # Perform the actual installation including some library fixes.
379 caleb 1.4 qt4-build_src_install() {
380 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
381 hwoarang 1.42 setqtenv
382 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
383 ingmar 1.7 install_qconfigs
384 caleb 1.4 fix_library_files
385 abcd 1.57 fix_includes
386 caleb 1.4 }
387    
388 hwoarang 1.42 # @FUNCTION: setqtenv
389     setqtenv() {
390     # Set up installation directories
391 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
392     QTPREFIXDIR=${EPREFIX}/usr
393     QTBINDIR=${EPREFIX}/usr/bin
394     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
395 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
396 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
397     QTDATADIR=${EPREFIX}/usr/share/qt4
398     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
399     QTHEADERDIR=${EPREFIX}/usr/include/qt4
400 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
401 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
402 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
403     QTEXAMPLESDIR=${QTDATADIR}/examples
404     QTDEMOSDIR=${QTDATADIR}/demos
405 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
406 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
407    
408     unset QMAKESPEC
409     }
410    
411 hwoarang 1.34 # @FUNCTION: standard_configure_options
412     # @DESCRIPTION:
413     # Sets up some standard configure options, like libdir (if necessary), whether
414     # debug info is wanted or not.
415 caleb 1.1 standard_configure_options() {
416 abcd 1.55 local myconf=
417 caleb 1.1
418 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
419 caleb 1.1
420     # Disable visibility explicitly if gcc version isn't 4
421 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
422     myconf+=" -no-reduce-exports"
423 caleb 1.1 fi
424    
425 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
426 abcd 1.55 myconf+=" $(qt_use pch)"
427 ingmar 1.12
428 ingmar 1.7 if use debug; then
429 abcd 1.55 myconf+=" -debug"
430 ingmar 1.7 else
431 abcd 1.55 myconf+=" -release"
432 ingmar 1.7 fi
433 abcd 1.55 myconf+=" -no-separate-debug-info"
434 caleb 1.1
435 abcd 1.57 use aqua && myconf+=" -no-framework"
436    
437 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
438 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
439     case "$(tc-arch)" in
440 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
441     ppc-macos) myconf+=" -arch ppc" ;;
442     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
443     sparc|sparc-*) myconf+=" -arch sparc" ;;
444     x86-macos) myconf+=" -arch x86" ;;
445 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
446     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
447     hppa|sh) myconf+=" -arch generic" ;;
448 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
449 ingmar 1.11 esac
450    
451 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
452     # 4.6: exceptions USE flag
453     local exceptions="-exceptions"
454 wired 1.48 case "${PV}" in
455 wired 1.65 4.5.*)
456     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
457 wired 1.48 ;;
458     *)
459 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
460 wired 1.48 ;;
461     esac
462    
463 abcd 1.57 # note about -reduce-relocations:
464     # That flag seems to introduce major breakage to applications,
465     # mostly to be seen as a core dump with the message "QPixmap: Must
466     # construct a QApplication before a QPaintDevice" on Solaris
467     # -- Daniel Vergien
468     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
469    
470 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
471 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
472     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
473     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
474     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
475 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
476 wired 1.48 ${exceptions}
477 abcd 1.57 -nomake examples -nomake demos"
478 yngwin 1.39
479 caleb 1.1 echo "${myconf}"
480     }
481    
482 hwoarang 1.34 # @FUNCTION: build_directories
483     # @USAGE: < directories >
484     # @DESCRIPTION:
485     # Compiles the code in $QT4_TARGET_DIRECTORIES
486 caleb 1.1 build_directories() {
487 abcd 1.55 for x in "$@"; do
488 abcd 1.57 pushd "${S}"/${x} >/dev/null
489 abcd 1.60 # avoid running over the maximum argument number, bug #299810
490     {
491     echo "${S}"/mkspecs/common/*.conf
492     find "${S}" -name '*.pr[io]'
493     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
494 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
495 wired 1.67 emake CC="$(tc-getCC)" \
496     CXX="$(tc-getCXX)" \
497     LINK="$(tc-getCXX)" || die "emake failed"
498 abcd 1.57 popd >/dev/null
499 caleb 1.1 done
500     }
501    
502 hwoarang 1.34 # @FUNCTION: install_directories
503     # @USAGE: < directories >
504     # @DESCRIPTION:
505     # run emake install in the given directories, which are separated by spaces
506 caleb 1.1 install_directories() {
507 abcd 1.55 for x in "$@"; do
508 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
509     emake INSTALL_ROOT="${D}" install || die "emake install failed"
510     popd >/dev/null || die "Can't popd from ${S}/${x}"
511 caleb 1.1 done
512     }
513    
514 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
515     # @DESCRIPTION:
516     # List options that need to be added to QT_CONFIG in qconfig.pri
517 abcd 1.55 : ${QCONFIG_ADD:=}
518 ingmar 1.7
519     # @ECLASS-VARIABLE: QCONFIG_REMOVE
520     # @DESCRIPTION:
521     # List options that need to be removed from QT_CONFIG in qconfig.pri
522 abcd 1.55 : ${QCONFIG_REMOVE:=}
523 ingmar 1.7
524     # @ECLASS-VARIABLE: QCONFIG_DEFINE
525     # @DESCRIPTION:
526     # List variables that should be defined at the top of QtCore/qconfig.h
527 abcd 1.55 : ${QCONFIG_DEFINE:=}
528 ingmar 1.7
529 hwoarang 1.34 # @FUNCTION: install_qconfigs
530     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
531 ingmar 1.7 install_qconfigs() {
532 zlin 1.9 local x
533     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
534 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
535     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
536     done
537 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
538 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
539 zlin 1.9 fi
540 ingmar 1.7
541 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
542 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
543     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
544     done
545 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
546 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
547     fi
548     }
549    
550 hwoarang 1.34 # @FUNCTION: generate_qconfigs
551     # @DESCRIPTION: Generates gentoo-specific configurations
552 ingmar 1.7 generate_qconfigs() {
553     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
554     local x qconfig_add qconfig_remove qconfig_new
555     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
556     [[ -f ${x} ]] || continue
557 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
558     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
559 ingmar 1.7 done
560    
561     # these error checks do not use die because dying in pkg_post{inst,rm}
562     # just makes things worse.
563     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
564     # start with the qconfig.pri that qt-core installed
565     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
566     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
567     eerror "cp qconfig failed."
568     return 1
569     fi
570    
571     # generate list of QT_CONFIG entries from the existing list
572     # including qconfig_add and excluding qconfig_remove
573     for x in $(sed -n 's/^QT_CONFIG +=//p' \
574     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
575 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
576 ingmar 1.7 done
577    
578     # replace the existing QT_CONFIG list with qconfig_new
579     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
580     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
581     eerror "Sed for QT_CONFIG failed"
582     return 1
583     fi
584    
585     # create Gentoo/qconfig.h
586     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
587     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
588     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
589     return 1
590     fi
591     fi
592     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
593     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
594     [[ -f ${x} ]] || continue
595     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
596     done
597     else
598     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
599     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
600     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
601     "${ROOT}${QTDATADIR}" \
602     "${ROOT}${QTHEADERDIR}"/Gentoo \
603     "${ROOT}${QTHEADERDIR}" 2>/dev/null
604     fi
605     fi
606     }
607    
608 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
609     # @DESCRIPTION: Generate configurations when the package is completely removed
610 ingmar 1.7 qt4-build_pkg_postrm() {
611     generate_qconfigs
612 caleb 1.1 }
613    
614 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
615     # @DESCRIPTION: Generate configuration, plus throws a message about possible
616     # breakages and proposed solutions.
617 ingmar 1.7 qt4-build_pkg_postinst() {
618     generate_qconfigs
619 caleb 1.1 }
620    
621 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
622     # @DESCRIPTION:
623     # Don't need to build qmake, as it's already installed from qt-core
624 caleb 1.1 skip_qmake_build_patch() {
625 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
626     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
627 caleb 1.1 }
628    
629 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
630     # @DESCRIPTION:
631     # Exit the script early by throwing in an exit before all of the .pro files are scanned
632 caleb 1.1 skip_project_generation_patch() {
633     # Exit the script early by throwing in an exit before all of the .pro files are scanned
634 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
635     -i "${S}"/configure || die "Sed failed"
636 caleb 1.1 }
637    
638 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
639     # @DESCRIPTION:
640     # Symlink generated binaries to buildtree so they can be used during compilation
641     # time
642 ingmar 1.7 symlink_binaries_to_buildtree() {
643     for bin in qmake moc uic rcc; do
644     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
645     done
646 caleb 1.1 }
647    
648 hwoarang 1.34 # @FUNCTION: fix_library_files
649     # @DESCRIPTION:
650     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
651     # moves the *.pc-files into the pkgconfig directory
652 caleb 1.1 fix_library_files() {
653 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
654     if [[ -e ${libfile} ]]; then
655     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
656     fi
657     done
658 caleb 1.1
659     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
660 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
661     if [[ -e ${libfile} ]]; then
662     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
663 caleb 1.1
664 abcd 1.55 # Move .pc files into the pkgconfig directory
665 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
666 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
667     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
668     fi
669     done
670    
671     # Don't install an empty directory
672     rmdir "${D}"/${QTLIBDIR}/pkgconfig
673 caleb 1.1 }
674    
675 hwoarang 1.34 # @FUNCTION: qt_use
676     # @USAGE: < flag > [ feature ] [ enableval ]
677 yngwin 1.39 # @DESCRIPTION:
678 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
679     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
680     # will be used for that. If [enableval] is not specified, it omits the
681     # assignment-part
682 caleb 1.1 qt_use() {
683 abcd 1.55 local flag=$1
684     local feature=$1
685 caleb 1.5 local enableval=
686 caleb 1.1
687 abcd 1.55 [[ -n $2 ]] && feature=$2
688     [[ -n $3 ]] && enableval=-$3
689 ingmar 1.7
690     if use ${flag}; then
691     echo "${enableval}-${feature}"
692     else
693     echo "-no-${feature}"
694     fi
695     }
696    
697 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
698     # @RETURN: the specs-directory w/o path
699 yngwin 1.39 # @DESCRIPTION:
700 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
701 caleb 1.1 qt_mkspecs_dir() {
702 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
703     local spec
704 caleb 1.1
705 caleb 1.5 case ${CHOST} in
706     *-freebsd*|*-dragonfly*)
707 abcd 1.55 spec=freebsd ;;
708 caleb 1.5 *-openbsd*)
709 abcd 1.55 spec=openbsd ;;
710 caleb 1.5 *-netbsd*)
711 abcd 1.55 spec=netbsd ;;
712 ingmar 1.7 *-darwin*)
713 abcd 1.57 if use aqua; then
714     # mac with carbon/cocoa
715     spec=macx
716     else
717     # darwin/mac with x11
718     spec=darwin
719     fi
720     ;;
721     *-solaris*)
722     spec=solaris ;;
723 caleb 1.5 *-linux-*|*-linux)
724 abcd 1.55 spec=linux ;;
725 caleb 1.5 *)
726 ingmar 1.7 die "Unknown CHOST, no platform choosen."
727 caleb 1.5 esac
728    
729     CXX=$(tc-getCXX)
730 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
731     spec+=-g++
732     elif [[ ${CXX} == *icpc* ]]; then
733     spec+=-icc
734 caleb 1.5 else
735     die "Unknown compiler ${CXX}."
736     fi
737 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
738     spec+=-${LIBDIR/lib}
739 hwoarang 1.42 fi
740 caleb 1.1
741 abcd 1.57 # Add -64 for 64bit profiles
742     if use x64-freebsd ||
743     use amd64-linux ||
744     use x64-macos ||
745     use x64-solaris ||
746     use sparc64-solaris
747     then
748     spec+=-64
749     fi
750    
751 caleb 1.5 echo "${spec}"
752 caleb 1.1 }
753    
754 ayoy 1.76 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

  ViewVC Help
Powered by ViewVC 1.1.20