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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.94 - (hide annotations) (download)
Mon Aug 29 01:28:10 2011 UTC (3 years, 3 months ago) by vapier
Branch: MAIN
Changes since 1.93: +4 -4 lines
trim useless trailing whitespace

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

  ViewVC Help
Powered by ViewVC 1.1.20