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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.75 - (hide annotations) (download)
Sat Jul 3 09:10:55 2010 UTC (4 years, 2 months ago) by hwoarang
Branch: MAIN
Changes since 1.74: +3 -1 lines
Strip CFLAGS from qmake wrt bug #312689

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 hwoarang 1.75 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.74 2010/05/30 10:31:05 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 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 abcd 1.57 # @FUNCTION: fix_includes
342     # @DESCRIPTION:
343     # For MacOSX we need to add some symlinks when frameworks are
344     # being used, to avoid complications with some more or less stupid packages.
345     fix_includes() {
346 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
347 abcd 1.57 # Some packages tend to include <Qt/...>
348     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
349    
350     # Fake normal headers when frameworks are installed... eases life later on
351     local dest f
352     for frw in "${D}${QTLIBDIR}"/*.framework; do
353     [[ -e "${frw}"/Headers ]] || continue
354     f=$(basename ${frw})
355     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
356     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
357    
358     # Link normal headers as well.
359     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
360     h=$(basename ${hdr})
361     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
362     done
363     done
364     fi
365     }
366    
367 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
368     # @DESCRIPTION:
369     # Perform the actual installation including some library fixes.
370 caleb 1.4 qt4-build_src_install() {
371 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
372 hwoarang 1.42 setqtenv
373 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
374 ingmar 1.7 install_qconfigs
375 caleb 1.4 fix_library_files
376 abcd 1.57 fix_includes
377 caleb 1.4 }
378    
379 hwoarang 1.42 # @FUNCTION: setqtenv
380     setqtenv() {
381     # Set up installation directories
382 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
383     QTPREFIXDIR=${EPREFIX}/usr
384     QTBINDIR=${EPREFIX}/usr/bin
385     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
386 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
387 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
388     QTDATADIR=${EPREFIX}/usr/share/qt4
389     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
390     QTHEADERDIR=${EPREFIX}/usr/include/qt4
391 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
392 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
393 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
394     QTEXAMPLESDIR=${QTDATADIR}/examples
395     QTDEMOSDIR=${QTDATADIR}/demos
396 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
397 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
398    
399     unset QMAKESPEC
400     }
401    
402 hwoarang 1.34 # @FUNCTION: standard_configure_options
403     # @DESCRIPTION:
404     # Sets up some standard configure options, like libdir (if necessary), whether
405     # debug info is wanted or not.
406 caleb 1.1 standard_configure_options() {
407 abcd 1.55 local myconf=
408 caleb 1.1
409 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
410 caleb 1.1
411     # Disable visibility explicitly if gcc version isn't 4
412 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
413     myconf+=" -no-reduce-exports"
414 caleb 1.1 fi
415    
416 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
417 abcd 1.55 myconf+=" $(qt_use pch)"
418 ingmar 1.12
419 ingmar 1.7 if use debug; then
420 abcd 1.55 myconf+=" -debug"
421 ingmar 1.7 else
422 abcd 1.55 myconf+=" -release"
423 ingmar 1.7 fi
424 abcd 1.55 myconf+=" -no-separate-debug-info"
425 caleb 1.1
426 abcd 1.57 use aqua && myconf+=" -no-framework"
427    
428 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
429 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
430     case "$(tc-arch)" in
431 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
432     ppc-macos) myconf+=" -arch ppc" ;;
433     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
434     sparc|sparc-*) myconf+=" -arch sparc" ;;
435     x86-macos) myconf+=" -arch x86" ;;
436 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
437     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
438     hppa|sh) myconf+=" -arch generic" ;;
439 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
440 ingmar 1.11 esac
441    
442 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
443     # 4.6: exceptions USE flag
444     local exceptions="-exceptions"
445 wired 1.48 case "${PV}" in
446 wired 1.65 4.5.*)
447     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
448 wired 1.48 ;;
449     *)
450 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
451 wired 1.48 ;;
452     esac
453    
454 abcd 1.57 # note about -reduce-relocations:
455     # That flag seems to introduce major breakage to applications,
456     # mostly to be seen as a core dump with the message "QPixmap: Must
457     # construct a QApplication before a QPaintDevice" on Solaris
458     # -- Daniel Vergien
459     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
460    
461 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
462 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
463     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
464     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
465     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
466 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
467 wired 1.48 ${exceptions}
468 abcd 1.57 -nomake examples -nomake demos"
469 yngwin 1.39
470 caleb 1.1 echo "${myconf}"
471     }
472    
473 hwoarang 1.34 # @FUNCTION: build_directories
474     # @USAGE: < directories >
475     # @DESCRIPTION:
476     # Compiles the code in $QT4_TARGET_DIRECTORIES
477 caleb 1.1 build_directories() {
478 abcd 1.55 for x in "$@"; do
479 abcd 1.57 pushd "${S}"/${x} >/dev/null
480 abcd 1.60 # avoid running over the maximum argument number, bug #299810
481     {
482     echo "${S}"/mkspecs/common/*.conf
483     find "${S}" -name '*.pr[io]'
484     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
485 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
486 wired 1.67 emake CC="$(tc-getCC)" \
487     CXX="$(tc-getCXX)" \
488     LINK="$(tc-getCXX)" || die "emake failed"
489 abcd 1.57 popd >/dev/null
490 caleb 1.1 done
491     }
492    
493 hwoarang 1.34 # @FUNCTION: install_directories
494     # @USAGE: < directories >
495     # @DESCRIPTION:
496     # run emake install in the given directories, which are separated by spaces
497 caleb 1.1 install_directories() {
498 abcd 1.55 for x in "$@"; do
499 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
500     emake INSTALL_ROOT="${D}" install || die "emake install failed"
501     popd >/dev/null || die "Can't popd from ${S}/${x}"
502 caleb 1.1 done
503     }
504    
505 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
506     # @DESCRIPTION:
507     # List options that need to be added to QT_CONFIG in qconfig.pri
508 abcd 1.55 : ${QCONFIG_ADD:=}
509 ingmar 1.7
510     # @ECLASS-VARIABLE: QCONFIG_REMOVE
511     # @DESCRIPTION:
512     # List options that need to be removed from QT_CONFIG in qconfig.pri
513 abcd 1.55 : ${QCONFIG_REMOVE:=}
514 ingmar 1.7
515     # @ECLASS-VARIABLE: QCONFIG_DEFINE
516     # @DESCRIPTION:
517     # List variables that should be defined at the top of QtCore/qconfig.h
518 abcd 1.55 : ${QCONFIG_DEFINE:=}
519 ingmar 1.7
520 hwoarang 1.34 # @FUNCTION: install_qconfigs
521     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
522 ingmar 1.7 install_qconfigs() {
523 zlin 1.9 local x
524     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
525 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
526     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
527     done
528 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
529 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
530 zlin 1.9 fi
531 ingmar 1.7
532 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
533 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
534     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
535     done
536 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
537 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
538     fi
539     }
540    
541 hwoarang 1.34 # @FUNCTION: generate_qconfigs
542     # @DESCRIPTION: Generates gentoo-specific configurations
543 ingmar 1.7 generate_qconfigs() {
544     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
545     local x qconfig_add qconfig_remove qconfig_new
546     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
547     [[ -f ${x} ]] || continue
548 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
549     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
550 ingmar 1.7 done
551    
552     # these error checks do not use die because dying in pkg_post{inst,rm}
553     # just makes things worse.
554     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
555     # start with the qconfig.pri that qt-core installed
556     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
557     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
558     eerror "cp qconfig failed."
559     return 1
560     fi
561    
562     # generate list of QT_CONFIG entries from the existing list
563     # including qconfig_add and excluding qconfig_remove
564     for x in $(sed -n 's/^QT_CONFIG +=//p' \
565     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
566 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
567 ingmar 1.7 done
568    
569     # replace the existing QT_CONFIG list with qconfig_new
570     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
571     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
572     eerror "Sed for QT_CONFIG failed"
573     return 1
574     fi
575    
576     # create Gentoo/qconfig.h
577     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
578     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
579     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
580     return 1
581     fi
582     fi
583     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
584     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
585     [[ -f ${x} ]] || continue
586     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
587     done
588     else
589     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
590     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
591     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
592     "${ROOT}${QTDATADIR}" \
593     "${ROOT}${QTHEADERDIR}"/Gentoo \
594     "${ROOT}${QTHEADERDIR}" 2>/dev/null
595     fi
596     fi
597     }
598    
599 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
600     # @DESCRIPTION: Generate configurations when the package is completely removed
601 ingmar 1.7 qt4-build_pkg_postrm() {
602     generate_qconfigs
603 caleb 1.1 }
604    
605 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
606     # @DESCRIPTION: Generate configuration, plus throws a message about possible
607     # breakages and proposed solutions.
608 ingmar 1.7 qt4-build_pkg_postinst() {
609     generate_qconfigs
610 caleb 1.1 }
611    
612 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
613     # @DESCRIPTION:
614     # Don't need to build qmake, as it's already installed from qt-core
615 caleb 1.1 skip_qmake_build_patch() {
616 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
617     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
618 caleb 1.1 }
619    
620 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
621     # @DESCRIPTION:
622     # Exit the script early by throwing in an exit before all of the .pro files are scanned
623 caleb 1.1 skip_project_generation_patch() {
624     # Exit the script early by throwing in an exit before all of the .pro files are scanned
625 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
626     -i "${S}"/configure || die "Sed failed"
627 caleb 1.1 }
628    
629 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
630     # @DESCRIPTION:
631     # Symlink generated binaries to buildtree so they can be used during compilation
632     # time
633 ingmar 1.7 symlink_binaries_to_buildtree() {
634     for bin in qmake moc uic rcc; do
635     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
636     done
637 caleb 1.1 }
638    
639 hwoarang 1.34 # @FUNCTION: fix_library_files
640     # @DESCRIPTION:
641     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
642     # moves the *.pc-files into the pkgconfig directory
643 caleb 1.1 fix_library_files() {
644 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
645     if [[ -e ${libfile} ]]; then
646     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
647     fi
648     done
649 caleb 1.1
650     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
651 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
652     if [[ -e ${libfile} ]]; then
653     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
654 caleb 1.1
655 abcd 1.55 # Move .pc files into the pkgconfig directory
656 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
657 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
658     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
659     fi
660     done
661    
662     # Don't install an empty directory
663     rmdir "${D}"/${QTLIBDIR}/pkgconfig
664 caleb 1.1 }
665    
666 hwoarang 1.34 # @FUNCTION: qt_use
667     # @USAGE: < flag > [ feature ] [ enableval ]
668 yngwin 1.39 # @DESCRIPTION:
669 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
670     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
671     # will be used for that. If [enableval] is not specified, it omits the
672     # assignment-part
673 caleb 1.1 qt_use() {
674 abcd 1.55 local flag=$1
675     local feature=$1
676 caleb 1.5 local enableval=
677 caleb 1.1
678 abcd 1.55 [[ -n $2 ]] && feature=$2
679     [[ -n $3 ]] && enableval=-$3
680 ingmar 1.7
681     if use ${flag}; then
682     echo "${enableval}-${feature}"
683     else
684     echo "-no-${feature}"
685     fi
686     }
687    
688 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
689     # @RETURN: the specs-directory w/o path
690 yngwin 1.39 # @DESCRIPTION:
691 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
692 caleb 1.1 qt_mkspecs_dir() {
693 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
694     local spec
695 caleb 1.1
696 caleb 1.5 case ${CHOST} in
697     *-freebsd*|*-dragonfly*)
698 abcd 1.55 spec=freebsd ;;
699 caleb 1.5 *-openbsd*)
700 abcd 1.55 spec=openbsd ;;
701 caleb 1.5 *-netbsd*)
702 abcd 1.55 spec=netbsd ;;
703 ingmar 1.7 *-darwin*)
704 abcd 1.57 if use aqua; then
705     # mac with carbon/cocoa
706     spec=macx
707     else
708     # darwin/mac with x11
709     spec=darwin
710     fi
711     ;;
712     *-solaris*)
713     spec=solaris ;;
714 caleb 1.5 *-linux-*|*-linux)
715 abcd 1.55 spec=linux ;;
716 caleb 1.5 *)
717 ingmar 1.7 die "Unknown CHOST, no platform choosen."
718 caleb 1.5 esac
719    
720     CXX=$(tc-getCXX)
721 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
722     spec+=-g++
723     elif [[ ${CXX} == *icpc* ]]; then
724     spec+=-icc
725 caleb 1.5 else
726     die "Unknown compiler ${CXX}."
727     fi
728 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
729     spec+=-${LIBDIR/lib}
730 hwoarang 1.42 fi
731 caleb 1.1
732 abcd 1.57 # Add -64 for 64bit profiles
733     if use x64-freebsd ||
734     use amd64-linux ||
735     use x64-macos ||
736     use x64-solaris ||
737     use sparc64-solaris
738     then
739     spec+=-64
740     fi
741    
742 caleb 1.5 echo "${spec}"
743 caleb 1.1 }
744    
745 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