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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.34 - (hide annotations) (download)
Fri May 22 22:21:38 2009 UTC (5 years, 2 months ago) by hwoarang
Branch: MAIN
Changes since 1.33: +84 -2 lines
Prepare eclasses for eclass-manpage package. Clean up qt4.eclass. Thanks to mren and Davide for the help.Fixes bug 209626

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

  ViewVC Help
Powered by ViewVC 1.1.20