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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.42 - (hide annotations) (download)
Mon Jul 13 19:55:30 2009 UTC (5 years, 5 months ago) by hwoarang
Branch: MAIN
Changes since 1.41: +33 -18 lines
Apply patch to support multilib portage.Thanks to Tommy[D]

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

  ViewVC Help
Powered by ViewVC 1.1.20