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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.65 - (hide annotations) (download)
Wed Feb 17 23:32:24 2010 UTC (4 years, 9 months ago) by wired
Branch: MAIN
Changes since 1.64: +11 -17 lines
[qt4-build.eclass] added exceptions USE flag for >= Qt 4.6.x - bug #240185

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