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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.70 - (hide annotations) (download)
Mon May 24 22:03:30 2010 UTC (4 years, 3 months ago) by spatz
Branch: MAIN
Changes since 1.69: +6 -3 lines
Fix CC, CXX, LD and LINK in all test files, bug 321335.

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