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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.84 - (hide annotations) (download)
Wed Oct 13 19:33:17 2010 UTC (3 years, 6 months ago) by armin76
Branch: MAIN
Changes since 1.83: +1 -7 lines
Remove arm workaround now that its been fixed on gcc-4.4.3-r3

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