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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.38 - (hide annotations) (download)
Sat Jun 6 22:43:27 2009 UTC (5 years, 2 months ago) by hwoarang
Branch: MAIN
Changes since 1.37: +2 -7 lines
Added -platform parameter on configure. Fixes bug 270475

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.38 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.37 2009/05/29 20:58:54 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.38 myconf="${myconf} -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license -no-rpath
295 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
296     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
297     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
298     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
299 yngwin 1.20 -demosdir ${QTDEMOSDIR} -silent -fast
300     $([[ ${PN} == qt-xmlpatterns ]] || echo -no-exceptions)
301 aballier 1.28 -reduce-relocations -nomake examples -nomake demos"
302 hwoarang 1.32
303     # Make eclass 4.5.{1,2} ready
304     case "${MY_PV}" in
305     4.5.1 | 4.5.2)
306     myconf="${myconf} -opensource"
307     ;;
308     esac
309 caleb 1.1
310     echo "${myconf}"
311     }
312    
313 hwoarang 1.34 # @FUNCTION: build_directories
314     # @USAGE: < directories >
315     # @DESCRIPTION:
316     # Compiles the code in $QT4_TARGET_DIRECTORIES
317 caleb 1.1 build_directories() {
318     local dirs="$@"
319     for x in ${dirs}; do
320     cd "${S}"/${x}
321 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
322     emake || die "emake failed"
323 caleb 1.1 done
324     }
325    
326 hwoarang 1.34 # @FUNCTION: install_directories
327     # @USAGE: < directories >
328     # @DESCRIPTION:
329     # run emake install in the given directories, which are separated by spaces
330 caleb 1.1 install_directories() {
331     local dirs="$@"
332     for x in ${dirs}; do
333 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
334     emake INSTALL_ROOT="${D}" install || die "emake install failed"
335     popd >/dev/null || die "Can't popd from ${S}/${x}"
336 caleb 1.1 done
337     }
338    
339 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
340     # @DESCRIPTION:
341     # List options that need to be added to QT_CONFIG in qconfig.pri
342     QCONFIG_ADD="${QCONFIG_ADD:-}"
343    
344     # @ECLASS-VARIABLE: QCONFIG_REMOVE
345     # @DESCRIPTION:
346     # List options that need to be removed from QT_CONFIG in qconfig.pri
347     QCONFIG_REMOVE="${QCONFIG_REMOVE:-}"
348    
349     # @ECLASS-VARIABLE: QCONFIG_DEFINE
350     # @DESCRIPTION:
351     # List variables that should be defined at the top of QtCore/qconfig.h
352     QCONFIG_DEFINE="${QCONFIG_DEFINE:-}"
353    
354 hwoarang 1.34 # @FUNCTION: install_qconfigs
355     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
356 ingmar 1.7 install_qconfigs() {
357 zlin 1.9 local x
358     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
359 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
360     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
361     done
362     insinto ${QTDATADIR}/mkspecs/gentoo
363     doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
364 zlin 1.9 fi
365 ingmar 1.7
366 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
367 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
368     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
369     done
370     insinto ${QTHEADERDIR}/Gentoo
371     doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
372     fi
373     }
374    
375 hwoarang 1.34 # @FUNCTION: generate_qconfigs
376     # @DESCRIPTION: Generates gentoo-specific configurations
377 ingmar 1.7 generate_qconfigs() {
378     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
379     local x qconfig_add qconfig_remove qconfig_new
380     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
381     [[ -f ${x} ]] || continue
382     qconfig_add="${qconfig_add} $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
383     qconfig_remove="${qconfig_remove} $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
384     done
385    
386     # these error checks do not use die because dying in pkg_post{inst,rm}
387     # just makes things worse.
388     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
389     # start with the qconfig.pri that qt-core installed
390     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
391     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
392     eerror "cp qconfig failed."
393     return 1
394     fi
395    
396     # generate list of QT_CONFIG entries from the existing list
397     # including qconfig_add and excluding qconfig_remove
398     for x in $(sed -n 's/^QT_CONFIG +=//p' \
399     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
400     hasq ${x} ${qconfig_remove} || qconfig_new="${qconfig_new} ${x}"
401     done
402    
403     # replace the existing QT_CONFIG list with qconfig_new
404     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
405     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
406     eerror "Sed for QT_CONFIG failed"
407     return 1
408     fi
409    
410     # create Gentoo/qconfig.h
411     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
412     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
413     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
414     return 1
415     fi
416     fi
417     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
418     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
419     [[ -f ${x} ]] || continue
420     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
421     done
422     else
423     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
424     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
425     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
426     "${ROOT}${QTDATADIR}" \
427     "${ROOT}${QTHEADERDIR}"/Gentoo \
428     "${ROOT}${QTHEADERDIR}" 2>/dev/null
429     fi
430     fi
431     }
432    
433 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
434     # @DESCRIPTION: Generate configurations when the package is completely removed
435 ingmar 1.7 qt4-build_pkg_postrm() {
436     generate_qconfigs
437 caleb 1.1 }
438    
439 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
440     # @DESCRIPTION: Generate configuration, plus throws a message about possible
441     # breakages and proposed solutions.
442 ingmar 1.7 qt4-build_pkg_postinst() {
443     generate_qconfigs
444 yngwin 1.17 echo
445     ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
446     ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
447     ewarn "should recompile the packages providing these plugins. Also, make sure you"
448     ewarn "compile the Qt packages, and the packages that depend on it, with the same"
449     ewarn "GCC version and the same USE flag settings (especially the debug flag)."
450     ewarn
451     ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
452     ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
453     ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
454     ewarn "configuration."
455     ewarn
456     ewarn "For more information, see http://doc.trolltech.com/4.4/plugins-howto.html"
457     echo
458 caleb 1.1 }
459    
460 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
461     # @DESCRIPTION:
462     # Don't need to build qmake, as it's already installed from qt-core
463 caleb 1.1 skip_qmake_build_patch() {
464 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
465     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
466 caleb 1.1 }
467    
468 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
469     # @DESCRIPTION:
470     # Exit the script early by throwing in an exit before all of the .pro files are scanned
471 caleb 1.1 skip_project_generation_patch() {
472     # Exit the script early by throwing in an exit before all of the .pro files are scanned
473 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
474     -i "${S}"/configure || die "Sed failed"
475 caleb 1.1 }
476    
477 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
478     # @DESCRIPTION:
479     # Symlink generated binaries to buildtree so they can be used during compilation
480     # time
481 ingmar 1.7 symlink_binaries_to_buildtree() {
482     for bin in qmake moc uic rcc; do
483     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
484     done
485 caleb 1.1 }
486    
487 hwoarang 1.34 # @FUNCTION: fix_library_files
488     # @DESCRIPTION:
489     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
490     # moves the *.pc-files into the pkgconfig directory
491 caleb 1.1 fix_library_files() {
492 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
493     if [[ -e ${libfile} ]]; then
494     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
495     fi
496     done
497 caleb 1.1
498     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
499 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
500     if [[ -e ${libfile} ]]; then
501     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
502 caleb 1.1
503     # Move .pc files into the pkgconfig directory
504 ingmar 1.7 dodir ${QTPCDIR}
505     mv ${libfile} "${D}"/${QTPCDIR}/ \
506     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
507     fi
508     done
509    
510     # Don't install an empty directory
511     rmdir "${D}"/${QTLIBDIR}/pkgconfig
512 caleb 1.1 }
513    
514 hwoarang 1.34 # @FUNCTION: qt_use
515     # @USAGE: < flag > [ feature ] [ enableval ]
516     # @DESCRIPTION:
517     # This will echo "${enableval}-${feature}" if <flag> is enabled, or
518     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
519     # will be used for that. If [enableval] is not specified, it omits the
520     # assignment-part
521 caleb 1.1 qt_use() {
522 ingmar 1.7 local flag="${1}"
523     local feature="${1}"
524 caleb 1.5 local enableval=
525 caleb 1.1
526 ingmar 1.7 [[ -n ${2} ]] && feature=${2}
527     [[ -n ${3} ]] && enableval="-${3}"
528    
529     if use ${flag}; then
530     echo "${enableval}-${feature}"
531     else
532     echo "-no-${feature}"
533     fi
534     }
535    
536     # @ECLASS-VARIABLE: QT4_BUILT_WITH_USE_CHECK
537     # @DESCRIPTION:
538     # The contents of $QT4_BUILT_WITH_USE_CHECK gets fed to built_with_use
539     # (eutils.eclass), line per line.
540     #
541     # Example:
542     # @CODE
543     # pkg_setup() {
544     # use qt3support && QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK}
545     # ~x11-libs/qt-gui-${PV} qt3support"
546     # qt4-build_check_use
547     # }
548     # @CODE
549    
550     # Run built_with_use on each flag and print appropriate error messages if any
551     # flags are missing
552 hwoarang 1.34
553 ingmar 1.7 _qt_built_with_use() {
554     local missing opt pkg flag flags
555 caleb 1.1
556 ingmar 1.7 if [[ ${1} = "--missing" ]]; then
557     missing="${1} ${2}" && shift 2
558     fi
559     if [[ ${1:0:1} = "-" ]]; then
560     opt=${1} && shift
561     fi
562    
563     pkg=${1} && shift
564    
565     for flag in "${@}"; do
566     flags="${flags} ${flag}"
567     if ! built_with_use ${missing} ${opt} ${pkg} ${flag}; then
568     flags="${flags}*"
569     else
570     [[ ${opt} = "-o" ]] && return 0
571     fi
572     done
573     if [[ "${flags# }" = "${@}" ]]; then
574     return 0
575     fi
576     if [[ ${opt} = "-o" ]]; then
577     eerror "This package requires '${pkg}' to be built with any of the following USE flags: '$*'."
578     else
579     eerror "This package requires '${pkg}' to be built with the following USE flags: '${flags# }'."
580     fi
581     return 1
582     }
583    
584     # @FUNCTION: qt4-build_check_use
585     # @DESCRIPTION:
586     # Check if the listed packages in $QT4_BUILT_WITH_USE_CHECK are built with the
587     # USE flags listed.
588     #
589     # If any of the required USE flags are missing, an eerror will be printed for
590     # each package with missing USE flags.
591     qt4-build_check_use() {
592     local line missing
593     while read line; do
594     [[ -z ${line} ]] && continue
595     if ! _qt_built_with_use ${line}; then
596     missing=true
597     fi
598     done <<< "${QT4_BUILT_WITH_USE_CHECK}"
599     if [[ -n ${missing} ]]; then
600     echo
601     eerror "Flags marked with an * are missing."
602     die "Missing USE flags found"
603     fi
604 caleb 1.1 }
605    
606 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
607     # @RETURN: the specs-directory w/o path
608     # @DESCRIPTION:
609     # Allows us to define which mkspecs dir we want to use.
610 caleb 1.1 qt_mkspecs_dir() {
611 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
612     local spec
613 caleb 1.1
614 caleb 1.5 case ${CHOST} in
615     *-freebsd*|*-dragonfly*)
616     spec="freebsd" ;;
617     *-openbsd*)
618     spec="openbsd" ;;
619     *-netbsd*)
620     spec="netbsd" ;;
621 ingmar 1.7 *-darwin*)
622 caleb 1.5 spec="darwin" ;;
623     *-linux-*|*-linux)
624     spec="linux" ;;
625     *)
626 ingmar 1.7 die "Unknown CHOST, no platform choosen."
627 caleb 1.5 esac
628    
629     CXX=$(tc-getCXX)
630     if [[ ${CXX/g++/} != ${CXX} ]]; then
631     spec="${spec}-g++"
632     elif [[ ${CXX/icpc/} != ${CXX} ]]; then
633     spec="${spec}-icc"
634     else
635     die "Unknown compiler ${CXX}."
636     fi
637 caleb 1.1
638 caleb 1.5 echo "${spec}"
639 caleb 1.1 }
640    
641 yngwin 1.20 case ${EAPI:-0} in
642     0|1) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postrm pkg_postinst ;;
643     2) EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst ;;
644     esac

  ViewVC Help
Powered by ViewVC 1.1.20