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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.71 - (hide annotations) (download)
Tue May 25 13:39:46 2010 UTC (4 years, 2 months ago) by spatz
Branch: MAIN
Changes since 1.70: +14 -13 lines
Improve -g{,gdb} check for qt-webkit to include test for -g{,gdb}[0-9].

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 spatz 1.71 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.70 2010/05/24 22:03:30 spatz 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 abcd 1.55 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
146 vapier 1.62 tar xzpf "${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     if [[ "${PV}" == "4.7.0_beta1" ]]; then
168     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     find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
219     xargs -0 \
220     sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):g" \
221     -i || die "sed test compilers failed"
222 wired 1.67
223 hwoarang 1.24 # Bug 172219
224 wired 1.67 sed -e "s:X11R6/::" \
225 ingmar 1.7 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
226    
227 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
228 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
229     # crippled (by design) :/
230     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
231     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
232     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
233     -e "s:-arch\s\w*::g" \
234     -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
235    
236     # Fix configure's -arch settings that appear in qmake/Makefile and also
237     # fix arch handling (automagically duplicates our -arch arg and breaks
238     # pch). Additionally disable Xarch support.
239     sed \
240     -e "s:-arch i386::" \
241     -e "s:-arch ppc::" \
242     -e "s:-arch x86_64::" \
243     -e "s:-arch ppc64::" \
244     -e "s:-arch \$i::" \
245     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
246     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
247     -e "s:-Xarch_x86_64::g" \
248     -e "s:-Xarch_ppc64::g" \
249     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
250    
251     # On Snow Leopard don't fall back to 10.5 deployment target.
252     if [[ ${CHOST} == *-apple-darwin10 ]] ; then
253     sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
254     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
255     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
256     fi
257     fi
258    
259     # this one is needed for all systems with a separate -liconv, apart from
260     # Darwin, for which the sources already cater for -liconv
261     if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
262     sed \
263     -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
264     -i config.tests/unix/iconv/iconv.pro \
265     || die "sed on iconv.pro failed"
266     fi
267    
268     # we need some patches for Solaris
269     sed -i \
270     -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
271     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
272     # use GCC over SunStudio
273     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
274     # don't flirt with non-Prefix stuff, we're quite possessive
275     sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
276     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
277 yngwin 1.39
278 hwoarang 1.37 base_src_prepare
279 ingmar 1.7 }
280    
281 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
282     # @DESCRIPTION:
283     # Default configure phase
284 yngwin 1.20 qt4-build_src_configure() {
285 hwoarang 1.42 setqtenv
286 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
287    
288 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
289     # Darwin, for which the sources already cater for -liconv
290     use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
291     myconf+=" -liconv"
292    
293     if has glib ${IUSE//+} && use glib; then
294     # use -I, -L and -l from configure
295     local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
296     # avoid the -pthread argument
297     myconf+=" ${glibflags//-pthread}"
298     unset glibflags
299     fi
300    
301     if use aqua ; then
302     # On (snow) leopard use the new (frameworked) cocoa code.
303 abcd 1.61 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
304 abcd 1.57 myconf+=" -cocoa -framework"
305    
306     # We are crazy and build cocoa + qt3support :-)
307     if use qt3support; then
308     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
309     -i configure
310     fi
311    
312     # We need the source's headers, not the installed ones.
313     myconf+=" -I${S}/include"
314    
315     # Add hint for the framework location.
316     myconf+=" -F${QTLIBDIR}"
317     fi
318     else
319     # freetype2 include dir is non-standard, thus include it on configure
320     # use -I from configure
321     myconf+=" $(pkg-config --cflags freetype2)"
322     fi
323    
324 ingmar 1.7 echo ./configure ${myconf}
325     ./configure ${myconf} || die "./configure failed"
326 tommy 1.43 myconf=""
327 yngwin 1.20 }
328 ingmar 1.7
329 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
330     # @DESCRIPTION: Actual compile phase
331 yngwin 1.20 qt4-build_src_compile() {
332 hwoarang 1.42 setqtenv
333 yngwin 1.20
334 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
335 caleb 1.1 }
336    
337 abcd 1.57 # @FUNCTION: fix_includes
338     # @DESCRIPTION:
339     # For MacOSX we need to add some symlinks when frameworks are
340     # being used, to avoid complications with some more or less stupid packages.
341     fix_includes() {
342 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
343 abcd 1.57 # Some packages tend to include <Qt/...>
344     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
345    
346     # Fake normal headers when frameworks are installed... eases life later on
347     local dest f
348     for frw in "${D}${QTLIBDIR}"/*.framework; do
349     [[ -e "${frw}"/Headers ]] || continue
350     f=$(basename ${frw})
351     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
352     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
353    
354     # Link normal headers as well.
355     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
356     h=$(basename ${hdr})
357     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
358     done
359     done
360     fi
361     }
362    
363 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
364     # @DESCRIPTION:
365     # Perform the actual installation including some library fixes.
366 caleb 1.4 qt4-build_src_install() {
367 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
368 hwoarang 1.42 setqtenv
369 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
370 ingmar 1.7 install_qconfigs
371 caleb 1.4 fix_library_files
372 abcd 1.57 fix_includes
373 caleb 1.4 }
374    
375 hwoarang 1.42 # @FUNCTION: setqtenv
376     setqtenv() {
377     # Set up installation directories
378 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
379     QTPREFIXDIR=${EPREFIX}/usr
380     QTBINDIR=${EPREFIX}/usr/bin
381     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
382 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
383 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
384     QTDATADIR=${EPREFIX}/usr/share/qt4
385     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
386     QTHEADERDIR=${EPREFIX}/usr/include/qt4
387 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
388 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
389 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
390     QTEXAMPLESDIR=${QTDATADIR}/examples
391     QTDEMOSDIR=${QTDATADIR}/demos
392 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
393 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
394    
395     unset QMAKESPEC
396     }
397    
398 hwoarang 1.34 # @FUNCTION: standard_configure_options
399     # @DESCRIPTION:
400     # Sets up some standard configure options, like libdir (if necessary), whether
401     # debug info is wanted or not.
402 caleb 1.1 standard_configure_options() {
403 abcd 1.55 local myconf=
404 caleb 1.1
405 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
406 caleb 1.1
407     # Disable visibility explicitly if gcc version isn't 4
408 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
409     myconf+=" -no-reduce-exports"
410 caleb 1.1 fi
411    
412 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
413 abcd 1.55 myconf+=" $(qt_use pch)"
414 ingmar 1.12
415 ingmar 1.7 if use debug; then
416 abcd 1.55 myconf+=" -debug"
417 ingmar 1.7 else
418 abcd 1.55 myconf+=" -release"
419 ingmar 1.7 fi
420 abcd 1.55 myconf+=" -no-separate-debug-info"
421 caleb 1.1
422 abcd 1.57 use aqua && myconf+=" -no-framework"
423    
424 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
425 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
426     case "$(tc-arch)" in
427 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
428     ppc-macos) myconf+=" -arch ppc" ;;
429     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
430     sparc|sparc-*) myconf+=" -arch sparc" ;;
431     x86-macos) myconf+=" -arch x86" ;;
432 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
433     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
434     hppa|sh) myconf+=" -arch generic" ;;
435 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
436 ingmar 1.11 esac
437    
438 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
439     # 4.6: exceptions USE flag
440     local exceptions="-exceptions"
441 wired 1.48 case "${PV}" in
442 wired 1.65 4.5.*)
443     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
444 wired 1.48 ;;
445     *)
446 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
447 wired 1.48 ;;
448     esac
449    
450 abcd 1.57 # note about -reduce-relocations:
451     # That flag seems to introduce major breakage to applications,
452     # mostly to be seen as a core dump with the message "QPixmap: Must
453     # construct a QApplication before a QPaintDevice" on Solaris
454     # -- Daniel Vergien
455     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
456    
457 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
458 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
459     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
460     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
461     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
462 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
463 wired 1.48 ${exceptions}
464 abcd 1.57 -nomake examples -nomake demos"
465 yngwin 1.39
466 caleb 1.1 echo "${myconf}"
467     }
468    
469 hwoarang 1.34 # @FUNCTION: build_directories
470     # @USAGE: < directories >
471     # @DESCRIPTION:
472     # Compiles the code in $QT4_TARGET_DIRECTORIES
473 caleb 1.1 build_directories() {
474 abcd 1.55 for x in "$@"; do
475 abcd 1.57 pushd "${S}"/${x} >/dev/null
476 abcd 1.60 # avoid running over the maximum argument number, bug #299810
477     {
478     echo "${S}"/mkspecs/common/*.conf
479     find "${S}" -name '*.pr[io]'
480     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
481 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
482 wired 1.67 emake CC="$(tc-getCC)" \
483     CXX="$(tc-getCXX)" \
484     LINK="$(tc-getCXX)" || die "emake failed"
485 abcd 1.57 popd >/dev/null
486 caleb 1.1 done
487     }
488    
489 hwoarang 1.34 # @FUNCTION: install_directories
490     # @USAGE: < directories >
491     # @DESCRIPTION:
492     # run emake install in the given directories, which are separated by spaces
493 caleb 1.1 install_directories() {
494 abcd 1.55 for x in "$@"; do
495 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
496     emake INSTALL_ROOT="${D}" install || die "emake install failed"
497     popd >/dev/null || die "Can't popd from ${S}/${x}"
498 caleb 1.1 done
499     }
500    
501 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
502     # @DESCRIPTION:
503     # List options that need to be added to QT_CONFIG in qconfig.pri
504 abcd 1.55 : ${QCONFIG_ADD:=}
505 ingmar 1.7
506     # @ECLASS-VARIABLE: QCONFIG_REMOVE
507     # @DESCRIPTION:
508     # List options that need to be removed from QT_CONFIG in qconfig.pri
509 abcd 1.55 : ${QCONFIG_REMOVE:=}
510 ingmar 1.7
511     # @ECLASS-VARIABLE: QCONFIG_DEFINE
512     # @DESCRIPTION:
513     # List variables that should be defined at the top of QtCore/qconfig.h
514 abcd 1.55 : ${QCONFIG_DEFINE:=}
515 ingmar 1.7
516 hwoarang 1.34 # @FUNCTION: install_qconfigs
517     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
518 ingmar 1.7 install_qconfigs() {
519 zlin 1.9 local x
520     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
521 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
522     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
523     done
524 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
525 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
526 zlin 1.9 fi
527 ingmar 1.7
528 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
529 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
530     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
531     done
532 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
533 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
534     fi
535     }
536    
537 hwoarang 1.34 # @FUNCTION: generate_qconfigs
538     # @DESCRIPTION: Generates gentoo-specific configurations
539 ingmar 1.7 generate_qconfigs() {
540     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
541     local x qconfig_add qconfig_remove qconfig_new
542     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
543     [[ -f ${x} ]] || continue
544 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
545     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
546 ingmar 1.7 done
547    
548     # these error checks do not use die because dying in pkg_post{inst,rm}
549     # just makes things worse.
550     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
551     # start with the qconfig.pri that qt-core installed
552     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
553     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
554     eerror "cp qconfig failed."
555     return 1
556     fi
557    
558     # generate list of QT_CONFIG entries from the existing list
559     # including qconfig_add and excluding qconfig_remove
560     for x in $(sed -n 's/^QT_CONFIG +=//p' \
561     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
562 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
563 ingmar 1.7 done
564    
565     # replace the existing QT_CONFIG list with qconfig_new
566     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
567     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
568     eerror "Sed for QT_CONFIG failed"
569     return 1
570     fi
571    
572     # create Gentoo/qconfig.h
573     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
574     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
575     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
576     return 1
577     fi
578     fi
579     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
580     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
581     [[ -f ${x} ]] || continue
582     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
583     done
584     else
585     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
586     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
587     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
588     "${ROOT}${QTDATADIR}" \
589     "${ROOT}${QTHEADERDIR}"/Gentoo \
590     "${ROOT}${QTHEADERDIR}" 2>/dev/null
591     fi
592     fi
593     }
594    
595 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
596     # @DESCRIPTION: Generate configurations when the package is completely removed
597 ingmar 1.7 qt4-build_pkg_postrm() {
598     generate_qconfigs
599 caleb 1.1 }
600    
601 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
602     # @DESCRIPTION: Generate configuration, plus throws a message about possible
603     # breakages and proposed solutions.
604 ingmar 1.7 qt4-build_pkg_postinst() {
605     generate_qconfigs
606 caleb 1.1 }
607    
608 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
609     # @DESCRIPTION:
610     # Don't need to build qmake, as it's already installed from qt-core
611 caleb 1.1 skip_qmake_build_patch() {
612 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
613     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
614 caleb 1.1 }
615    
616 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
617     # @DESCRIPTION:
618     # Exit the script early by throwing in an exit before all of the .pro files are scanned
619 caleb 1.1 skip_project_generation_patch() {
620     # Exit the script early by throwing in an exit before all of the .pro files are scanned
621 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
622     -i "${S}"/configure || die "Sed failed"
623 caleb 1.1 }
624    
625 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
626     # @DESCRIPTION:
627     # Symlink generated binaries to buildtree so they can be used during compilation
628     # time
629 ingmar 1.7 symlink_binaries_to_buildtree() {
630     for bin in qmake moc uic rcc; do
631     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
632     done
633 caleb 1.1 }
634    
635 hwoarang 1.34 # @FUNCTION: fix_library_files
636     # @DESCRIPTION:
637     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
638     # moves the *.pc-files into the pkgconfig directory
639 caleb 1.1 fix_library_files() {
640 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
641     if [[ -e ${libfile} ]]; then
642     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
643     fi
644     done
645 caleb 1.1
646     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
647 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
648     if [[ -e ${libfile} ]]; then
649     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
650 caleb 1.1
651 abcd 1.55 # Move .pc files into the pkgconfig directory
652 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
653 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
654     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
655     fi
656     done
657    
658     # Don't install an empty directory
659     rmdir "${D}"/${QTLIBDIR}/pkgconfig
660 caleb 1.1 }
661    
662 hwoarang 1.34 # @FUNCTION: qt_use
663     # @USAGE: < flag > [ feature ] [ enableval ]
664 yngwin 1.39 # @DESCRIPTION:
665 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
666     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
667     # will be used for that. If [enableval] is not specified, it omits the
668     # assignment-part
669 caleb 1.1 qt_use() {
670 abcd 1.55 local flag=$1
671     local feature=$1
672 caleb 1.5 local enableval=
673 caleb 1.1
674 abcd 1.55 [[ -n $2 ]] && feature=$2
675     [[ -n $3 ]] && enableval=-$3
676 ingmar 1.7
677     if use ${flag}; then
678     echo "${enableval}-${feature}"
679     else
680     echo "-no-${feature}"
681     fi
682     }
683    
684 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
685     # @RETURN: the specs-directory w/o path
686 yngwin 1.39 # @DESCRIPTION:
687 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
688 caleb 1.1 qt_mkspecs_dir() {
689 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
690     local spec
691 caleb 1.1
692 caleb 1.5 case ${CHOST} in
693     *-freebsd*|*-dragonfly*)
694 abcd 1.55 spec=freebsd ;;
695 caleb 1.5 *-openbsd*)
696 abcd 1.55 spec=openbsd ;;
697 caleb 1.5 *-netbsd*)
698 abcd 1.55 spec=netbsd ;;
699 ingmar 1.7 *-darwin*)
700 abcd 1.57 if use aqua; then
701     # mac with carbon/cocoa
702     spec=macx
703     else
704     # darwin/mac with x11
705     spec=darwin
706     fi
707     ;;
708     *-solaris*)
709     spec=solaris ;;
710 caleb 1.5 *-linux-*|*-linux)
711 abcd 1.55 spec=linux ;;
712 caleb 1.5 *)
713 ingmar 1.7 die "Unknown CHOST, no platform choosen."
714 caleb 1.5 esac
715    
716     CXX=$(tc-getCXX)
717 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
718     spec+=-g++
719     elif [[ ${CXX} == *icpc* ]]; then
720     spec+=-icc
721 caleb 1.5 else
722     die "Unknown compiler ${CXX}."
723     fi
724 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
725     spec+=-${LIBDIR/lib}
726 hwoarang 1.42 fi
727 caleb 1.1
728 abcd 1.57 # Add -64 for 64bit profiles
729     if use x64-freebsd ||
730     use amd64-linux ||
731     use x64-macos ||
732     use x64-solaris ||
733     use sparc64-solaris
734     then
735     spec+=-64
736     fi
737    
738 caleb 1.5 echo "${spec}"
739 caleb 1.1 }
740    
741 abcd 1.55 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst

  ViewVC Help
Powered by ViewVC 1.1.20