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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.49 - (hide annotations) (download)
Mon Nov 9 19:30:40 2009 UTC (5 years, 1 month ago) by ayoy
Branch: MAIN
Changes since 1.48: +7 -1 lines
Append -mminimal-toc for qt ebuilds on ppc64 - bug #261632

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

  ViewVC Help
Powered by ViewVC 1.1.20