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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.98 - (hide annotations) (download)
Sat Nov 12 19:01:56 2011 UTC (2 years, 9 months ago) by pesa
Branch: MAIN
Changes since 1.97: +25 -23 lines
Set qt@g.o as maintainer, minor cleanups (quoting, whitespace, etc.)

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.98 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.97 2011/11/02 18:01:00 jer 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     if version_is_at_least 4.5.99999999; then
16     MY_P=qt-everywhere-opensource-src-${MY_PV}
17 vapier 1.94 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] &&
18     [[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] &&
19 wired 1.86 IUSE="+exceptions"
20 abcd 1.59 else
21     MY_P=qt-x11-opensource-src-${MY_PV}
22     fi
23    
24 hwoarang 1.96 if version_is_at_least 4.7.99999999; then
25     IUSE+=" c++0x qpa"
26     fi
27    
28 abcd 1.59 HOMEPAGE="http://qt.nokia.com/"
29     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
30    
31     LICENSE="|| ( LGPL-2.1 GPL-3 )"
32 wired 1.87 IUSE+=" debug pch aqua"
33 abcd 1.59
34 hwoarang 1.36 RDEPEND="
35     !<x11-libs/qt-assistant-${PV}
36     !>x11-libs/qt-assistant-${PV}-r9999
37     !<x11-libs/qt-core-${PV}
38     !>x11-libs/qt-core-${PV}-r9999
39     !<x11-libs/qt-dbus-${PV}
40     !>x11-libs/qt-dbus-${PV}-r9999
41     !<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 abcd 1.57 # Sets up S, MY_P, 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     if has_version '>'${CATEGORY}/${P}-r9999 ; then
78     if [[ -z $I_KNOW_WHAT_I_AM_DOING ]] ; then
79     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     # Arguments for build_target_directories. Takes the directories, in which the
129     # code should be compiled. This is a space-separated list
130    
131     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
132     # @DESCRIPTION:
133     # Space separated list including the directories that will be extracted from Qt
134     # tarball
135    
136     # @FUNCTION: qt4-build_src_unpack
137     # @DESCRIPTION:
138     # Unpacks the sources
139 yngwin 1.20 qt4-build_src_unpack() {
140 hwoarang 1.42 setqtenv
141 hwoarang 1.92 local unpack_p="${MY_P}"
142     case "${PV}" in
143 hwoarang 1.95 4.8.0_*)
144 hwoarang 1.92 unpack_p="qt-everywhere-opensource-src-${PV/_*}"
145     ;;
146     esac
147 abcd 1.55 local target targets=
148     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
149 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
150 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
151 hwoarang 1.92 targets+=" ${unpack_p}/${target}"
152 ingmar 1.11 done
153    
154 spatz 1.73 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
155     tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
156 hwoarang 1.92 case "${PV}" in
157 hwoarang 1.95 4.8.0_*)
158 hwoarang 1.92 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
159     ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
160     ;;
161     esac
162 ingmar 1.11 }
163    
164 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
165     # @DESCRIPTION:
166     # In case you have patches to apply, specify them in PATCHES variable. Make sure
167     # to specify the full path. This variable is necessary for src_prepare phase.
168     # example:
169     # PATCHES="${FILESDIR}"/mypatch.patch
170     # ${FILESDIR}"/mypatch2.patch"
171     #
172 hwoarang 1.34
173     # @FUNCTION: qt4-build_src_prepare
174     # @DESCRIPTION:
175     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
176     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
177 yngwin 1.20 qt4-build_src_prepare() {
178 hwoarang 1.42 setqtenv
179 yngwin 1.20 cd "${S}"
180 vapier 1.94
181 wired 1.69 # fix qt 4.7 regression that skips -fvisibility=hidden
182 hwoarang 1.72 if version_is_at_least "4.7.0_beta1"; then
183 wired 1.69 sed -e "s/^gcc|g++)/*gcc|*g++)/" \
184     -i config.tests/unix/fvisibility.test ||
185     die "visibility fixing sed failed"
186     fi
187 pesa 1.98
188     # fix libX11 dependency on non X packages
189 hwoarang 1.77 if version_is_at_least "4.7.0_beta2"; then
190 pesa 1.98 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
191     has ${PN} ${nolibx11_pkgs} && qt_nolibx11
192 hwoarang 1.77 [[ ${PN} == "qt-assistant" ]] && qt_assistant_cleanup
193     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     skip_qmake_build_patch
206     skip_project_generation_patch
207     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 hwoarang 1.96 if has c++0x ${IUSE//+} && use c++0x; then
222     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 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
504     # 4.6: exceptions USE flag
505     local exceptions="-exceptions"
506 wired 1.48 case "${PV}" in
507 wired 1.65 4.5.*)
508     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
509 wired 1.48 ;;
510     *)
511 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
512 wired 1.48 ;;
513     esac
514    
515 abcd 1.57 # note about -reduce-relocations:
516     # That flag seems to introduce major breakage to applications,
517     # mostly to be seen as a core dump with the message "QPixmap: Must
518     # construct a QApplication before a QPaintDevice" on Solaris
519     # -- Daniel Vergien
520     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
521    
522 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
523 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
524     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
525     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
526     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
527 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
528 wired 1.48 ${exceptions}
529 abcd 1.57 -nomake examples -nomake demos"
530 yngwin 1.39
531 caleb 1.1 echo "${myconf}"
532     }
533    
534 wired 1.90 # @FUNCTION: prepare_directories
535 hwoarang 1.34 # @USAGE: < directories >
536     # @DESCRIPTION:
537 wired 1.90 # Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES
538     prepare_directories() {
539 abcd 1.55 for x in "$@"; do
540 abcd 1.57 pushd "${S}"/${x} >/dev/null
541 pesa 1.98 einfo "Running qmake in: ${x}"
542 abcd 1.60 # avoid running over the maximum argument number, bug #299810
543     {
544     echo "${S}"/mkspecs/common/*.conf
545     find "${S}" -name '*.pr[io]'
546     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
547 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
548 wired 1.90 popd >/dev/null
549     done
550     }
551    
552    
553     # @FUNCTION: build_directories
554     # @USAGE: < directories >
555     # @DESCRIPTION:
556     # Compiles the code in $QT4_TARGET_DIRECTORIES
557     build_directories() {
558     for x in "$@"; do
559     pushd "${S}"/${x} >/dev/null
560 wired 1.67 emake CC="$(tc-getCC)" \
561     CXX="$(tc-getCXX)" \
562     LINK="$(tc-getCXX)" || die "emake failed"
563 abcd 1.57 popd >/dev/null
564 caleb 1.1 done
565     }
566    
567 hwoarang 1.34 # @FUNCTION: install_directories
568     # @USAGE: < directories >
569     # @DESCRIPTION:
570     # run emake install in the given directories, which are separated by spaces
571 caleb 1.1 install_directories() {
572 abcd 1.55 for x in "$@"; do
573 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
574     emake INSTALL_ROOT="${D}" install || die "emake install failed"
575     popd >/dev/null || die "Can't popd from ${S}/${x}"
576 caleb 1.1 done
577     }
578    
579 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
580     # @DESCRIPTION:
581     # List options that need to be added to QT_CONFIG in qconfig.pri
582 abcd 1.55 : ${QCONFIG_ADD:=}
583 ingmar 1.7
584     # @ECLASS-VARIABLE: QCONFIG_REMOVE
585     # @DESCRIPTION:
586     # List options that need to be removed from QT_CONFIG in qconfig.pri
587 abcd 1.55 : ${QCONFIG_REMOVE:=}
588 ingmar 1.7
589     # @ECLASS-VARIABLE: QCONFIG_DEFINE
590     # @DESCRIPTION:
591     # List variables that should be defined at the top of QtCore/qconfig.h
592 abcd 1.55 : ${QCONFIG_DEFINE:=}
593 ingmar 1.7
594 hwoarang 1.34 # @FUNCTION: install_qconfigs
595 vapier 1.93 # @DESCRIPTION:
596     # Install gentoo-specific mkspecs configurations
597 ingmar 1.7 install_qconfigs() {
598 zlin 1.9 local x
599     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
600 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
601     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
602     done
603 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
604 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
605 zlin 1.9 fi
606 ingmar 1.7
607 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
608 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
609     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
610     done
611 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
612 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
613     fi
614     }
615    
616 hwoarang 1.34 # @FUNCTION: generate_qconfigs
617 vapier 1.93 # @DESCRIPTION:
618     # Generates gentoo-specific configurations
619 ingmar 1.7 generate_qconfigs() {
620     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
621     local x qconfig_add qconfig_remove qconfig_new
622     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
623     [[ -f ${x} ]] || continue
624 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
625     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
626 ingmar 1.7 done
627    
628     # these error checks do not use die because dying in pkg_post{inst,rm}
629     # just makes things worse.
630     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
631     # start with the qconfig.pri that qt-core installed
632     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
633     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
634     eerror "cp qconfig failed."
635     return 1
636     fi
637    
638     # generate list of QT_CONFIG entries from the existing list
639     # including qconfig_add and excluding qconfig_remove
640     for x in $(sed -n 's/^QT_CONFIG +=//p' \
641     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
642 ssuominen 1.91 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
643 ingmar 1.7 done
644    
645     # replace the existing QT_CONFIG list with qconfig_new
646     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
647     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
648     eerror "Sed for QT_CONFIG failed"
649     return 1
650     fi
651    
652     # create Gentoo/qconfig.h
653     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
654     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
655     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
656     return 1
657     fi
658     fi
659     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
660     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
661     [[ -f ${x} ]] || continue
662     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
663     done
664     else
665     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
666     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
667     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
668     "${ROOT}${QTDATADIR}" \
669     "${ROOT}${QTHEADERDIR}"/Gentoo \
670     "${ROOT}${QTHEADERDIR}" 2>/dev/null
671     fi
672     fi
673     }
674    
675 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
676 vapier 1.93 # @DESCRIPTION:
677     # Generate configurations when the package is completely removed
678 ingmar 1.7 qt4-build_pkg_postrm() {
679     generate_qconfigs
680 caleb 1.1 }
681    
682 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
683 vapier 1.93 # @DESCRIPTION:
684     # Generate configuration, plus throws a message about possible
685 hwoarang 1.34 # breakages and proposed solutions.
686 ingmar 1.7 qt4-build_pkg_postinst() {
687     generate_qconfigs
688 caleb 1.1 }
689    
690 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
691     # @DESCRIPTION:
692     # Don't need to build qmake, as it's already installed from qt-core
693 caleb 1.1 skip_qmake_build_patch() {
694 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
695 pesa 1.98 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed"
696 caleb 1.1 }
697    
698 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
699     # @DESCRIPTION:
700     # Exit the script early by throwing in an exit before all of the .pro files are scanned
701 caleb 1.1 skip_project_generation_patch() {
702     # Exit the script early by throwing in an exit before all of the .pro files are scanned
703 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
704 pesa 1.98 -i "${S}"/configure || die "sed failed"
705 caleb 1.1 }
706    
707 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
708     # @DESCRIPTION:
709     # Symlink generated binaries to buildtree so they can be used during compilation
710     # time
711 ingmar 1.7 symlink_binaries_to_buildtree() {
712     for bin in qmake moc uic rcc; do
713 pesa 1.98 ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
714 ingmar 1.7 done
715 caleb 1.1 }
716    
717 hwoarang 1.34 # @FUNCTION: fix_library_files
718     # @DESCRIPTION:
719     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
720     # moves the *.pc-files into the pkgconfig directory
721 caleb 1.1 fix_library_files() {
722 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
723     if [[ -e ${libfile} ]]; then
724 pesa 1.98 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
725 ingmar 1.7 fi
726     done
727 caleb 1.1
728     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
729 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
730     if [[ -e ${libfile} ]]; then
731 pesa 1.98 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed"
732 caleb 1.1
733 abcd 1.55 # Move .pc files into the pkgconfig directory
734 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
735 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
736 pesa 1.98 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
737 ingmar 1.7 fi
738     done
739    
740     # Don't install an empty directory
741     rmdir "${D}"/${QTLIBDIR}/pkgconfig
742 caleb 1.1 }
743    
744 hwoarang 1.34 # @FUNCTION: qt_use
745     # @USAGE: < flag > [ feature ] [ enableval ]
746 yngwin 1.39 # @DESCRIPTION:
747 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
748     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
749     # will be used for that. If [enableval] is not specified, it omits the
750     # assignment-part
751 caleb 1.1 qt_use() {
752 abcd 1.55 local flag=$1
753     local feature=$1
754 caleb 1.5 local enableval=
755 caleb 1.1
756 abcd 1.55 [[ -n $2 ]] && feature=$2
757     [[ -n $3 ]] && enableval=-$3
758 ingmar 1.7
759     if use ${flag}; then
760     echo "${enableval}-${feature}"
761     else
762     echo "-no-${feature}"
763     fi
764     }
765    
766 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
767     # @RETURN: the specs-directory w/o path
768 yngwin 1.39 # @DESCRIPTION:
769 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
770 caleb 1.1 qt_mkspecs_dir() {
771 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
772     local spec
773 caleb 1.1
774 caleb 1.5 case ${CHOST} in
775     *-freebsd*|*-dragonfly*)
776 abcd 1.55 spec=freebsd ;;
777 caleb 1.5 *-openbsd*)
778 abcd 1.55 spec=openbsd ;;
779 caleb 1.5 *-netbsd*)
780 abcd 1.55 spec=netbsd ;;
781 ingmar 1.7 *-darwin*)
782 abcd 1.57 if use aqua; then
783     # mac with carbon/cocoa
784     spec=macx
785     else
786     # darwin/mac with x11
787     spec=darwin
788     fi
789     ;;
790     *-solaris*)
791     spec=solaris ;;
792 caleb 1.5 *-linux-*|*-linux)
793 abcd 1.55 spec=linux ;;
794 caleb 1.5 *)
795 pesa 1.98 die "Unknown CHOST, no platform chosen."
796 caleb 1.5 esac
797    
798     CXX=$(tc-getCXX)
799 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
800     spec+=-g++
801     elif [[ ${CXX} == *icpc* ]]; then
802     spec+=-icc
803 caleb 1.5 else
804 pesa 1.98 die "Unknown compiler '${CXX}'."
805 caleb 1.5 fi
806 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
807     spec+=-${LIBDIR/lib}
808 hwoarang 1.42 fi
809 caleb 1.1
810 abcd 1.57 # Add -64 for 64bit profiles
811     if use x64-freebsd ||
812     use amd64-linux ||
813     use x64-macos ||
814     use x64-solaris ||
815     use sparc64-solaris
816     then
817     spec+=-64
818     fi
819    
820 caleb 1.5 echo "${spec}"
821 caleb 1.1 }
822    
823 hwoarang 1.77 # @FUNCTION: qt_assistant_cleanup
824     # @RETURN: nothing
825     # @DESCRIPTION:
826     # Tries to clean up tools.pro for qt-assistant ebuilds
827     # Meant to be called in src_prepare
828     qt_assistant_cleanup() {
829     # different versions (and branches...) may need different handling,
830     # add a case if you need special handling
831     case "${MY_PV_EXTRA}" in
832     *kde-qt*)
833     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
834     -e "/mac/,/^embedded.*makeqpf$/d" \
835     -i tools/tools.pro || die "patching tools.pro failed"
836     ;;
837     *)
838     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
839     -e "/mac/,/^embedded.*makeqpf$/d" \
840     -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
841     -i tools/tools.pro || die "patching tools.pro failed"
842     ;;
843     esac
844     }
845    
846     # @FUNCTION: qt_nolibx11
847     # @RETURN: nothing
848     # @DESCRIPTION:
849     # Ignore X11 tests for packages that don't need X libraries installed
850     qt_nolibx11() {
851 pesa 1.98 einfo "Removing X11 check to allow X-less compilation"
852 hwoarang 1.77 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
853     die "x11 check sed failed"
854     }
855    
856 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