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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.52 - (hide annotations) (download)
Wed Nov 18 22:12:47 2009 UTC (4 years, 7 months ago) by wired
Branch: MAIN
Changes since 1.51: +35 -15 lines
added ewarn about 4.6 beta->rc binary compatibility breakage

1 yngwin 1.20 # Copyright 2007-2009 Gentoo Foundation
2 caleb 1.1 # Distributed under the terms of the GNU General Public License v2
3 wired 1.52 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.51 2009/11/10 00:56:29 spatz Exp $
4 caleb 1.1
5     # @ECLASS: qt4-build.eclass
6     # @MAINTAINER:
7 yngwin 1.25 # Ben de Groot <yngwin@gentoo.org>,
8     # Markos Chandras <hwoarang@gentoo.org>,
9 caleb 1.1 # Caleb Tennis <caleb@gentoo.org>
10 wired 1.46 # Alex Alexander <wired@gentoo.org>
11 ingmar 1.8 # @BLURB: Eclass for Qt4 split ebuilds.
12 caleb 1.1 # @DESCRIPTION:
13     # This eclass contains various functions that are used when building Qt4
14    
15 hwoarang 1.37 inherit base eutils multilib toolchain-funcs flag-o-matic versionator
16 caleb 1.1
17 yngwin 1.40 IUSE="${IUSE} debug pch"
18 hwoarang 1.36 RDEPEND="
19     !<x11-libs/qt-assistant-${PV}
20     !>x11-libs/qt-assistant-${PV}-r9999
21     !<x11-libs/qt-core-${PV}
22     !>x11-libs/qt-core-${PV}-r9999
23     !<x11-libs/qt-dbus-${PV}
24     !>x11-libs/qt-dbus-${PV}-r9999
25     !<x11-libs/qt-demo-${PV}
26     !>x11-libs/qt-demo-${PV}-r9999
27     !<x11-libs/qt-gui-${PV}
28     !>x11-libs/qt-gui-${PV}-r9999
29     !<x11-libs/qt-opengl-${PV}
30     !>x11-libs/qt-opengl-${PV}-r9999
31     !<x11-libs/qt-phonon-${PV}
32     !>x11-libs/qt-phonon-${PV}-r9999
33     !<x11-libs/qt-qt3support-${PV}
34     !>x11-libs/qt-qt3support-${PV}-r9999
35     !<x11-libs/qt-script-${PV}
36     !>x11-libs/qt-script-${PV}-r9999
37     !<x11-libs/qt-sql-${PV}
38     !>x11-libs/qt-sql-${PV}-r9999
39     !<x11-libs/qt-svg-${PV}
40     !>x11-libs/qt-svg-${PV}-r9999
41     !<x11-libs/qt-test-${PV}
42     !>x11-libs/qt-test-${PV}-r9999
43     !<x11-libs/qt-webkit-${PV}
44     !>x11-libs/qt-webkit-${PV}-r9999
45     !<x11-libs/qt-xmlpatterns-${PV}
46     !>x11-libs/qt-xmlpatterns-${PV}-r9999
47     "
48 ingmar 1.7 case "${PV}" in
49 wired 1.48 4.?.?_rc* | 4.?.?_beta* )
50 ingmar 1.11 SRCTYPE="${SRCTYPE:-opensource-src}"
51 wired 1.48 MY_PV="${PV/_/-}"
52 ingmar 1.11 ;;
53 ingmar 1.7 *)
54     SRCTYPE="${SRCTYPE:-opensource-src}"
55     MY_PV="${PV}"
56     ;;
57     esac
58 wired 1.48
59     if version_is_at_least 4.5.99999999 ${PV} ; then
60     MY_P="qt-everywhere-${SRCTYPE}-${MY_PV}"
61     else
62     MY_P="qt-x11-${SRCTYPE}-${MY_PV}"
63     fi
64 ingmar 1.11 S=${WORKDIR}/${MY_P}
65 ingmar 1.7
66 hwoarang 1.44 HOMEPAGE="http://qt.nokia.com/"
67 ayoy 1.45 if version_is_at_least 4.5.3 ${PV} ; then
68 wired 1.48 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
69     else
70     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.bz2"
71 ayoy 1.45 fi
72 ingmar 1.11
73     case "${PV}" in
74 yngwin 1.20 4.4.?) SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-headers.tar.bz2" ;;
75     *) ;;
76 ingmar 1.11 esac
77 ingmar 1.7
78 yngwin 1.25 if version_is_at_least 4.5 ${PV} ; then
79     LICENSE="|| ( LGPL-2.1 GPL-3 )"
80     fi
81    
82 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
83     # @DESCRIPTION:
84     # Sets up installation directories, PLATFORM, PATH, and LD_LIBRARY_PATH
85 caleb 1.1 qt4-build_pkg_setup() {
86 yngwin 1.20 # EAPI=2 ebuilds set use-deps, others need this:
87     if [[ $EAPI != 2 ]]; then
88     # Make sure debug setting corresponds with qt-core (bug 258512)
89     if [[ $PN != "qt-core" ]]; then
90     use debug && QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK}
91     ~x11-libs/qt-core-${PV} debug"
92     fi
93    
94     # Check USE requirements
95     qt4-build_check_use
96     fi
97 caleb 1.1
98     PATH="${S}/bin:${PATH}"
99     LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}"
100 yngwin 1.20
101     if ! version_is_at_least 4.1 $(gcc-version) ; then
102     ewarn "Using a GCC version lower than 4.1 is not supported!"
103     echo
104 gengor 1.31 ebeep 3
105 yngwin 1.20 fi
106 wired 1.52
107     if [[ "${P}" == "qt-core-4.6.0_rc1" ]]; then
108     ewarn
109     ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1."
110     ewarn "If you are upgrading from 4.6.0_beta1, you'll have to"
111     ewarn "re-emerge everything that depends on Qt."
112     ewarn "Use the following command:"
113     ewarn
114     ewarn " emerge -av1 \$(for pkg in \$(equery -q d \\"
115     ewarn " \$(qlist -IC x11-libs/qt-) | grep -v \"x11-libs/qt-\" |"
116     ewarn " sort -u); do echo \"=\$pkg\"; done)"
117     ewarn
118     ewarn "YOU'VE BEEN WARNED"
119     ewarn
120     ebeep 3
121     fi
122    
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 ayoy 1.45 local target targets licenses tar_pkg tar_args
141 hwoarang 1.26 if version_is_at_least 4.5 ${PV} ; then
142     licenses="LICENSE.GPL3 LICENSE.LGPL"
143     else
144     licenses="LICENSE.GPL2 LICENSE.GPL3"
145     fi
146     for target in configure ${licenses} projects.pro \
147 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
148 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
149 ingmar 1.11 targets="${targets} ${MY_P}/${target}"
150     done
151    
152 ayoy 1.45 tar_pkg=${MY_P}.tar.bz2
153     tar_args="xjpf"
154     if version_is_at_least 4.5.3 ${PV} ; then
155     tar_pkg=${tar_pkg/bz2/gz}
156     tar_args="xzpf"
157     fi
158    
159     echo tar ${tar_args} "${DISTDIR}"/${tar_pkg} ${targets}
160     tar ${tar_args} "${DISTDIR}"/${tar_pkg} ${targets}
161 ingmar 1.11
162     case "${PV}" in
163 yngwin 1.20 4.4.?)
164 ingmar 1.11 echo tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2
165     tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2
166     ;;
167     esac
168 yngwin 1.20
169     # Be backwards compatible for now
170     if [[ $EAPI != 2 ]]; then
171     qt4-build_src_prepare
172     fi
173 ingmar 1.11 }
174    
175 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
176     # @DESCRIPTION:
177     # In case you have patches to apply, specify them in PATCHES variable. Make sure
178     # to specify the full path. This variable is necessary for src_prepare phase.
179     # example:
180     # PATCHES="${FILESDIR}"/mypatch.patch
181     # ${FILESDIR}"/mypatch2.patch"
182     #
183 hwoarang 1.34
184     # @FUNCTION: qt4-build_src_prepare
185     # @DESCRIPTION:
186     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
187     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
188 yngwin 1.20 qt4-build_src_prepare() {
189 hwoarang 1.42 setqtenv
190 yngwin 1.20 cd "${S}"
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 ayoy 1.50 # Bug 282984
199     sed -e "s/\(^SYSTEM_VARIABLES\)/CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1/" \
200     -i configure || die "sed qmake compilers failed"
201     sed -e "s/\(\$MAKE\)/\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX)/" \
202     -i config.tests/unix/compile.test || die "sed test compilers failed"
203    
204 hwoarang 1.21 # Bug 178652
205     if [[ "$(gcc-major-version)" == "3" ]] && use amd64; then
206     ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
207     append-flags -fno-gcse
208 gengor 1.18 fi
209    
210 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
211 gengor 1.29 if [[ $(gcc-major-version) -lt "4" ]] ; then
212 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
213     append-cxxflags -fno-stack-protector
214     # Bug 253127
215 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
216     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
217     fi
218    
219 ayoy 1.49 # Bug 261632
220     if use ppc64; then
221     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
222     append-flags -mminimal-toc
223     fi
224    
225 hwoarang 1.24 # Bug 172219
226 ingmar 1.7 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
227     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
228     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
229     -e "s:X11R6/::" \
230     -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
231    
232     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
233     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
234     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
235     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
236 yngwin 1.39
237 hwoarang 1.37 base_src_prepare
238 ingmar 1.7 }
239    
240 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
241     # @DESCRIPTION:
242     # Default configure phase
243 yngwin 1.20 qt4-build_src_configure() {
244 hwoarang 1.42 setqtenv
245 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
246    
247     echo ./configure ${myconf}
248     ./configure ${myconf} || die "./configure failed"
249 tommy 1.43 myconf=""
250 yngwin 1.20 }
251 ingmar 1.7
252 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
253     # @DESCRIPTION: Actual compile phase
254 yngwin 1.20 qt4-build_src_compile() {
255 hwoarang 1.42 setqtenv
256 yngwin 1.20 # Be backwards compatible for now
257     if [[ $EAPI != 2 ]]; then
258     qt4-build_src_configure
259     fi
260    
261     build_directories "${QT4_TARGET_DIRECTORIES}"
262 caleb 1.1 }
263    
264 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
265     # @DESCRIPTION:
266     # Perform the actual installation including some library fixes.
267 caleb 1.4 qt4-build_src_install() {
268 hwoarang 1.42 setqtenv
269 caleb 1.4 install_directories "${QT4_TARGET_DIRECTORIES}"
270 ingmar 1.7 install_qconfigs
271 caleb 1.4 fix_library_files
272     }
273    
274 hwoarang 1.42 # @FUNCTION: setqtenv
275     setqtenv() {
276     # Set up installation directories
277     QTBASEDIR=/usr/$(get_libdir)/qt4
278     QTPREFIXDIR=/usr
279     QTBINDIR=/usr/bin
280     QTLIBDIR=/usr/$(get_libdir)/qt4
281     QMAKE_LIBDIR_QT=${QTLIBDIR}
282     QTPCDIR=/usr/$(get_libdir)/pkgconfig
283     QTDATADIR=/usr/share/qt4
284     QTDOCDIR=/usr/share/doc/qt-${PV}
285     QTHEADERDIR=/usr/include/qt4
286     QTPLUGINDIR=${QTLIBDIR}/plugins
287     QTSYSCONFDIR=/etc/qt4
288     QTTRANSDIR=${QTDATADIR}/translations
289     QTEXAMPLESDIR=${QTDATADIR}/examples
290     QTDEMOSDIR=${QTDATADIR}/demos
291     QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4
292     PLATFORM=$(qt_mkspecs_dir)
293    
294     unset QMAKESPEC
295     }
296    
297 hwoarang 1.34 # @FUNCTION: standard_configure_options
298     # @DESCRIPTION:
299     # Sets up some standard configure options, like libdir (if necessary), whether
300     # debug info is wanted or not.
301 caleb 1.1 standard_configure_options() {
302     local myconf=""
303    
304 ingmar 1.7 [[ $(get_libdir) != "lib" ]] && myconf="${myconf} -L/usr/$(get_libdir)"
305 caleb 1.1
306     # Disable visibility explicitly if gcc version isn't 4
307 ingmar 1.7 if [[ "$(gcc-major-version)" -lt "4" ]]; then
308 caleb 1.1 myconf="${myconf} -no-reduce-exports"
309     fi
310    
311 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
312     if use pch; then
313     myconf="${myconf} -pch"
314     else
315     myconf="${myconf} -no-pch"
316     fi
317    
318 ingmar 1.7 if use debug; then
319     myconf="${myconf} -debug -no-separate-debug-info"
320     else
321     myconf="${myconf} -release -no-separate-debug-info"
322     fi
323 caleb 1.1
324 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
325 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
326     case "$(tc-arch)" in
327 ingmar 1.11 amd64) myconf="${myconf} -arch x86_64" ;;
328     ppc|ppc64) myconf="${myconf} -arch powerpc" ;;
329 ingmar 1.14 x86|x86-*) myconf="${myconf} -arch i386" ;;
330 flameeyes 1.27 alpha|arm|ia64|mips|s390|sparc) myconf="${myconf} -arch $(tc-arch)" ;;
331 ingmar 1.11 hppa|sh) myconf="${myconf} -arch generic" ;;
332 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
333 ingmar 1.11 esac
334    
335 wired 1.48 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build
336     local exceptions=
337     case "${PV}" in
338     4.6.*)
339     if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then
340     exceptions="-no-exceptions"
341     fi
342     ;;
343     *)
344     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
345     ;;
346     esac
347    
348 spatz 1.51 myconf="${myconf} -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
349 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
350     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
351     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
352     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
353 yngwin 1.20 -demosdir ${QTDEMOSDIR} -silent -fast
354 wired 1.48 ${exceptions}
355 aballier 1.28 -reduce-relocations -nomake examples -nomake demos"
356 yngwin 1.39
357 wired 1.48 # Make eclass >= 4.5.x ready
358 hwoarang 1.32 case "${MY_PV}" in
359 wired 1.48 4.5.* | 4.6.* )
360 hwoarang 1.32 myconf="${myconf} -opensource"
361     ;;
362     esac
363 caleb 1.1
364     echo "${myconf}"
365     }
366    
367 hwoarang 1.34 # @FUNCTION: build_directories
368     # @USAGE: < directories >
369     # @DESCRIPTION:
370     # Compiles the code in $QT4_TARGET_DIRECTORIES
371 caleb 1.1 build_directories() {
372     local dirs="$@"
373     for x in ${dirs}; do
374     cd "${S}"/${x}
375 hwoarang 1.42 sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/linux.conf || die
376 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
377 ayoy 1.47 emake CC="@echo compiling \$< && $(tc-getCC)" \
378     CXX="@echo compiling \$< && $(tc-getCXX)" \
379     LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed"
380 caleb 1.1 done
381     }
382    
383 hwoarang 1.34 # @FUNCTION: install_directories
384     # @USAGE: < directories >
385     # @DESCRIPTION:
386     # run emake install in the given directories, which are separated by spaces
387 caleb 1.1 install_directories() {
388     local dirs="$@"
389     for x in ${dirs}; do
390 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
391     emake INSTALL_ROOT="${D}" install || die "emake install failed"
392     popd >/dev/null || die "Can't popd from ${S}/${x}"
393 caleb 1.1 done
394     }
395    
396 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
397     # @DESCRIPTION:
398     # List options that need to be added to QT_CONFIG in qconfig.pri
399     QCONFIG_ADD="${QCONFIG_ADD:-}"
400    
401     # @ECLASS-VARIABLE: QCONFIG_REMOVE
402     # @DESCRIPTION:
403     # List options that need to be removed from QT_CONFIG in qconfig.pri
404     QCONFIG_REMOVE="${QCONFIG_REMOVE:-}"
405    
406     # @ECLASS-VARIABLE: QCONFIG_DEFINE
407     # @DESCRIPTION:
408     # List variables that should be defined at the top of QtCore/qconfig.h
409     QCONFIG_DEFINE="${QCONFIG_DEFINE:-}"
410    
411 hwoarang 1.34 # @FUNCTION: install_qconfigs
412     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
413 ingmar 1.7 install_qconfigs() {
414 zlin 1.9 local x
415     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
416 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
417     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
418     done
419     insinto ${QTDATADIR}/mkspecs/gentoo
420     doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
421 zlin 1.9 fi
422 ingmar 1.7
423 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
424 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
425     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
426     done
427     insinto ${QTHEADERDIR}/Gentoo
428     doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
429     fi
430     }
431    
432 hwoarang 1.34 # @FUNCTION: generate_qconfigs
433     # @DESCRIPTION: Generates gentoo-specific configurations
434 ingmar 1.7 generate_qconfigs() {
435     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
436     local x qconfig_add qconfig_remove qconfig_new
437     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
438     [[ -f ${x} ]] || continue
439     qconfig_add="${qconfig_add} $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
440     qconfig_remove="${qconfig_remove} $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
441     done
442    
443     # these error checks do not use die because dying in pkg_post{inst,rm}
444     # just makes things worse.
445     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
446     # start with the qconfig.pri that qt-core installed
447     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
448     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
449     eerror "cp qconfig failed."
450     return 1
451     fi
452    
453     # generate list of QT_CONFIG entries from the existing list
454     # including qconfig_add and excluding qconfig_remove
455     for x in $(sed -n 's/^QT_CONFIG +=//p' \
456     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
457     hasq ${x} ${qconfig_remove} || qconfig_new="${qconfig_new} ${x}"
458     done
459    
460     # replace the existing QT_CONFIG list with qconfig_new
461     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
462     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
463     eerror "Sed for QT_CONFIG failed"
464     return 1
465     fi
466    
467     # create Gentoo/qconfig.h
468     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
469     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
470     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
471     return 1
472     fi
473     fi
474     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
475     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
476     [[ -f ${x} ]] || continue
477     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
478     done
479     else
480     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
481     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
482     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
483     "${ROOT}${QTDATADIR}" \
484     "${ROOT}${QTHEADERDIR}"/Gentoo \
485     "${ROOT}${QTHEADERDIR}" 2>/dev/null
486     fi
487     fi
488     }
489    
490 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
491     # @DESCRIPTION: Generate configurations when the package is completely removed
492 ingmar 1.7 qt4-build_pkg_postrm() {
493     generate_qconfigs
494 caleb 1.1 }
495    
496 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
497     # @DESCRIPTION: Generate configuration, plus throws a message about possible
498     # breakages and proposed solutions.
499 ingmar 1.7 qt4-build_pkg_postinst() {
500     generate_qconfigs
501 wired 1.52
502     if [[ "${PN}" == "qt-core" ]]; then
503     echo
504     ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
505     ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
506     ewarn "should recompile the packages providing these plugins. Also, make sure you"
507     ewarn "compile the Qt packages, and the packages that depend on it, with the same"
508     ewarn "GCC version and the same USE flag settings (especially the debug flag)."
509     ewarn
510     ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
511     ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
512     ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
513     ewarn "configuration."
514     ewarn
515     ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html"
516     echo
517     fi
518 caleb 1.1 }
519    
520 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
521     # @DESCRIPTION:
522     # Don't need to build qmake, as it's already installed from qt-core
523 caleb 1.1 skip_qmake_build_patch() {
524 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
525     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
526 caleb 1.1 }
527    
528 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
529     # @DESCRIPTION:
530     # Exit the script early by throwing in an exit before all of the .pro files are scanned
531 caleb 1.1 skip_project_generation_patch() {
532     # Exit the script early by throwing in an exit before all of the .pro files are scanned
533 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
534     -i "${S}"/configure || die "Sed failed"
535 caleb 1.1 }
536    
537 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
538     # @DESCRIPTION:
539     # Symlink generated binaries to buildtree so they can be used during compilation
540     # time
541 ingmar 1.7 symlink_binaries_to_buildtree() {
542     for bin in qmake moc uic rcc; do
543     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
544     done
545 caleb 1.1 }
546    
547 hwoarang 1.34 # @FUNCTION: fix_library_files
548     # @DESCRIPTION:
549     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
550     # moves the *.pc-files into the pkgconfig directory
551 caleb 1.1 fix_library_files() {
552 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
553     if [[ -e ${libfile} ]]; then
554     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
555     fi
556     done
557 caleb 1.1
558     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
559 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
560     if [[ -e ${libfile} ]]; then
561     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
562 caleb 1.1
563     # Move .pc files into the pkgconfig directory
564 ingmar 1.7 dodir ${QTPCDIR}
565     mv ${libfile} "${D}"/${QTPCDIR}/ \
566     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
567     fi
568     done
569    
570     # Don't install an empty directory
571     rmdir "${D}"/${QTLIBDIR}/pkgconfig
572 caleb 1.1 }
573    
574 hwoarang 1.34 # @FUNCTION: qt_use
575     # @USAGE: < flag > [ feature ] [ enableval ]
576 yngwin 1.39 # @DESCRIPTION:
577 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
578     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
579     # will be used for that. If [enableval] is not specified, it omits the
580     # assignment-part
581 caleb 1.1 qt_use() {
582 ingmar 1.7 local flag="${1}"
583     local feature="${1}"
584 caleb 1.5 local enableval=
585 caleb 1.1
586 ingmar 1.7 [[ -n ${2} ]] && feature=${2}
587     [[ -n ${3} ]] && enableval="-${3}"
588    
589     if use ${flag}; then
590     echo "${enableval}-${feature}"
591     else
592     echo "-no-${feature}"
593     fi
594     }
595    
596     # @ECLASS-VARIABLE: QT4_BUILT_WITH_USE_CHECK
597     # @DESCRIPTION:
598     # The contents of $QT4_BUILT_WITH_USE_CHECK gets fed to built_with_use
599     # (eutils.eclass), line per line.
600     #
601     # Example:
602     # @CODE
603     # pkg_setup() {
604     # use qt3support && QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK}
605     # ~x11-libs/qt-gui-${PV} qt3support"
606     # qt4-build_check_use
607     # }
608     # @CODE
609    
610     # Run built_with_use on each flag and print appropriate error messages if any
611     # flags are missing
612 hwoarang 1.34
613 ingmar 1.7 _qt_built_with_use() {
614     local missing opt pkg flag flags
615 caleb 1.1
616 ingmar 1.7 if [[ ${1} = "--missing" ]]; then
617     missing="${1} ${2}" && shift 2
618     fi
619     if [[ ${1:0:1} = "-" ]]; then
620     opt=${1} && shift
621     fi
622    
623     pkg=${1} && shift
624    
625     for flag in "${@}"; do
626     flags="${flags} ${flag}"
627     if ! built_with_use ${missing} ${opt} ${pkg} ${flag}; then
628     flags="${flags}*"
629     else
630     [[ ${opt} = "-o" ]] && return 0
631     fi
632     done
633     if [[ "${flags# }" = "${@}" ]]; then
634     return 0
635     fi
636     if [[ ${opt} = "-o" ]]; then
637     eerror "This package requires '${pkg}' to be built with any of the following USE flags: '$*'."
638     else
639     eerror "This package requires '${pkg}' to be built with the following USE flags: '${flags# }'."
640     fi
641     return 1
642     }
643    
644     # @FUNCTION: qt4-build_check_use
645     # @DESCRIPTION:
646     # Check if the listed packages in $QT4_BUILT_WITH_USE_CHECK are built with the
647     # USE flags listed.
648     #
649     # If any of the required USE flags are missing, an eerror will be printed for
650     # each package with missing USE flags.
651     qt4-build_check_use() {
652     local line missing
653     while read line; do
654     [[ -z ${line} ]] && continue
655     if ! _qt_built_with_use ${line}; then
656     missing=true
657     fi
658     done <<< "${QT4_BUILT_WITH_USE_CHECK}"
659     if [[ -n ${missing} ]]; then
660     echo
661     eerror "Flags marked with an * are missing."
662     die "Missing USE flags found"
663     fi
664 caleb 1.1 }
665    
666 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
667     # @RETURN: the specs-directory w/o path
668 yngwin 1.39 # @DESCRIPTION:
669 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
670 caleb 1.1 qt_mkspecs_dir() {
671 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
672     local spec
673 caleb 1.1
674 caleb 1.5 case ${CHOST} in
675     *-freebsd*|*-dragonfly*)
676     spec="freebsd" ;;
677     *-openbsd*)
678     spec="openbsd" ;;
679     *-netbsd*)
680     spec="netbsd" ;;
681 ingmar 1.7 *-darwin*)
682 caleb 1.5 spec="darwin" ;;
683     *-linux-*|*-linux)
684     spec="linux" ;;
685     *)
686 ingmar 1.7 die "Unknown CHOST, no platform choosen."
687 caleb 1.5 esac
688    
689     CXX=$(tc-getCXX)
690     if [[ ${CXX/g++/} != ${CXX} ]]; then
691     spec="${spec}-g++"
692     elif [[ ${CXX/icpc/} != ${CXX} ]]; then
693     spec="${spec}-icc"
694     else
695     die "Unknown compiler ${CXX}."
696     fi
697 hwoarang 1.42 if [[ -n "${LIBDIR/lib}" ]]; then
698     spec="${spec}-${LIBDIR/lib}"
699     fi
700 caleb 1.1
701 caleb 1.5 echo "${spec}"
702 caleb 1.1 }
703    
704 yngwin 1.20 case ${EAPI:-0} in
705     0|1) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postrm pkg_postinst ;;
706     2) EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst ;;
707     esac

  ViewVC Help
Powered by ViewVC 1.1.20