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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.46 - (hide annotations) (download)
Fri Oct 2 16:39:41 2009 UTC (4 years, 6 months ago) by wired
Branch: MAIN
Changes since 1.45: +4 -3 lines
qt4-build.eclass 4.5.3 support

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

  ViewVC Help
Powered by ViewVC 1.1.20