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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.92 - (hide annotations) (download)
Sat Aug 13 11:31:03 2011 UTC (2 years, 11 months ago) by hwoarang
Branch: MAIN
Changes since 1.91: +14 -2 lines
make eclass ready for 4.8.0_beta releases

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