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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.90 - (hide annotations) (download)
Thu Mar 10 23:45:51 2011 UTC (3 years, 4 months ago) by wired
Branch: MAIN
Changes since 1.89: +19 -4 lines
moved makefile generation from compile to configure phase.

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

  ViewVC Help
Powered by ViewVC 1.1.20