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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.96 - (hide annotations) (download)
Sun Oct 30 14:21:14 2011 UTC (2 years, 8 months ago) by hwoarang
Branch: MAIN
Changes since 1.95: +23 -2 lines
add support for qpa and c++0x use flags for Qt-4.8. patch ack'd by tampakrap

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