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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.66 - (hide annotations) (download)
Wed Mar 24 14:36:28 2010 UTC (4 years, 5 months ago) by yngwin
Branch: MAIN
Changes since 1.65: +14 -4 lines
[qt4-build.eclass] Prevent users from unintentionally breaking their systems

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