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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.74 - (hide annotations) (download)
Sun May 30 10:31:05 2010 UTC (4 years, 3 months ago) by spatz
Branch: MAIN
Changes since 1.73: +7 -5 lines
Fix sedding of $MAKE in qt 4.5, bug 321335 (again).

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