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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.109 - (hide annotations) (download)
Mon Dec 26 00:11:07 2011 UTC (2 years, 3 months ago) by pesa
Branch: MAIN
Changes since 1.108: +58 -78 lines
Misc cleanups, add a few missing "|| die", fix description of some functions.

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