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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.68 - (hide annotations) (download)
Sat May 22 19:23:51 2010 UTC (4 years, 4 months ago) by wired
Branch: MAIN
Changes since 1.67: +13 -1 lines
inform the users that building qt-webkit with -ggdb can be problematic.
bug 307861

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