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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.100 - (hide annotations) (download)
Sat Nov 19 20:31:12 2011 UTC (2 years, 9 months ago) by pesa
Branch: MAIN
Changes since 1.99: +28 -37 lines
Remove support for Qt 4.5, add blockers for qt-declarative, small cleanup.

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 pesa 1.100 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.99 2011/11/19 20:00:35 pesa Exp $
4 caleb 1.1
5     # @ECLASS: qt4-build.eclass
6     # @MAINTAINER:
7 pesa 1.98 # Qt herd <qt@gentoo.org>
8 ingmar 1.8 # @BLURB: Eclass for Qt4 split ebuilds.
9 caleb 1.1 # @DESCRIPTION:
10 pesa 1.98 # This eclass contains various functions that are used when building Qt4.
11 caleb 1.1
12 hwoarang 1.37 inherit base eutils multilib toolchain-funcs flag-o-matic versionator
13 caleb 1.1
14 abcd 1.59 MY_PV=${PV/_/-}
15 pesa 1.100 MY_P=qt-everywhere-opensource-src-${MY_PV}
16    
17     HOMEPAGE="http://qt.nokia.com/"
18     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
19     LICENSE="|| ( LGPL-2.1 GPL-3 )"
20    
21     IUSE="aqua debug pch"
22    
23     [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] &&
24     [[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] &&
25     IUSE+=" +exceptions"
26 abcd 1.59
27 hwoarang 1.96 if version_is_at_least 4.7.99999999; then
28     IUSE+=" c++0x qpa"
29     fi
30    
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 pesa 1.100 !<x11-libs/qt-declarative-${PV}
39     !>x11-libs/qt-declarative-${PV}-r9999
40 hwoarang 1.36 !<x11-libs/qt-demo-${PV}
41     !>x11-libs/qt-demo-${PV}-r9999
42     !<x11-libs/qt-gui-${PV}
43     !>x11-libs/qt-gui-${PV}-r9999
44 wired 1.65 !<x11-libs/qt-multimedia-${PV}
45     !>x11-libs/qt-multimedia-${PV}-r9999
46 hwoarang 1.36 !<x11-libs/qt-opengl-${PV}
47     !>x11-libs/qt-opengl-${PV}-r9999
48     !<x11-libs/qt-phonon-${PV}
49     !>x11-libs/qt-phonon-${PV}-r9999
50     !<x11-libs/qt-qt3support-${PV}
51     !>x11-libs/qt-qt3support-${PV}-r9999
52     !<x11-libs/qt-script-${PV}
53     !>x11-libs/qt-script-${PV}-r9999
54     !<x11-libs/qt-sql-${PV}
55     !>x11-libs/qt-sql-${PV}-r9999
56     !<x11-libs/qt-svg-${PV}
57     !>x11-libs/qt-svg-${PV}-r9999
58     !<x11-libs/qt-test-${PV}
59     !>x11-libs/qt-test-${PV}-r9999
60     !<x11-libs/qt-webkit-${PV}
61     !>x11-libs/qt-webkit-${PV}-r9999
62     !<x11-libs/qt-xmlpatterns-${PV}
63     !>x11-libs/qt-xmlpatterns-${PV}-r9999
64     "
65 abcd 1.55
66 abcd 1.59 S=${WORKDIR}/${MY_P}
67 yngwin 1.25
68 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
69     # @DESCRIPTION:
70 abcd 1.57 # Sets up S, MY_P, PATH, and LD_LIBRARY_PATH
71 caleb 1.1 qt4-build_pkg_setup() {
72 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
73    
74 yngwin 1.66 # Protect users by not allowing downgrades between releases
75     # Downgrading revisions within the same release should be allowed
76 pesa 1.100 if has_version '>'${CATEGORY}/${P}-r9999; then
77     if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
78 yngwin 1.66 eerror "Sanity check to keep you from breaking your system:"
79     eerror " Downgrading Qt is completely unsupported and will break your system!"
80     die "aborting to save your system"
81     else
82     ewarn "Downgrading Qt is completely unsupported and will break your system!"
83     fi
84     fi
85 abcd 1.57
86 pesa 1.98 if [[ ${PN} == "qt-webkit" ]]; then
87 spatz 1.71 eshopts_push -s extglob
88 hwoarang 1.80 if is-flagq '-g?(gdb)?([1-9])'; then
89 spatz 1.71 echo
90     ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
91     ewarn "You may experience really long compilation times and/or increased memory usage."
92     ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
93     ewarn "For more info check out bug #307861"
94     echo
95     fi
96     eshopts_pop
97     fi
98    
99 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
100 abcd 1.57 if [[ ${CHOST} != *-darwin* ]]; then
101     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
102     else
103     DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
104 yngwin 1.63 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
105     # platform detection. Note: needs to come before any directories to
106     # avoid extract failure.
107     [[ ${CHOST} == *-apple-darwin* ]] && \
108 yngwin 1.66 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
109     ${QT4_EXTRACT_DIRECTORIES}"
110 abcd 1.57 fi
111 yngwin 1.20
112 abcd 1.55 # Make sure ebuilds use the required EAPI
113 abcd 1.57 if [[ ${EAPI} != [23] ]]; then
114     eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
115     eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
116     eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
117     die "qt4-build eclass requires EAPI=2 or EAPI=3"
118 yngwin 1.20 fi
119 caleb 1.1
120 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
121 yngwin 1.20 ewarn "Using a GCC version lower than 4.1 is not supported!"
122     fi
123 caleb 1.1 }
124    
125 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
126     # @DESCRIPTION:
127     # Arguments for build_target_directories. Takes the directories, in which the
128     # code should be compiled. This is a space-separated list
129    
130     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
131     # @DESCRIPTION:
132     # Space separated list including the directories that will be extracted from Qt
133     # tarball
134    
135     # @FUNCTION: qt4-build_src_unpack
136     # @DESCRIPTION:
137     # Unpacks the sources
138 yngwin 1.20 qt4-build_src_unpack() {
139 hwoarang 1.42 setqtenv
140 hwoarang 1.92 local unpack_p="${MY_P}"
141     case "${PV}" in
142 hwoarang 1.95 4.8.0_*)
143 hwoarang 1.92 unpack_p="qt-everywhere-opensource-src-${PV/_*}"
144     ;;
145     esac
146 abcd 1.55 local target targets=
147     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
148 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
149 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
150 hwoarang 1.92 targets+=" ${unpack_p}/${target}"
151 ingmar 1.11 done
152    
153 spatz 1.73 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
154     tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
155 hwoarang 1.92 case "${PV}" in
156 hwoarang 1.95 4.8.0_*)
157 hwoarang 1.92 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
158     ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
159     ;;
160     esac
161 ingmar 1.11 }
162    
163 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
164     # @DESCRIPTION:
165     # In case you have patches to apply, specify them in PATCHES variable. Make sure
166     # to specify the full path. This variable is necessary for src_prepare phase.
167     # example:
168     # PATCHES="${FILESDIR}"/mypatch.patch
169     # ${FILESDIR}"/mypatch2.patch"
170     #
171 hwoarang 1.34
172     # @FUNCTION: qt4-build_src_prepare
173     # @DESCRIPTION:
174     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
175     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
176 yngwin 1.20 qt4-build_src_prepare() {
177 hwoarang 1.42 setqtenv
178 yngwin 1.20 cd "${S}"
179 vapier 1.94
180 wired 1.69 # fix qt 4.7 regression that skips -fvisibility=hidden
181 hwoarang 1.72 if version_is_at_least "4.7.0_beta1"; then
182 wired 1.69 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
183     -i config.tests/unix/fvisibility.test ||
184     die "visibility fixing sed failed"
185     fi
186 pesa 1.98
187 pesa 1.99 if version_is_at_least "4.7"; then
188     # fix libX11 dependency on non X packages
189 pesa 1.98 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
190     has ${PN} ${nolibx11_pkgs} && qt_nolibx11
191 pesa 1.99
192     qt_assistant_cleanup
193 hwoarang 1.77 fi
194 wired 1.69
195 abcd 1.57 if use aqua; then
196     # provide a proper macx-g++-64
197     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
198    
199     sed -e '/^CONFIG/s:app_bundle::' \
200     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
201     -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
202     fi
203    
204 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
205 pesa 1.100 skip_qmake_build
206     skip_project_generation
207 ingmar 1.7 symlink_binaries_to_buildtree
208     fi
209 hwoarang 1.24
210 abcd 1.57 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
211     # qmake bus errors with -O2 but -O3 works
212     replace-flags -O2 -O3
213     fi
214 jer 1.97
215 hwoarang 1.21 # Bug 178652
216 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
217 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
218     append-flags -fno-gcse
219 gengor 1.18 fi
220    
221 pesa 1.100 if use_if_iuse c++0x; then
222 hwoarang 1.96 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
223     ewarn "this is an official standard, some of the reverse dependencies"
224     ewarn "may fail to compile or link againt the Qt4 libraries. Before"
225     ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
226     ewarn "disabled."
227     append-flags -std=c++0x
228     fi
229 pesa 1.98
230 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
231 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
232 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
233     append-cxxflags -fno-stack-protector
234     # Bug 253127
235 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
236     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
237     fi
238    
239 ayoy 1.49 # Bug 261632
240     if use ppc64; then
241     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
242     append-flags -mminimal-toc
243     fi
244    
245 wired 1.67 # Bug 282984 && Bug 295530
246 spatz 1.88 sed -e "s:\(^SYSTEM_VARIABLES\):CC=\"$(tc-getCC)\"\nCXX=\"$(tc-getCXX)\"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
247 wired 1.67 -i configure || die "sed qmake compilers failed"
248 pesa 1.98
249     # 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 pesa 1.98 if use_if_iuse glib; then
330 abcd 1.57 # 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 pesa 1.98 if use_if_iuse qpa; then
338 hwoarang 1.96 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 pesa 1.98
431 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
432 ingmar 1.7 install_qconfigs
433 caleb 1.4 fix_library_files
434 abcd 1.57 fix_includes
435 pesa 1.98
436 hwoarang 1.78 # remove .la files since we are building only shared Qt libraries
437 vapier 1.93 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
438 caleb 1.4 }
439    
440 hwoarang 1.42 # @FUNCTION: setqtenv
441     setqtenv() {
442     # Set up installation directories
443 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
444     QTPREFIXDIR=${EPREFIX}/usr
445     QTBINDIR=${EPREFIX}/usr/bin
446     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
447 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
448 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
449     QTDATADIR=${EPREFIX}/usr/share/qt4
450     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
451     QTHEADERDIR=${EPREFIX}/usr/include/qt4
452 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
453 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
454 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
455     QTEXAMPLESDIR=${QTDATADIR}/examples
456     QTDEMOSDIR=${QTDATADIR}/demos
457 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
458 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
459    
460     unset QMAKESPEC
461     }
462    
463 hwoarang 1.34 # @FUNCTION: standard_configure_options
464     # @DESCRIPTION:
465     # Sets up some standard configure options, like libdir (if necessary), whether
466     # debug info is wanted or not.
467 caleb 1.1 standard_configure_options() {
468 abcd 1.55 local myconf=
469 caleb 1.1
470 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
471 caleb 1.1
472     # Disable visibility explicitly if gcc version isn't 4
473 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
474     myconf+=" -no-reduce-exports"
475 caleb 1.1 fi
476    
477 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
478 abcd 1.55 myconf+=" $(qt_use pch)"
479 ingmar 1.12
480 ingmar 1.7 if use debug; then
481 abcd 1.55 myconf+=" -debug"
482 ingmar 1.7 else
483 abcd 1.55 myconf+=" -release"
484 ingmar 1.7 fi
485 abcd 1.55 myconf+=" -no-separate-debug-info"
486 caleb 1.1
487 abcd 1.57 use aqua && myconf+=" -no-framework"
488    
489 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
490 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
491     case "$(tc-arch)" in
492 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
493     ppc-macos) myconf+=" -arch ppc" ;;
494     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
495     sparc|sparc-*) myconf+=" -arch sparc" ;;
496     x86-macos) myconf+=" -arch x86" ;;
497 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
498     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
499     hppa|sh) myconf+=" -arch generic" ;;
500 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
501 ingmar 1.11 esac
502    
503 pesa 1.100 # exceptions USE flag
504 wired 1.65 local exceptions="-exceptions"
505 pesa 1.100 in_iuse exceptions && exceptions="$(qt_use exceptions)"
506 wired 1.48
507 abcd 1.57 # note about -reduce-relocations:
508     # That flag seems to introduce major breakage to applications,
509     # mostly to be seen as a core dump with the message "QPixmap: Must
510     # construct a QApplication before a QPaintDevice" on Solaris
511     # -- Daniel Vergien
512     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
513    
514 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
515 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
516     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
517     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
518     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
519 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
520 wired 1.48 ${exceptions}
521 abcd 1.57 -nomake examples -nomake demos"
522 yngwin 1.39
523 caleb 1.1 echo "${myconf}"
524     }
525    
526 wired 1.90 # @FUNCTION: prepare_directories
527 hwoarang 1.34 # @USAGE: < directories >
528     # @DESCRIPTION:
529 wired 1.90 # Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
530     prepare_directories() {
531 abcd 1.55 for x in "$@"; do
532 abcd 1.57 pushd "${S}"/${x} >/dev/null
533 pesa 1.98 einfo "Running qmake in: ${x}"
534 abcd 1.60 # avoid running over the maximum argument number, bug #299810
535     {
536     echo "${S}"/mkspecs/common/*.conf
537     find "${S}" -name '*.pr[io]'
538     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
539 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
540 wired 1.90 popd >/dev/null
541     done
542     }
543    
544    
545     # @FUNCTION: build_directories
546     # @USAGE: < directories >
547     # @DESCRIPTION:
548     # Compiles the code in $QT4_TARGET_DIRECTORIES
549     build_directories() {
550     for x in "$@"; do
551     pushd "${S}"/${x} >/dev/null
552 wired 1.67 emake CC="$(tc-getCC)" \
553     CXX="$(tc-getCXX)" \
554     LINK="$(tc-getCXX)" || die "emake failed"
555 abcd 1.57 popd >/dev/null
556 caleb 1.1 done
557     }
558    
559 hwoarang 1.34 # @FUNCTION: install_directories
560     # @USAGE: < directories >
561     # @DESCRIPTION:
562     # run emake install in the given directories, which are separated by spaces
563 caleb 1.1 install_directories() {
564 abcd 1.55 for x in "$@"; do
565 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
566     emake INSTALL_ROOT="${D}" install || die "emake install failed"
567     popd >/dev/null || die "Can't popd from ${S}/${x}"
568 caleb 1.1 done
569     }
570    
571 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
572     # @DESCRIPTION:
573     # List options that need to be added to QT_CONFIG in qconfig.pri
574 abcd 1.55 : ${QCONFIG_ADD:=}
575 ingmar 1.7
576     # @ECLASS-VARIABLE: QCONFIG_REMOVE
577     # @DESCRIPTION:
578     # List options that need to be removed from QT_CONFIG in qconfig.pri
579 abcd 1.55 : ${QCONFIG_REMOVE:=}
580 ingmar 1.7
581     # @ECLASS-VARIABLE: QCONFIG_DEFINE
582     # @DESCRIPTION:
583     # List variables that should be defined at the top of QtCore/qconfig.h
584 abcd 1.55 : ${QCONFIG_DEFINE:=}
585 ingmar 1.7
586 hwoarang 1.34 # @FUNCTION: install_qconfigs
587 vapier 1.93 # @DESCRIPTION:
588     # Install gentoo-specific mkspecs configurations
589 ingmar 1.7 install_qconfigs() {
590 zlin 1.9 local x
591     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
592 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
593     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
594     done
595 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
596 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
597 zlin 1.9 fi
598 ingmar 1.7
599 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
600 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
601     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
602     done
603 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
604 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
605     fi
606     }
607    
608 hwoarang 1.34 # @FUNCTION: generate_qconfigs
609 vapier 1.93 # @DESCRIPTION:
610     # Generates gentoo-specific configurations
611 ingmar 1.7 generate_qconfigs() {
612     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
613     local x qconfig_add qconfig_remove qconfig_new
614     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
615     [[ -f ${x} ]] || continue
616 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
617     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
618 ingmar 1.7 done
619    
620     # these error checks do not use die because dying in pkg_post{inst,rm}
621     # just makes things worse.
622     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
623     # start with the qconfig.pri that qt-core installed
624     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
625     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
626     eerror "cp qconfig failed."
627     return 1
628     fi
629    
630     # generate list of QT_CONFIG entries from the existing list
631     # including qconfig_add and excluding qconfig_remove
632     for x in $(sed -n 's/^QT_CONFIG +=//p' \
633     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
634 ssuominen 1.91 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
635 ingmar 1.7 done
636    
637     # replace the existing QT_CONFIG list with qconfig_new
638     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
639     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
640     eerror "Sed for QT_CONFIG failed"
641     return 1
642     fi
643    
644     # create Gentoo/qconfig.h
645     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
646     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
647     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
648     return 1
649     fi
650     fi
651     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
652     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
653     [[ -f ${x} ]] || continue
654     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
655     done
656     else
657     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
658     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
659     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
660     "${ROOT}${QTDATADIR}" \
661     "${ROOT}${QTHEADERDIR}"/Gentoo \
662     "${ROOT}${QTHEADERDIR}" 2>/dev/null
663     fi
664     fi
665     }
666    
667 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
668 vapier 1.93 # @DESCRIPTION:
669     # Generate configurations when the package is completely removed
670 ingmar 1.7 qt4-build_pkg_postrm() {
671     generate_qconfigs
672 caleb 1.1 }
673    
674 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
675 vapier 1.93 # @DESCRIPTION:
676     # Generate configuration, plus throws a message about possible
677 hwoarang 1.34 # breakages and proposed solutions.
678 ingmar 1.7 qt4-build_pkg_postinst() {
679     generate_qconfigs
680 caleb 1.1 }
681    
682 pesa 1.100 # @FUNCTION: skip_qmake_build
683 hwoarang 1.34 # @DESCRIPTION:
684     # Don't need to build qmake, as it's already installed from qt-core
685 pesa 1.100 skip_qmake_build() {
686 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
687 pesa 1.98 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed"
688 caleb 1.1 }
689    
690 pesa 1.100 # @FUNCTION: skip_project_generation
691 hwoarang 1.34 # @DESCRIPTION:
692     # Exit the script early by throwing in an exit before all of the .pro files are scanned
693 pesa 1.100 skip_project_generation() {
694 caleb 1.1 # Exit the script early by throwing in an exit before all of the .pro files are scanned
695 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
696 pesa 1.98 -i "${S}"/configure || die "sed failed"
697 caleb 1.1 }
698    
699 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
700     # @DESCRIPTION:
701     # Symlink generated binaries to buildtree so they can be used during compilation
702     # time
703 ingmar 1.7 symlink_binaries_to_buildtree() {
704     for bin in qmake moc uic rcc; do
705 pesa 1.100 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
706 ingmar 1.7 done
707 caleb 1.1 }
708    
709 hwoarang 1.34 # @FUNCTION: fix_library_files
710     # @DESCRIPTION:
711     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
712     # moves the *.pc-files into the pkgconfig directory
713 caleb 1.1 fix_library_files() {
714 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
715     if [[ -e ${libfile} ]]; then
716 pesa 1.98 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
717 ingmar 1.7 fi
718     done
719 caleb 1.1
720     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
721 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
722     if [[ -e ${libfile} ]]; then
723 pesa 1.98 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed"
724 caleb 1.1
725 abcd 1.55 # Move .pc files into the pkgconfig directory
726 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
727 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
728 pesa 1.98 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
729 ingmar 1.7 fi
730     done
731    
732     # Don't install an empty directory
733     rmdir "${D}"/${QTLIBDIR}/pkgconfig
734 caleb 1.1 }
735    
736 hwoarang 1.34 # @FUNCTION: qt_use
737     # @USAGE: < flag > [ feature ] [ enableval ]
738 yngwin 1.39 # @DESCRIPTION:
739 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
740     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
741     # will be used for that. If [enableval] is not specified, it omits the
742     # assignment-part
743 caleb 1.1 qt_use() {
744 abcd 1.55 local flag=$1
745     local feature=$1
746 caleb 1.5 local enableval=
747 caleb 1.1
748 abcd 1.55 [[ -n $2 ]] && feature=$2
749     [[ -n $3 ]] && enableval=-$3
750 ingmar 1.7
751     if use ${flag}; then
752     echo "${enableval}-${feature}"
753     else
754     echo "-no-${feature}"
755     fi
756     }
757    
758 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
759     # @RETURN: the specs-directory w/o path
760 yngwin 1.39 # @DESCRIPTION:
761 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
762 caleb 1.1 qt_mkspecs_dir() {
763 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
764     local spec
765 caleb 1.1
766 caleb 1.5 case ${CHOST} in
767     *-freebsd*|*-dragonfly*)
768 abcd 1.55 spec=freebsd ;;
769 caleb 1.5 *-openbsd*)
770 abcd 1.55 spec=openbsd ;;
771 caleb 1.5 *-netbsd*)
772 abcd 1.55 spec=netbsd ;;
773 ingmar 1.7 *-darwin*)
774 abcd 1.57 if use aqua; then
775     # mac with carbon/cocoa
776     spec=macx
777     else
778     # darwin/mac with x11
779     spec=darwin
780     fi
781     ;;
782     *-solaris*)
783     spec=solaris ;;
784 caleb 1.5 *-linux-*|*-linux)
785 abcd 1.55 spec=linux ;;
786 caleb 1.5 *)
787 pesa 1.100 die "Unknown CHOST, no platform chosen"
788 caleb 1.5 esac
789    
790     CXX=$(tc-getCXX)
791 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
792     spec+=-g++
793     elif [[ ${CXX} == *icpc* ]]; then
794     spec+=-icc
795 caleb 1.5 else
796 pesa 1.100 die "Unknown compiler '${CXX}'"
797 caleb 1.5 fi
798 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
799     spec+=-${LIBDIR/lib}
800 hwoarang 1.42 fi
801 caleb 1.1
802 abcd 1.57 # Add -64 for 64bit profiles
803     if use x64-freebsd ||
804     use amd64-linux ||
805     use x64-macos ||
806     use x64-solaris ||
807     use sparc64-solaris
808     then
809     spec+=-64
810     fi
811    
812 caleb 1.5 echo "${spec}"
813 caleb 1.1 }
814    
815 hwoarang 1.77 # @FUNCTION: qt_assistant_cleanup
816     # @RETURN: nothing
817     # @DESCRIPTION:
818 pesa 1.99 # Tries to clean up tools.pro for qt-assistant ebuilds.
819     # Meant to be called in src_prepare().
820     # Since Qt 4.7.4 this function is a no-op.
821 hwoarang 1.77 qt_assistant_cleanup() {
822 pesa 1.99 # apply patching to qt-assistant ebuilds only
823     [[ ${PN} != "qt-assistant" ]] && return
824    
825     # no longer needed for 4.7.4 and later
826     version_is_at_least "4.7.4" && return
827    
828 hwoarang 1.77 # different versions (and branches...) may need different handling,
829     # add a case if you need special handling
830     case "${MY_PV_EXTRA}" in
831     *kde-qt*)
832     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
833     -e "/mac/,/^embedded.*makeqpf$/d" \
834     -i tools/tools.pro || die "patching tools.pro failed"
835     ;;
836     *)
837     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
838     -e "/mac/,/^embedded.*makeqpf$/d" \
839     -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
840     -i tools/tools.pro || die "patching tools.pro failed"
841     ;;
842     esac
843     }
844    
845     # @FUNCTION: qt_nolibx11
846     # @RETURN: nothing
847     # @DESCRIPTION:
848     # Ignore X11 tests for packages that don't need X libraries installed
849     qt_nolibx11() {
850 pesa 1.98 einfo "Removing X11 check to allow X-less compilation"
851 hwoarang 1.77 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
852     die "x11 check sed failed"
853     }
854    
855 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