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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.88 - (hide annotations) (download)
Thu Jan 20 23:08:09 2011 UTC (3 years, 5 months ago) by spatz
Branch: MAIN
Changes since 1.87: +3 -3 lines
Fix escaping of quotes in qt4-build.eclass, bug 332669.

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