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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.82 - (hide annotations) (download)
Sat Aug 14 18:09:10 2010 UTC (4 years, 1 month ago) by hwoarang
Branch: MAIN
Changes since 1.81: +2 -2 lines
Typo

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.82 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.81 2010/08/14 18:00:38 hwoarang 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 hwoarang 1.80 if is-flagq '-g?(gdb)?([1-9])'; then
87 spatz 1.71 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 hwoarang 1.77
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 hwoarang 1.77 # fix libx11 dependency on non X packages
173     if version_is_at_least "4.7.0_beta2"; then
174     local NOLIBX11PKG="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
175     hasq ${PN} ${NOLIBX11PKG} && qt_nolibx11
176     [[ ${PN} == "qt-assistant" ]] && qt_assistant_cleanup
177     fi
178 wired 1.69
179 abcd 1.57 if use aqua; then
180     # provide a proper macx-g++-64
181     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
182    
183     sed -e '/^CONFIG/s:app_bundle::' \
184     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
185     -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
186     fi
187    
188 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
189     skip_qmake_build_patch
190     skip_project_generation_patch
191     symlink_binaries_to_buildtree
192     fi
193 hwoarang 1.24
194 abcd 1.57 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
195     # qmake bus errors with -O2 but -O3 works
196     replace-flags -O2 -O3
197     fi
198    
199 armin76 1.79 if [[ ${CHOST} == arm* ]] ; then
200     # Fails on arm with -Os, bug 331641
201     # This can be removed once qt-4.7 is stable or the bug on gcc is fixed
202     replace-flags -Os -O2
203     fi
204    
205 hwoarang 1.21 # Bug 178652
206 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
207 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
208     append-flags -fno-gcse
209 gengor 1.18 fi
210    
211 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
212 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
213 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
214     append-cxxflags -fno-stack-protector
215     # Bug 253127
216 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
217     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
218     fi
219    
220 ayoy 1.49 # Bug 261632
221     if use ppc64; then
222     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
223     append-flags -mminimal-toc
224     fi
225    
226 wired 1.67 # Bug 282984 && Bug 295530
227 hwoarang 1.81 sed -e "s:\(^SYSTEM_VARIABLES\):CC="$(tc-getCC)"\nCXX="$(tc-getCXX)"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
228 wired 1.67 -i configure || die "sed qmake compilers failed"
229 spatz 1.70 # bug 321335
230 spatz 1.74 if version_is_at_least 4.6; then
231     find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \
232     xargs -0 \
233 hwoarang 1.82 sed -e "s:\(\$MAKE\):\1 CC="$(tc-getCC)" CXX="$(tc-getCXX)" LD="$(tc-getCXX)" LINK="$(tc-getCXX)":g" \
234 spatz 1.74 -i || die "sed test compilers failed"
235     fi
236 wired 1.67
237 hwoarang 1.24 # Bug 172219
238 wired 1.67 sed -e "s:X11R6/::" \
239 ingmar 1.7 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
240    
241 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
242 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
243     # crippled (by design) :/
244     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
245     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
246     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
247     -e "s:-arch\s\w*::g" \
248     -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
249    
250     # Fix configure's -arch settings that appear in qmake/Makefile and also
251     # fix arch handling (automagically duplicates our -arch arg and breaks
252     # pch). Additionally disable Xarch support.
253     sed \
254     -e "s:-arch i386::" \
255     -e "s:-arch ppc::" \
256     -e "s:-arch x86_64::" \
257     -e "s:-arch ppc64::" \
258     -e "s:-arch \$i::" \
259     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
260     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
261     -e "s:-Xarch_x86_64::g" \
262     -e "s:-Xarch_ppc64::g" \
263     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
264    
265     # On Snow Leopard don't fall back to 10.5 deployment target.
266     if [[ ${CHOST} == *-apple-darwin10 ]] ; then
267     sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
268     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
269     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
270     fi
271     fi
272    
273     # this one is needed for all systems with a separate -liconv, apart from
274     # Darwin, for which the sources already cater for -liconv
275     if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
276     sed \
277     -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
278     -i config.tests/unix/iconv/iconv.pro \
279     || die "sed on iconv.pro failed"
280     fi
281    
282     # we need some patches for Solaris
283     sed -i \
284     -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
285     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
286     # use GCC over SunStudio
287     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
288     # don't flirt with non-Prefix stuff, we're quite possessive
289     sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
290     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
291 hwoarang 1.75 # strip predefined CFLAGS from qmake ( bug #312689 )
292     sed -i '/^QMAKE_CFLAGS_\(RELEASE\|DEBUG\)/s:+=.*:+=:' mkspecs/common/g++.conf
293 yngwin 1.39
294 hwoarang 1.37 base_src_prepare
295 ingmar 1.7 }
296    
297 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
298     # @DESCRIPTION:
299     # Default configure phase
300 yngwin 1.20 qt4-build_src_configure() {
301 hwoarang 1.42 setqtenv
302 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
303    
304 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
305     # Darwin, for which the sources already cater for -liconv
306     use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
307     myconf+=" -liconv"
308    
309     if has glib ${IUSE//+} && use glib; then
310     # use -I, -L and -l from configure
311     local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
312     # avoid the -pthread argument
313     myconf+=" ${glibflags//-pthread}"
314     unset glibflags
315     fi
316    
317     if use aqua ; then
318     # On (snow) leopard use the new (frameworked) cocoa code.
319 abcd 1.61 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
320 abcd 1.57 myconf+=" -cocoa -framework"
321    
322     # We are crazy and build cocoa + qt3support :-)
323     if use qt3support; then
324     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
325     -i configure
326     fi
327    
328     # We need the source's headers, not the installed ones.
329     myconf+=" -I${S}/include"
330    
331     # Add hint for the framework location.
332     myconf+=" -F${QTLIBDIR}"
333     fi
334     else
335     # freetype2 include dir is non-standard, thus include it on configure
336     # use -I from configure
337     myconf+=" $(pkg-config --cflags freetype2)"
338     fi
339    
340 ingmar 1.7 echo ./configure ${myconf}
341     ./configure ${myconf} || die "./configure failed"
342 tommy 1.43 myconf=""
343 yngwin 1.20 }
344 ingmar 1.7
345 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
346     # @DESCRIPTION: Actual compile phase
347 yngwin 1.20 qt4-build_src_compile() {
348 hwoarang 1.42 setqtenv
349 yngwin 1.20
350 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
351 caleb 1.1 }
352    
353 ayoy 1.76 # @FUNCTION: qt4-build_src_test
354     # @DESCRIPTION:
355     # Runs tests only in target directories.
356     qt4-build_src_test() {
357     for dir in ${QT4_TARGET_DIRECTORIES}; do
358     emake -j1 check -C ${dir}
359     done
360     }
361    
362 abcd 1.57 # @FUNCTION: fix_includes
363     # @DESCRIPTION:
364     # For MacOSX we need to add some symlinks when frameworks are
365     # being used, to avoid complications with some more or less stupid packages.
366     fix_includes() {
367 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
368 abcd 1.57 # Some packages tend to include <Qt/...>
369     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
370    
371     # Fake normal headers when frameworks are installed... eases life later on
372     local dest f
373     for frw in "${D}${QTLIBDIR}"/*.framework; do
374     [[ -e "${frw}"/Headers ]] || continue
375     f=$(basename ${frw})
376     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
377     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
378    
379     # Link normal headers as well.
380     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
381     h=$(basename ${hdr})
382     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
383     done
384     done
385     fi
386     }
387    
388 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
389     # @DESCRIPTION:
390     # Perform the actual installation including some library fixes.
391 caleb 1.4 qt4-build_src_install() {
392 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
393 hwoarang 1.42 setqtenv
394 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
395 ingmar 1.7 install_qconfigs
396 caleb 1.4 fix_library_files
397 abcd 1.57 fix_includes
398 hwoarang 1.78 # remove .la files since we are building only shared Qt libraries
399     find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
400 caleb 1.4 }
401    
402 hwoarang 1.42 # @FUNCTION: setqtenv
403     setqtenv() {
404     # Set up installation directories
405 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
406     QTPREFIXDIR=${EPREFIX}/usr
407     QTBINDIR=${EPREFIX}/usr/bin
408     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
409 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
410 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
411     QTDATADIR=${EPREFIX}/usr/share/qt4
412     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
413     QTHEADERDIR=${EPREFIX}/usr/include/qt4
414 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
415 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
416 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
417     QTEXAMPLESDIR=${QTDATADIR}/examples
418     QTDEMOSDIR=${QTDATADIR}/demos
419 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
420 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
421    
422     unset QMAKESPEC
423     }
424    
425 hwoarang 1.34 # @FUNCTION: standard_configure_options
426     # @DESCRIPTION:
427     # Sets up some standard configure options, like libdir (if necessary), whether
428     # debug info is wanted or not.
429 caleb 1.1 standard_configure_options() {
430 abcd 1.55 local myconf=
431 caleb 1.1
432 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
433 caleb 1.1
434     # Disable visibility explicitly if gcc version isn't 4
435 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
436     myconf+=" -no-reduce-exports"
437 caleb 1.1 fi
438    
439 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
440 abcd 1.55 myconf+=" $(qt_use pch)"
441 ingmar 1.12
442 ingmar 1.7 if use debug; then
443 abcd 1.55 myconf+=" -debug"
444 ingmar 1.7 else
445 abcd 1.55 myconf+=" -release"
446 ingmar 1.7 fi
447 abcd 1.55 myconf+=" -no-separate-debug-info"
448 caleb 1.1
449 abcd 1.57 use aqua && myconf+=" -no-framework"
450    
451 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
452 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
453     case "$(tc-arch)" in
454 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
455     ppc-macos) myconf+=" -arch ppc" ;;
456     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
457     sparc|sparc-*) myconf+=" -arch sparc" ;;
458     x86-macos) myconf+=" -arch x86" ;;
459 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
460     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
461     hppa|sh) myconf+=" -arch generic" ;;
462 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
463 ingmar 1.11 esac
464    
465 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
466     # 4.6: exceptions USE flag
467     local exceptions="-exceptions"
468 wired 1.48 case "${PV}" in
469 wired 1.65 4.5.*)
470     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
471 wired 1.48 ;;
472     *)
473 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
474 wired 1.48 ;;
475     esac
476    
477 abcd 1.57 # note about -reduce-relocations:
478     # That flag seems to introduce major breakage to applications,
479     # mostly to be seen as a core dump with the message "QPixmap: Must
480     # construct a QApplication before a QPaintDevice" on Solaris
481     # -- Daniel Vergien
482     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
483    
484 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
485 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
486     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
487     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
488     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
489 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
490 wired 1.48 ${exceptions}
491 abcd 1.57 -nomake examples -nomake demos"
492 yngwin 1.39
493 caleb 1.1 echo "${myconf}"
494     }
495    
496 hwoarang 1.34 # @FUNCTION: build_directories
497     # @USAGE: < directories >
498     # @DESCRIPTION:
499     # Compiles the code in $QT4_TARGET_DIRECTORIES
500 caleb 1.1 build_directories() {
501 abcd 1.55 for x in "$@"; do
502 abcd 1.57 pushd "${S}"/${x} >/dev/null
503 abcd 1.60 # avoid running over the maximum argument number, bug #299810
504     {
505     echo "${S}"/mkspecs/common/*.conf
506     find "${S}" -name '*.pr[io]'
507     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
508 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
509 wired 1.67 emake CC="$(tc-getCC)" \
510     CXX="$(tc-getCXX)" \
511     LINK="$(tc-getCXX)" || die "emake failed"
512 abcd 1.57 popd >/dev/null
513 caleb 1.1 done
514     }
515    
516 hwoarang 1.34 # @FUNCTION: install_directories
517     # @USAGE: < directories >
518     # @DESCRIPTION:
519     # run emake install in the given directories, which are separated by spaces
520 caleb 1.1 install_directories() {
521 abcd 1.55 for x in "$@"; do
522 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
523     emake INSTALL_ROOT="${D}" install || die "emake install failed"
524     popd >/dev/null || die "Can't popd from ${S}/${x}"
525 caleb 1.1 done
526     }
527    
528 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
529     # @DESCRIPTION:
530     # List options that need to be added to QT_CONFIG in qconfig.pri
531 abcd 1.55 : ${QCONFIG_ADD:=}
532 ingmar 1.7
533     # @ECLASS-VARIABLE: QCONFIG_REMOVE
534     # @DESCRIPTION:
535     # List options that need to be removed from QT_CONFIG in qconfig.pri
536 abcd 1.55 : ${QCONFIG_REMOVE:=}
537 ingmar 1.7
538     # @ECLASS-VARIABLE: QCONFIG_DEFINE
539     # @DESCRIPTION:
540     # List variables that should be defined at the top of QtCore/qconfig.h
541 abcd 1.55 : ${QCONFIG_DEFINE:=}
542 ingmar 1.7
543 hwoarang 1.34 # @FUNCTION: install_qconfigs
544     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
545 ingmar 1.7 install_qconfigs() {
546 zlin 1.9 local x
547     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
548 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
549     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
550     done
551 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
552 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
553 zlin 1.9 fi
554 ingmar 1.7
555 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
556 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
557     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
558     done
559 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
560 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
561     fi
562     }
563    
564 hwoarang 1.34 # @FUNCTION: generate_qconfigs
565     # @DESCRIPTION: Generates gentoo-specific configurations
566 ingmar 1.7 generate_qconfigs() {
567     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
568     local x qconfig_add qconfig_remove qconfig_new
569     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
570     [[ -f ${x} ]] || continue
571 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
572     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
573 ingmar 1.7 done
574    
575     # these error checks do not use die because dying in pkg_post{inst,rm}
576     # just makes things worse.
577     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
578     # start with the qconfig.pri that qt-core installed
579     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
580     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
581     eerror "cp qconfig failed."
582     return 1
583     fi
584    
585     # generate list of QT_CONFIG entries from the existing list
586     # including qconfig_add and excluding qconfig_remove
587     for x in $(sed -n 's/^QT_CONFIG +=//p' \
588     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
589 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
590 ingmar 1.7 done
591    
592     # replace the existing QT_CONFIG list with qconfig_new
593     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
594     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
595     eerror "Sed for QT_CONFIG failed"
596     return 1
597     fi
598    
599     # create Gentoo/qconfig.h
600     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
601     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
602     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
603     return 1
604     fi
605     fi
606     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
607     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
608     [[ -f ${x} ]] || continue
609     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
610     done
611     else
612     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
613     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
614     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
615     "${ROOT}${QTDATADIR}" \
616     "${ROOT}${QTHEADERDIR}"/Gentoo \
617     "${ROOT}${QTHEADERDIR}" 2>/dev/null
618     fi
619     fi
620     }
621    
622 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
623     # @DESCRIPTION: Generate configurations when the package is completely removed
624 ingmar 1.7 qt4-build_pkg_postrm() {
625     generate_qconfigs
626 caleb 1.1 }
627    
628 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
629     # @DESCRIPTION: Generate configuration, plus throws a message about possible
630     # breakages and proposed solutions.
631 ingmar 1.7 qt4-build_pkg_postinst() {
632     generate_qconfigs
633 caleb 1.1 }
634    
635 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
636     # @DESCRIPTION:
637     # Don't need to build qmake, as it's already installed from qt-core
638 caleb 1.1 skip_qmake_build_patch() {
639 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
640     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
641 caleb 1.1 }
642    
643 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
644     # @DESCRIPTION:
645     # Exit the script early by throwing in an exit before all of the .pro files are scanned
646 caleb 1.1 skip_project_generation_patch() {
647     # Exit the script early by throwing in an exit before all of the .pro files are scanned
648 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
649     -i "${S}"/configure || die "Sed failed"
650 caleb 1.1 }
651    
652 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
653     # @DESCRIPTION:
654     # Symlink generated binaries to buildtree so they can be used during compilation
655     # time
656 ingmar 1.7 symlink_binaries_to_buildtree() {
657     for bin in qmake moc uic rcc; do
658     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
659     done
660 caleb 1.1 }
661    
662 hwoarang 1.34 # @FUNCTION: fix_library_files
663     # @DESCRIPTION:
664     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
665     # moves the *.pc-files into the pkgconfig directory
666 caleb 1.1 fix_library_files() {
667 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
668     if [[ -e ${libfile} ]]; then
669     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
670     fi
671     done
672 caleb 1.1
673     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
674 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
675     if [[ -e ${libfile} ]]; then
676     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
677 caleb 1.1
678 abcd 1.55 # Move .pc files into the pkgconfig directory
679 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
680 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
681     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
682     fi
683     done
684    
685     # Don't install an empty directory
686     rmdir "${D}"/${QTLIBDIR}/pkgconfig
687 caleb 1.1 }
688    
689 hwoarang 1.34 # @FUNCTION: qt_use
690     # @USAGE: < flag > [ feature ] [ enableval ]
691 yngwin 1.39 # @DESCRIPTION:
692 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
693     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
694     # will be used for that. If [enableval] is not specified, it omits the
695     # assignment-part
696 caleb 1.1 qt_use() {
697 abcd 1.55 local flag=$1
698     local feature=$1
699 caleb 1.5 local enableval=
700 caleb 1.1
701 abcd 1.55 [[ -n $2 ]] && feature=$2
702     [[ -n $3 ]] && enableval=-$3
703 ingmar 1.7
704     if use ${flag}; then
705     echo "${enableval}-${feature}"
706     else
707     echo "-no-${feature}"
708     fi
709     }
710    
711 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
712     # @RETURN: the specs-directory w/o path
713 yngwin 1.39 # @DESCRIPTION:
714 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
715 caleb 1.1 qt_mkspecs_dir() {
716 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
717     local spec
718 caleb 1.1
719 caleb 1.5 case ${CHOST} in
720     *-freebsd*|*-dragonfly*)
721 abcd 1.55 spec=freebsd ;;
722 caleb 1.5 *-openbsd*)
723 abcd 1.55 spec=openbsd ;;
724 caleb 1.5 *-netbsd*)
725 abcd 1.55 spec=netbsd ;;
726 ingmar 1.7 *-darwin*)
727 abcd 1.57 if use aqua; then
728     # mac with carbon/cocoa
729     spec=macx
730     else
731     # darwin/mac with x11
732     spec=darwin
733     fi
734     ;;
735     *-solaris*)
736     spec=solaris ;;
737 caleb 1.5 *-linux-*|*-linux)
738 abcd 1.55 spec=linux ;;
739 caleb 1.5 *)
740 ingmar 1.7 die "Unknown CHOST, no platform choosen."
741 caleb 1.5 esac
742    
743     CXX=$(tc-getCXX)
744 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
745     spec+=-g++
746     elif [[ ${CXX} == *icpc* ]]; then
747     spec+=-icc
748 caleb 1.5 else
749     die "Unknown compiler ${CXX}."
750     fi
751 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
752     spec+=-${LIBDIR/lib}
753 hwoarang 1.42 fi
754 caleb 1.1
755 abcd 1.57 # Add -64 for 64bit profiles
756     if use x64-freebsd ||
757     use amd64-linux ||
758     use x64-macos ||
759     use x64-solaris ||
760     use sparc64-solaris
761     then
762     spec+=-64
763     fi
764    
765 caleb 1.5 echo "${spec}"
766 caleb 1.1 }
767    
768 hwoarang 1.77 # @FUNCTION: qt_assistant_cleanup
769     # @RETURN: nothing
770     # @DESCRIPTION:
771     # Tries to clean up tools.pro for qt-assistant ebuilds
772     # Meant to be called in src_prepare
773     qt_assistant_cleanup() {
774     # different versions (and branches...) may need different handling,
775     # add a case if you need special handling
776     case "${MY_PV_EXTRA}" in
777     *kde-qt*)
778     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
779     -e "/mac/,/^embedded.*makeqpf$/d" \
780     -i tools/tools.pro || die "patching tools.pro failed"
781     ;;
782     *)
783     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
784     -e "/mac/,/^embedded.*makeqpf$/d" \
785     -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
786     -i tools/tools.pro || die "patching tools.pro failed"
787     ;;
788     esac
789     }
790    
791     # @FUNCTION: qt_nolibx11
792     # @RETURN: nothing
793     # @DESCRIPTION:
794     # Ignore X11 tests for packages that don't need X libraries installed
795     qt_nolibx11() {
796     einfo "removing X11 check to allow X-less compilation"
797     sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
798     die "x11 check sed failed"
799     }
800    
801 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