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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.47 - (hide annotations) (download)
Sat Oct 3 19:29:04 2009 UTC (5 years, 2 months ago) by ayoy
Branch: MAIN
Changes since 1.46: +4 -2 lines
Trying to fix bug #282984 in a clean way. Passing system compilers to emake in build_directories()

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

  ViewVC Help
Powered by ViewVC 1.1.20