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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.36 - (hide annotations) (download)
Fri May 29 14:48:00 2009 UTC (5 years, 5 months ago) by hwoarang
Branch: MAIN
Changes since 1.35: +31 -2 lines
Make qt-modules be on the same version. Thanks to Alex 'wired' Alexander

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

  ViewVC Help
Powered by ViewVC 1.1.20