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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.37 - (hide annotations) (download)
Fri May 29 20:58:54 2009 UTC (5 years, 1 month ago) by hwoarang
Branch: MAIN
Changes since 1.36: +12 -3 lines
Use autopatcher from base eclass

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

  ViewVC Help
Powered by ViewVC 1.1.20