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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.86 - (hide annotations) (download)
Sat Nov 13 20:30:26 2010 UTC (3 years, 7 months ago) by wired
Branch: MAIN
Changes since 1.85: +7 -3 lines
adjust qt4-build eclass for qgtkstyle

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