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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.48 - (hide annotations) (download)
Fri Oct 16 15:02:15 2009 UTC (4 years, 8 months ago) by wired
Branch: MAIN
Changes since 1.47: +28 -9 lines
getting ready for Qt 4.6

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

  ViewVC Help
Powered by ViewVC 1.1.20