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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.64 - (hide annotations) (download)
Mon Feb 15 16:34:00 2010 UTC (4 years, 9 months ago) by spatz
Branch: MAIN
Changes since 1.63: +1 -18 lines
Remove unneeded and outdated ewarn in qt4-build

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

  ViewVC Help
Powered by ViewVC 1.1.20