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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.69 - (hide annotations) (download)
Mon May 24 14:27:13 2010 UTC (4 years, 2 months ago) by wired
Branch: MAIN
Changes since 1.68: +8 -1 lines
fixed 4.7.0_beta1 regression with -fvisibility=hidden

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