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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.56 - (hide annotations) (download)
Tue Dec 22 17:04:07 2009 UTC (4 years, 8 months ago) by abcd
Branch: MAIN
Changes since 1.55: +3 -3 lines
Fix typo (qt4-build-edge -> qt4-build)

1 abcd 1.55 # Copyright 1999-2009 Gentoo Foundation
2 caleb 1.1 # Distributed under the terms of the GNU General Public License v2
3 abcd 1.56 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.55 2009/12/22 16:04:13 abcd 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 abcd 1.55 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 abcd 1.55
49     MY_PV=${PV/_/-}
50 wired 1.48
51     if version_is_at_least 4.5.99999999 ${PV} ; then
52 abcd 1.55 MY_P=qt-everywhere-opensource-src-${MY_PV}
53 wired 1.48 else
54 abcd 1.55 MY_P=qt-x11-opensource-src-${MY_PV}
55 wired 1.48 fi
56 abcd 1.55
57 ingmar 1.11 S=${WORKDIR}/${MY_P}
58 ingmar 1.7
59 hwoarang 1.44 HOMEPAGE="http://qt.nokia.com/"
60 abcd 1.55 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
61 ingmar 1.11
62 abcd 1.55 LICENSE="|| ( LGPL-2.1 GPL-3 )"
63 yngwin 1.25
64 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
65     # @DESCRIPTION:
66 abcd 1.55 # Sets up PATH and LD_LIBRARY_PATH
67 caleb 1.1 qt4-build_pkg_setup() {
68 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
69     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
70 yngwin 1.20
71 abcd 1.55 # Make sure ebuilds use the required EAPI
72     if [[ ${EAPI} != 2 ]]; then
73     eerror "The qt4-build eclass requires EAPI=2, but this ebuild does not"
74     eerror "have EAPI=2 set. The ebuild author or editor failed. This ebuild needs"
75 abcd 1.56 eerror "to be fixed. Using qt4-build eclass without EAPI=2 will fail."
76     die "qt4-build eclass requires EAPI=2"
77 yngwin 1.20 fi
78 caleb 1.1
79 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
80 yngwin 1.20 ewarn "Using a GCC version lower than 4.1 is not supported!"
81     echo
82 gengor 1.31 ebeep 3
83 yngwin 1.20 fi
84 wired 1.52
85 abcd 1.55 if [[ ${P} == qt-core-4.6.0_rc1 ]]; then
86 wired 1.52 ewarn
87     ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1."
88     ewarn "If you are upgrading from 4.6.0_beta1, you'll have to"
89     ewarn "re-emerge everything that depends on Qt."
90     ewarn "Use the following command:"
91     ewarn
92 deathwing00 1.53 ewarn " emerge -av1 \$(for i in \$(qlist -IC x11-libs/qt-);"
93     ewarn " do equery -q d \$i | grep -v 'x11-libs/qt-' |"
94     ewarn " sed \"s/^/=/\"; done)"
95 abcd 1.55 ewarn
96 wired 1.52 ewarn "YOU'VE BEEN WARNED"
97     ewarn
98     ebeep 3
99     fi
100 abcd 1.55
101 caleb 1.1 }
102    
103 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
104     # @DESCRIPTION:
105     # Arguments for build_target_directories. Takes the directories, in which the
106     # code should be compiled. This is a space-separated list
107    
108     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
109     # @DESCRIPTION:
110     # Space separated list including the directories that will be extracted from Qt
111     # tarball
112    
113     # @FUNCTION: qt4-build_src_unpack
114     # @DESCRIPTION:
115     # Unpacks the sources
116 yngwin 1.20 qt4-build_src_unpack() {
117 hwoarang 1.42 setqtenv
118 abcd 1.55 local target targets=
119     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
120 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
121 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
122 abcd 1.55 targets+=" ${MY_P}/${target}"
123 ingmar 1.11 done
124    
125 abcd 1.55 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
126     tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
127 ingmar 1.11 }
128    
129 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
130     # @DESCRIPTION:
131     # In case you have patches to apply, specify them in PATCHES variable. Make sure
132     # to specify the full path. This variable is necessary for src_prepare phase.
133     # example:
134     # PATCHES="${FILESDIR}"/mypatch.patch
135     # ${FILESDIR}"/mypatch2.patch"
136     #
137 hwoarang 1.34
138     # @FUNCTION: qt4-build_src_prepare
139     # @DESCRIPTION:
140     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
141     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
142 yngwin 1.20 qt4-build_src_prepare() {
143 hwoarang 1.42 setqtenv
144 yngwin 1.20 cd "${S}"
145    
146 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
147     skip_qmake_build_patch
148     skip_project_generation_patch
149     symlink_binaries_to_buildtree
150     fi
151 hwoarang 1.24
152 hwoarang 1.54 # Bug 282984 && Bug 295530
153     sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \
154 ayoy 1.50 -i configure || die "sed qmake compilers failed"
155 hwoarang 1.54 sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX):" \
156 ayoy 1.50 -i config.tests/unix/compile.test || die "sed test compilers failed"
157    
158 hwoarang 1.21 # Bug 178652
159 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
160 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
161     append-flags -fno-gcse
162 gengor 1.18 fi
163    
164 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
165 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
166 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
167     append-cxxflags -fno-stack-protector
168     # Bug 253127
169 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
170     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
171     fi
172    
173 ayoy 1.49 # Bug 261632
174     if use ppc64; then
175     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
176     append-flags -mminimal-toc
177     fi
178    
179 hwoarang 1.24 # Bug 172219
180 ingmar 1.7 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
181     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
182     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
183     -e "s:X11R6/::" \
184     -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
185    
186     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
187     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
188     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \
189     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
190 yngwin 1.39
191 hwoarang 1.37 base_src_prepare
192 ingmar 1.7 }
193    
194 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
195     # @DESCRIPTION:
196     # Default configure phase
197 yngwin 1.20 qt4-build_src_configure() {
198 hwoarang 1.42 setqtenv
199 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
200    
201     echo ./configure ${myconf}
202     ./configure ${myconf} || die "./configure failed"
203 tommy 1.43 myconf=""
204 yngwin 1.20 }
205 ingmar 1.7
206 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
207     # @DESCRIPTION: Actual compile phase
208 yngwin 1.20 qt4-build_src_compile() {
209 hwoarang 1.42 setqtenv
210 yngwin 1.20
211 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
212 caleb 1.1 }
213    
214 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
215     # @DESCRIPTION:
216     # Perform the actual installation including some library fixes.
217 caleb 1.4 qt4-build_src_install() {
218 hwoarang 1.42 setqtenv
219 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
220 ingmar 1.7 install_qconfigs
221 caleb 1.4 fix_library_files
222     }
223    
224 hwoarang 1.42 # @FUNCTION: setqtenv
225     setqtenv() {
226     # Set up installation directories
227     QTBASEDIR=/usr/$(get_libdir)/qt4
228     QTPREFIXDIR=/usr
229     QTBINDIR=/usr/bin
230     QTLIBDIR=/usr/$(get_libdir)/qt4
231     QMAKE_LIBDIR_QT=${QTLIBDIR}
232     QTPCDIR=/usr/$(get_libdir)/pkgconfig
233     QTDATADIR=/usr/share/qt4
234     QTDOCDIR=/usr/share/doc/qt-${PV}
235     QTHEADERDIR=/usr/include/qt4
236     QTPLUGINDIR=${QTLIBDIR}/plugins
237     QTSYSCONFDIR=/etc/qt4
238     QTTRANSDIR=${QTDATADIR}/translations
239     QTEXAMPLESDIR=${QTDATADIR}/examples
240     QTDEMOSDIR=${QTDATADIR}/demos
241     QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4
242     PLATFORM=$(qt_mkspecs_dir)
243    
244     unset QMAKESPEC
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 abcd 1.55 local myconf=
253 caleb 1.1
254 abcd 1.55 [[ $(get_libdir) != lib ]] && myconf+=" -L/usr/$(get_libdir)"
255 caleb 1.1
256     # Disable visibility explicitly if gcc version isn't 4
257 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
258     myconf+=" -no-reduce-exports"
259 caleb 1.1 fi
260    
261 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
262 abcd 1.55 myconf+=" $(qt_use pch)"
263 ingmar 1.12
264 ingmar 1.7 if use debug; then
265 abcd 1.55 myconf+=" -debug"
266 ingmar 1.7 else
267 abcd 1.55 myconf+=" -release"
268 ingmar 1.7 fi
269 abcd 1.55 myconf+=" -no-separate-debug-info"
270 caleb 1.1
271 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
272 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
273     case "$(tc-arch)" in
274 abcd 1.55 amd64) myconf+=" -arch x86_64" ;;
275     ppc|ppc64) myconf+=" -arch powerpc" ;;
276     x86|x86-*) myconf+=" -arch i386" ;;
277     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
278     hppa|sh) myconf+=" -arch generic" ;;
279 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
280 ingmar 1.11 esac
281    
282 wired 1.48 # 4.6: build qt-core with exceptions or qt-xmlpatterns won't build
283     local exceptions=
284     case "${PV}" in
285     4.6.*)
286     if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then
287     exceptions="-no-exceptions"
288     fi
289     ;;
290     *)
291     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
292     ;;
293     esac
294    
295 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
296 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
297     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
298     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
299     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
300 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
301 wired 1.48 ${exceptions}
302 aballier 1.28 -reduce-relocations -nomake examples -nomake demos"
303 yngwin 1.39
304 caleb 1.1 echo "${myconf}"
305     }
306    
307 hwoarang 1.34 # @FUNCTION: build_directories
308     # @USAGE: < directories >
309     # @DESCRIPTION:
310     # Compiles the code in $QT4_TARGET_DIRECTORIES
311 caleb 1.1 build_directories() {
312 abcd 1.55 for x in "$@"; do
313 caleb 1.1 cd "${S}"/${x}
314 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
315 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
316 ayoy 1.47 emake CC="@echo compiling \$< && $(tc-getCC)" \
317     CXX="@echo compiling \$< && $(tc-getCXX)" \
318     LINK="@echo linking \$@ && $(tc-getCXX)" || 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 abcd 1.55 for x in "$@"; do
328 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
329     emake INSTALL_ROOT="${D}" install || die "emake install failed"
330     popd >/dev/null || die "Can't popd from ${S}/${x}"
331 caleb 1.1 done
332     }
333    
334 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
335     # @DESCRIPTION:
336     # List options that need to be added to QT_CONFIG in qconfig.pri
337 abcd 1.55 : ${QCONFIG_ADD:=}
338 ingmar 1.7
339     # @ECLASS-VARIABLE: QCONFIG_REMOVE
340     # @DESCRIPTION:
341     # List options that need to be removed from QT_CONFIG in qconfig.pri
342 abcd 1.55 : ${QCONFIG_REMOVE:=}
343 ingmar 1.7
344     # @ECLASS-VARIABLE: QCONFIG_DEFINE
345     # @DESCRIPTION:
346     # List variables that should be defined at the top of QtCore/qconfig.h
347 abcd 1.55 : ${QCONFIG_DEFINE:=}
348 ingmar 1.7
349 hwoarang 1.34 # @FUNCTION: install_qconfigs
350     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
351 ingmar 1.7 install_qconfigs() {
352 zlin 1.9 local x
353     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
354 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
355     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
356     done
357     insinto ${QTDATADIR}/mkspecs/gentoo
358     doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
359 zlin 1.9 fi
360 ingmar 1.7
361 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
362 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
363     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
364     done
365     insinto ${QTHEADERDIR}/Gentoo
366     doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
367     fi
368     }
369    
370 hwoarang 1.34 # @FUNCTION: generate_qconfigs
371     # @DESCRIPTION: Generates gentoo-specific configurations
372 ingmar 1.7 generate_qconfigs() {
373     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
374     local x qconfig_add qconfig_remove qconfig_new
375     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
376     [[ -f ${x} ]] || continue
377 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
378     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
379 ingmar 1.7 done
380    
381     # these error checks do not use die because dying in pkg_post{inst,rm}
382     # just makes things worse.
383     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
384     # start with the qconfig.pri that qt-core installed
385     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
386     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
387     eerror "cp qconfig failed."
388     return 1
389     fi
390    
391     # generate list of QT_CONFIG entries from the existing list
392     # including qconfig_add and excluding qconfig_remove
393     for x in $(sed -n 's/^QT_CONFIG +=//p' \
394     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
395 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
396 ingmar 1.7 done
397    
398     # replace the existing QT_CONFIG list with qconfig_new
399     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
400     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
401     eerror "Sed for QT_CONFIG failed"
402     return 1
403     fi
404    
405     # create Gentoo/qconfig.h
406     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
407     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
408     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
409     return 1
410     fi
411     fi
412     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
413     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
414     [[ -f ${x} ]] || continue
415     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
416     done
417     else
418     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
419     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
420     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
421     "${ROOT}${QTDATADIR}" \
422     "${ROOT}${QTHEADERDIR}"/Gentoo \
423     "${ROOT}${QTHEADERDIR}" 2>/dev/null
424     fi
425     fi
426     }
427    
428 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
429     # @DESCRIPTION: Generate configurations when the package is completely removed
430 ingmar 1.7 qt4-build_pkg_postrm() {
431     generate_qconfigs
432 caleb 1.1 }
433    
434 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
435     # @DESCRIPTION: Generate configuration, plus throws a message about possible
436     # breakages and proposed solutions.
437 ingmar 1.7 qt4-build_pkg_postinst() {
438     generate_qconfigs
439 wired 1.52
440     if [[ "${PN}" == "qt-core" ]]; then
441     echo
442     ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt"
443     ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you"
444     ewarn "should recompile the packages providing these plugins. Also, make sure you"
445     ewarn "compile the Qt packages, and the packages that depend on it, with the same"
446     ewarn "GCC version and the same USE flag settings (especially the debug flag)."
447     ewarn
448     ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any"
449     ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report,"
450     ewarn "make sure all your Qt4 packages are up-to-date and built with the same"
451     ewarn "configuration."
452     ewarn
453     ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html"
454     echo
455     fi
456 caleb 1.1 }
457    
458 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
459     # @DESCRIPTION:
460     # Don't need to build qmake, as it's already installed from qt-core
461 caleb 1.1 skip_qmake_build_patch() {
462 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
463     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
464 caleb 1.1 }
465    
466 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
467     # @DESCRIPTION:
468     # Exit the script early by throwing in an exit before all of the .pro files are scanned
469 caleb 1.1 skip_project_generation_patch() {
470     # Exit the script early by throwing in an exit before all of the .pro files are scanned
471 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
472     -i "${S}"/configure || die "Sed failed"
473 caleb 1.1 }
474    
475 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
476     # @DESCRIPTION:
477     # Symlink generated binaries to buildtree so they can be used during compilation
478     # time
479 ingmar 1.7 symlink_binaries_to_buildtree() {
480     for bin in qmake moc uic rcc; do
481     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
482     done
483 caleb 1.1 }
484    
485 hwoarang 1.34 # @FUNCTION: fix_library_files
486     # @DESCRIPTION:
487     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
488     # moves the *.pc-files into the pkgconfig directory
489 caleb 1.1 fix_library_files() {
490 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
491     if [[ -e ${libfile} ]]; then
492     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
493     fi
494     done
495 caleb 1.1
496     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
497 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
498     if [[ -e ${libfile} ]]; then
499     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
500 caleb 1.1
501 abcd 1.55 # Move .pc files into the pkgconfig directory
502 ingmar 1.7 dodir ${QTPCDIR}
503     mv ${libfile} "${D}"/${QTPCDIR}/ \
504     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
505     fi
506     done
507    
508     # Don't install an empty directory
509     rmdir "${D}"/${QTLIBDIR}/pkgconfig
510 caleb 1.1 }
511    
512 hwoarang 1.34 # @FUNCTION: qt_use
513     # @USAGE: < flag > [ feature ] [ enableval ]
514 yngwin 1.39 # @DESCRIPTION:
515 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
516     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
517     # will be used for that. If [enableval] is not specified, it omits the
518     # assignment-part
519 caleb 1.1 qt_use() {
520 abcd 1.55 local flag=$1
521     local feature=$1
522 caleb 1.5 local enableval=
523 caleb 1.1
524 abcd 1.55 [[ -n $2 ]] && feature=$2
525     [[ -n $3 ]] && enableval=-$3
526 ingmar 1.7
527     if use ${flag}; then
528     echo "${enableval}-${feature}"
529     else
530     echo "-no-${feature}"
531     fi
532     }
533    
534 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
535     # @RETURN: the specs-directory w/o path
536 yngwin 1.39 # @DESCRIPTION:
537 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
538 caleb 1.1 qt_mkspecs_dir() {
539 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
540     local spec
541 caleb 1.1
542 caleb 1.5 case ${CHOST} in
543     *-freebsd*|*-dragonfly*)
544 abcd 1.55 spec=freebsd ;;
545 caleb 1.5 *-openbsd*)
546 abcd 1.55 spec=openbsd ;;
547 caleb 1.5 *-netbsd*)
548 abcd 1.55 spec=netbsd ;;
549 ingmar 1.7 *-darwin*)
550 abcd 1.55 spec=darwin ;;
551 caleb 1.5 *-linux-*|*-linux)
552 abcd 1.55 spec=linux ;;
553 caleb 1.5 *)
554 ingmar 1.7 die "Unknown CHOST, no platform choosen."
555 caleb 1.5 esac
556    
557     CXX=$(tc-getCXX)
558 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
559     spec+=-g++
560     elif [[ ${CXX} == *icpc* ]]; then
561     spec+=-icc
562 caleb 1.5 else
563     die "Unknown compiler ${CXX}."
564     fi
565 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
566     spec+=-${LIBDIR/lib}
567 hwoarang 1.42 fi
568 caleb 1.1
569 caleb 1.5 echo "${spec}"
570 caleb 1.1 }
571    
572 abcd 1.55 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst

  ViewVC Help
Powered by ViewVC 1.1.20