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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.67 - (hide annotations) (download)
Sat May 22 15:22:46 2010 UTC (4 years, 4 months ago) by wired
Branch: MAIN
Changes since 1.66: +12 -20 lines
fix bug 320851.
also apply ayoy's fixes:
- Remove changes to mkspecs in favor of setting correct env variables in configure script.
- Make compilation output more verbose.

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 wired 1.67 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.66 2010/03/24 14:36:28 yngwin 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.59 MY_PV=${PV/_/-}
18     if version_is_at_least 4.5.99999999; then
19     MY_P=qt-everywhere-opensource-src-${MY_PV}
20 wired 1.65 [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE="+exceptions"
21 abcd 1.59 else
22     MY_P=qt-x11-opensource-src-${MY_PV}
23     fi
24    
25     HOMEPAGE="http://qt.nokia.com/"
26     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
27    
28     LICENSE="|| ( LGPL-2.1 GPL-3 )"
29 wired 1.65 IUSE+=" debug pch aqua"
30 abcd 1.59
31 hwoarang 1.36 RDEPEND="
32     !<x11-libs/qt-assistant-${PV}
33     !>x11-libs/qt-assistant-${PV}-r9999
34     !<x11-libs/qt-core-${PV}
35     !>x11-libs/qt-core-${PV}-r9999
36     !<x11-libs/qt-dbus-${PV}
37     !>x11-libs/qt-dbus-${PV}-r9999
38     !<x11-libs/qt-demo-${PV}
39     !>x11-libs/qt-demo-${PV}-r9999
40     !<x11-libs/qt-gui-${PV}
41     !>x11-libs/qt-gui-${PV}-r9999
42 wired 1.65 !<x11-libs/qt-multimedia-${PV}
43     !>x11-libs/qt-multimedia-${PV}-r9999
44 hwoarang 1.36 !<x11-libs/qt-opengl-${PV}
45     !>x11-libs/qt-opengl-${PV}-r9999
46     !<x11-libs/qt-phonon-${PV}
47     !>x11-libs/qt-phonon-${PV}-r9999
48     !<x11-libs/qt-qt3support-${PV}
49     !>x11-libs/qt-qt3support-${PV}-r9999
50     !<x11-libs/qt-script-${PV}
51     !>x11-libs/qt-script-${PV}-r9999
52     !<x11-libs/qt-sql-${PV}
53     !>x11-libs/qt-sql-${PV}-r9999
54     !<x11-libs/qt-svg-${PV}
55     !>x11-libs/qt-svg-${PV}-r9999
56     !<x11-libs/qt-test-${PV}
57     !>x11-libs/qt-test-${PV}-r9999
58     !<x11-libs/qt-webkit-${PV}
59     !>x11-libs/qt-webkit-${PV}-r9999
60     !<x11-libs/qt-xmlpatterns-${PV}
61     !>x11-libs/qt-xmlpatterns-${PV}-r9999
62     "
63 abcd 1.55
64 abcd 1.59 S=${WORKDIR}/${MY_P}
65 yngwin 1.25
66 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
67     # @DESCRIPTION:
68 abcd 1.57 # Sets up S, MY_P, PATH, and LD_LIBRARY_PATH
69 caleb 1.1 qt4-build_pkg_setup() {
70 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
71    
72 yngwin 1.66 # Protect users by not allowing downgrades between releases
73     # Downgrading revisions within the same release should be allowed
74     if has_version '>'${CATEGORY}/${P}-r9999 ; then
75     if [[ -z $I_KNOW_WHAT_I_AM_DOING ]] ; then
76     eerror "Sanity check to keep you from breaking your system:"
77     eerror " Downgrading Qt is completely unsupported and will break your system!"
78     die "aborting to save your system"
79     else
80     ewarn "Downgrading Qt is completely unsupported and will break your system!"
81     fi
82     fi
83 abcd 1.57
84 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
85 abcd 1.57 if [[ ${CHOST} != *-darwin* ]]; then
86     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
87     else
88     DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
89 yngwin 1.63 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
90     # platform detection. Note: needs to come before any directories to
91     # avoid extract failure.
92     [[ ${CHOST} == *-apple-darwin* ]] && \
93 yngwin 1.66 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
94     ${QT4_EXTRACT_DIRECTORIES}"
95 abcd 1.57 fi
96 yngwin 1.20
97 abcd 1.55 # Make sure ebuilds use the required EAPI
98 abcd 1.57 if [[ ${EAPI} != [23] ]]; then
99     eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
100     eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
101     eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
102     die "qt4-build eclass requires EAPI=2 or EAPI=3"
103 yngwin 1.20 fi
104 caleb 1.1
105 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
106 yngwin 1.20 ewarn "Using a GCC version lower than 4.1 is not supported!"
107     fi
108 caleb 1.1 }
109    
110 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
111     # @DESCRIPTION:
112     # Arguments for build_target_directories. Takes the directories, in which the
113     # code should be compiled. This is a space-separated list
114    
115     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
116     # @DESCRIPTION:
117     # Space separated list including the directories that will be extracted from Qt
118     # tarball
119    
120     # @FUNCTION: qt4-build_src_unpack
121     # @DESCRIPTION:
122     # Unpacks the sources
123 yngwin 1.20 qt4-build_src_unpack() {
124 hwoarang 1.42 setqtenv
125 abcd 1.55 local target targets=
126     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
127 ingmar 1.11 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
128 ingmar 1.13 ${QT4_EXTRACT_DIRECTORIES}; do
129 abcd 1.55 targets+=" ${MY_P}/${target}"
130 ingmar 1.11 done
131    
132 abcd 1.55 echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
133 vapier 1.62 tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
134 ingmar 1.11 }
135    
136 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
137     # @DESCRIPTION:
138     # In case you have patches to apply, specify them in PATCHES variable. Make sure
139     # to specify the full path. This variable is necessary for src_prepare phase.
140     # example:
141     # PATCHES="${FILESDIR}"/mypatch.patch
142     # ${FILESDIR}"/mypatch2.patch"
143     #
144 hwoarang 1.34
145     # @FUNCTION: qt4-build_src_prepare
146     # @DESCRIPTION:
147     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
148     # source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf.
149 yngwin 1.20 qt4-build_src_prepare() {
150 hwoarang 1.42 setqtenv
151 yngwin 1.20 cd "${S}"
152    
153 abcd 1.57 if use aqua; then
154     # provide a proper macx-g++-64
155     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
156    
157     sed -e '/^CONFIG/s:app_bundle::' \
158     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
159     -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed"
160     fi
161    
162 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
163     skip_qmake_build_patch
164     skip_project_generation_patch
165     symlink_binaries_to_buildtree
166     fi
167 hwoarang 1.24
168 abcd 1.57 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
169     # qmake bus errors with -O2 but -O3 works
170     replace-flags -O2 -O3
171     fi
172    
173 hwoarang 1.21 # Bug 178652
174 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
175 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
176     append-flags -fno-gcse
177 gengor 1.18 fi
178    
179 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
180 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
181 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
182     append-cxxflags -fno-stack-protector
183     # Bug 253127
184 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
185     -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed"
186     fi
187    
188 ayoy 1.49 # Bug 261632
189     if use ppc64; then
190     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
191     append-flags -mminimal-toc
192     fi
193    
194 wired 1.67 # Bug 282984 && Bug 295530
195     sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \
196     -i configure || die "sed qmake compilers failed"
197     sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX) LINK=$(tc-getCXX):" \
198     -i config.tests/unix/compile.test || die "sed test compilers failed"
199    
200 hwoarang 1.24 # Bug 172219
201 wired 1.67 sed -e "s:X11R6/::" \
202 ingmar 1.7 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
203    
204 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
205 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
206     # crippled (by design) :/
207     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
208     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
209     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
210     -e "s:-arch\s\w*::g" \
211     -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
212    
213     # Fix configure's -arch settings that appear in qmake/Makefile and also
214     # fix arch handling (automagically duplicates our -arch arg and breaks
215     # pch). Additionally disable Xarch support.
216     sed \
217     -e "s:-arch i386::" \
218     -e "s:-arch ppc::" \
219     -e "s:-arch x86_64::" \
220     -e "s:-arch ppc64::" \
221     -e "s:-arch \$i::" \
222     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
223     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
224     -e "s:-Xarch_x86_64::g" \
225     -e "s:-Xarch_ppc64::g" \
226     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
227    
228     # On Snow Leopard don't fall back to 10.5 deployment target.
229     if [[ ${CHOST} == *-apple-darwin10 ]] ; then
230     sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
231     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
232     -i configure mkspecs/common/mac-g++.conf || die "sed configure failed"
233     fi
234     fi
235    
236     # this one is needed for all systems with a separate -liconv, apart from
237     # Darwin, for which the sources already cater for -liconv
238     if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
239     sed \
240     -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
241     -i config.tests/unix/iconv/iconv.pro \
242     || die "sed on iconv.pro failed"
243     fi
244    
245     # we need some patches for Solaris
246     sed -i \
247     -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
248     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
249     # use GCC over SunStudio
250     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
251     # don't flirt with non-Prefix stuff, we're quite possessive
252     sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
253     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
254 yngwin 1.39
255 hwoarang 1.37 base_src_prepare
256 ingmar 1.7 }
257    
258 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
259     # @DESCRIPTION:
260     # Default configure phase
261 yngwin 1.20 qt4-build_src_configure() {
262 hwoarang 1.42 setqtenv
263 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
264    
265 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
266     # Darwin, for which the sources already cater for -liconv
267     use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
268     myconf+=" -liconv"
269    
270     if has glib ${IUSE//+} && use glib; then
271     # use -I, -L and -l from configure
272     local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
273     # avoid the -pthread argument
274     myconf+=" ${glibflags//-pthread}"
275     unset glibflags
276     fi
277    
278     if use aqua ; then
279     # On (snow) leopard use the new (frameworked) cocoa code.
280 abcd 1.61 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
281 abcd 1.57 myconf+=" -cocoa -framework"
282    
283     # We are crazy and build cocoa + qt3support :-)
284     if use qt3support; then
285     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
286     -i configure
287     fi
288    
289     # We need the source's headers, not the installed ones.
290     myconf+=" -I${S}/include"
291    
292     # Add hint for the framework location.
293     myconf+=" -F${QTLIBDIR}"
294     fi
295     else
296     # freetype2 include dir is non-standard, thus include it on configure
297     # use -I from configure
298     myconf+=" $(pkg-config --cflags freetype2)"
299     fi
300    
301 ingmar 1.7 echo ./configure ${myconf}
302     ./configure ${myconf} || die "./configure failed"
303 tommy 1.43 myconf=""
304 yngwin 1.20 }
305 ingmar 1.7
306 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
307     # @DESCRIPTION: Actual compile phase
308 yngwin 1.20 qt4-build_src_compile() {
309 hwoarang 1.42 setqtenv
310 yngwin 1.20
311 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
312 caleb 1.1 }
313    
314 abcd 1.57 # @FUNCTION: fix_includes
315     # @DESCRIPTION:
316     # For MacOSX we need to add some symlinks when frameworks are
317     # being used, to avoid complications with some more or less stupid packages.
318     fix_includes() {
319 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
320 abcd 1.57 # Some packages tend to include <Qt/...>
321     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
322    
323     # Fake normal headers when frameworks are installed... eases life later on
324     local dest f
325     for frw in "${D}${QTLIBDIR}"/*.framework; do
326     [[ -e "${frw}"/Headers ]] || continue
327     f=$(basename ${frw})
328     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
329     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
330    
331     # Link normal headers as well.
332     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
333     h=$(basename ${hdr})
334     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
335     done
336     done
337     fi
338     }
339    
340 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
341     # @DESCRIPTION:
342     # Perform the actual installation including some library fixes.
343 caleb 1.4 qt4-build_src_install() {
344 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
345 hwoarang 1.42 setqtenv
346 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
347 ingmar 1.7 install_qconfigs
348 caleb 1.4 fix_library_files
349 abcd 1.57 fix_includes
350 caleb 1.4 }
351    
352 hwoarang 1.42 # @FUNCTION: setqtenv
353     setqtenv() {
354     # Set up installation directories
355 abcd 1.57 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
356     QTPREFIXDIR=${EPREFIX}/usr
357     QTBINDIR=${EPREFIX}/usr/bin
358     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
359 hwoarang 1.42 QMAKE_LIBDIR_QT=${QTLIBDIR}
360 abcd 1.57 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
361     QTDATADIR=${EPREFIX}/usr/share/qt4
362     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
363     QTHEADERDIR=${EPREFIX}/usr/include/qt4
364 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
365 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
366 hwoarang 1.42 QTTRANSDIR=${QTDATADIR}/translations
367     QTEXAMPLESDIR=${QTDATADIR}/examples
368     QTDEMOSDIR=${QTDATADIR}/demos
369 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
370 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
371    
372     unset QMAKESPEC
373     }
374    
375 hwoarang 1.34 # @FUNCTION: standard_configure_options
376     # @DESCRIPTION:
377     # Sets up some standard configure options, like libdir (if necessary), whether
378     # debug info is wanted or not.
379 caleb 1.1 standard_configure_options() {
380 abcd 1.55 local myconf=
381 caleb 1.1
382 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
383 caleb 1.1
384     # Disable visibility explicitly if gcc version isn't 4
385 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]]; then
386     myconf+=" -no-reduce-exports"
387 caleb 1.1 fi
388    
389 ingmar 1.12 # precompiled headers doesn't work on hardened, where the flag is masked.
390 abcd 1.55 myconf+=" $(qt_use pch)"
391 ingmar 1.12
392 ingmar 1.7 if use debug; then
393 abcd 1.55 myconf+=" -debug"
394 ingmar 1.7 else
395 abcd 1.55 myconf+=" -release"
396 ingmar 1.7 fi
397 abcd 1.55 myconf+=" -no-separate-debug-info"
398 caleb 1.1
399 abcd 1.57 use aqua && myconf+=" -no-framework"
400    
401 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
402 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
403     case "$(tc-arch)" in
404 abcd 1.57 amd64|x64-*) myconf+=" -arch x86_64" ;;
405     ppc-macos) myconf+=" -arch ppc" ;;
406     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
407     sparc|sparc-*) myconf+=" -arch sparc" ;;
408     x86-macos) myconf+=" -arch x86" ;;
409 abcd 1.55 x86|x86-*) myconf+=" -arch i386" ;;
410     alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;;
411     hppa|sh) myconf+=" -arch generic" ;;
412 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
413 ingmar 1.11 esac
414    
415 wired 1.65 # 4.5: build everything but qt-xmlpatterns w/o exceptions
416     # 4.6: exceptions USE flag
417     local exceptions="-exceptions"
418 wired 1.48 case "${PV}" in
419 wired 1.65 4.5.*)
420     [[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions"
421 wired 1.48 ;;
422     *)
423 wired 1.65 has exceptions "${IUSE//+}" && exceptions="$(qt_use exceptions)"
424 wired 1.48 ;;
425     esac
426    
427 abcd 1.57 # note about -reduce-relocations:
428     # That flag seems to introduce major breakage to applications,
429     # mostly to be seen as a core dump with the message "QPixmap: Must
430     # construct a QApplication before a QPaintDevice" on Solaris
431     # -- Daniel Vergien
432     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
433    
434 abcd 1.55 myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license
435 ingmar 1.7 -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
436     -datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR}
437     -plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR}
438     -translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR}
439 abcd 1.55 -demosdir ${QTDEMOSDIR} -silent -fast -opensource
440 wired 1.48 ${exceptions}
441 abcd 1.57 -nomake examples -nomake demos"
442 yngwin 1.39
443 caleb 1.1 echo "${myconf}"
444     }
445    
446 hwoarang 1.34 # @FUNCTION: build_directories
447     # @USAGE: < directories >
448     # @DESCRIPTION:
449     # Compiles the code in $QT4_TARGET_DIRECTORIES
450 caleb 1.1 build_directories() {
451 abcd 1.55 for x in "$@"; do
452 abcd 1.57 pushd "${S}"/${x} >/dev/null
453 abcd 1.60 # avoid running over the maximum argument number, bug #299810
454     {
455     echo "${S}"/mkspecs/common/*.conf
456     find "${S}" -name '*.pr[io]'
457     } | xargs sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:${EPREFIX}/usr/$(get_libdir)/qt4:g" || die
458 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
459 wired 1.67 emake CC="$(tc-getCC)" \
460     CXX="$(tc-getCXX)" \
461     LINK="$(tc-getCXX)" || die "emake failed"
462 abcd 1.57 popd >/dev/null
463 caleb 1.1 done
464     }
465    
466 hwoarang 1.34 # @FUNCTION: install_directories
467     # @USAGE: < directories >
468     # @DESCRIPTION:
469     # run emake install in the given directories, which are separated by spaces
470 caleb 1.1 install_directories() {
471 abcd 1.55 for x in "$@"; do
472 ingmar 1.7 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}"
473     emake INSTALL_ROOT="${D}" install || die "emake install failed"
474     popd >/dev/null || die "Can't popd from ${S}/${x}"
475 caleb 1.1 done
476     }
477    
478 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
479     # @DESCRIPTION:
480     # List options that need to be added to QT_CONFIG in qconfig.pri
481 abcd 1.55 : ${QCONFIG_ADD:=}
482 ingmar 1.7
483     # @ECLASS-VARIABLE: QCONFIG_REMOVE
484     # @DESCRIPTION:
485     # List options that need to be removed from QT_CONFIG in qconfig.pri
486 abcd 1.55 : ${QCONFIG_REMOVE:=}
487 ingmar 1.7
488     # @ECLASS-VARIABLE: QCONFIG_DEFINE
489     # @DESCRIPTION:
490     # List variables that should be defined at the top of QtCore/qconfig.h
491 abcd 1.55 : ${QCONFIG_DEFINE:=}
492 ingmar 1.7
493 hwoarang 1.34 # @FUNCTION: install_qconfigs
494     # @DESCRIPTION: Install gentoo-specific mkspecs configurations
495 ingmar 1.7 install_qconfigs() {
496 zlin 1.9 local x
497     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
498 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
499     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
500     done
501 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
502 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
503 zlin 1.9 fi
504 ingmar 1.7
505 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
506 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
507     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
508     done
509 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
510 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
511     fi
512     }
513    
514 hwoarang 1.34 # @FUNCTION: generate_qconfigs
515     # @DESCRIPTION: Generates gentoo-specific configurations
516 ingmar 1.7 generate_qconfigs() {
517     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
518     local x qconfig_add qconfig_remove qconfig_new
519     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
520     [[ -f ${x} ]] || continue
521 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
522     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
523 ingmar 1.7 done
524    
525     # these error checks do not use die because dying in pkg_post{inst,rm}
526     # just makes things worse.
527     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
528     # start with the qconfig.pri that qt-core installed
529     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
530     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
531     eerror "cp qconfig failed."
532     return 1
533     fi
534    
535     # generate list of QT_CONFIG entries from the existing list
536     # including qconfig_add and excluding qconfig_remove
537     for x in $(sed -n 's/^QT_CONFIG +=//p' \
538     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
539 abcd 1.55 hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
540 ingmar 1.7 done
541    
542     # replace the existing QT_CONFIG list with qconfig_new
543     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
544     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
545     eerror "Sed for QT_CONFIG failed"
546     return 1
547     fi
548    
549     # create Gentoo/qconfig.h
550     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
551     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
552     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
553     return 1
554     fi
555     fi
556     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
557     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
558     [[ -f ${x} ]] || continue
559     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
560     done
561     else
562     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
563     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
564     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
565     "${ROOT}${QTDATADIR}" \
566     "${ROOT}${QTHEADERDIR}"/Gentoo \
567     "${ROOT}${QTHEADERDIR}" 2>/dev/null
568     fi
569     fi
570     }
571    
572 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
573     # @DESCRIPTION: Generate configurations when the package is completely removed
574 ingmar 1.7 qt4-build_pkg_postrm() {
575     generate_qconfigs
576 caleb 1.1 }
577    
578 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
579     # @DESCRIPTION: Generate configuration, plus throws a message about possible
580     # breakages and proposed solutions.
581 ingmar 1.7 qt4-build_pkg_postinst() {
582     generate_qconfigs
583 caleb 1.1 }
584    
585 hwoarang 1.34 # @FUNCTION: skip_qmake_build_patch
586     # @DESCRIPTION:
587     # Don't need to build qmake, as it's already installed from qt-core
588 caleb 1.1 skip_qmake_build_patch() {
589 ingmar 1.7 # Don't need to build qmake, as it's already installed from qt-core
590     sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed"
591 caleb 1.1 }
592    
593 hwoarang 1.34 # @FUNCTION: skip_project_generation_patch
594     # @DESCRIPTION:
595     # Exit the script early by throwing in an exit before all of the .pro files are scanned
596 caleb 1.1 skip_project_generation_patch() {
597     # Exit the script early by throwing in an exit before all of the .pro files are scanned
598 ingmar 1.7 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \
599     -i "${S}"/configure || die "Sed failed"
600 caleb 1.1 }
601    
602 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
603     # @DESCRIPTION:
604     # Symlink generated binaries to buildtree so they can be used during compilation
605     # time
606 ingmar 1.7 symlink_binaries_to_buildtree() {
607     for bin in qmake moc uic rcc; do
608     ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed."
609     done
610 caleb 1.1 }
611    
612 hwoarang 1.34 # @FUNCTION: fix_library_files
613     # @DESCRIPTION:
614     # Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and
615     # moves the *.pc-files into the pkgconfig directory
616 caleb 1.1 fix_library_files() {
617 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
618     if [[ -e ${libfile} ]]; then
619     sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed."
620     fi
621     done
622 caleb 1.1
623     # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix:
624 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
625     if [[ -e ${libfile} ]]; then
626     sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed"
627 caleb 1.1
628 abcd 1.55 # Move .pc files into the pkgconfig directory
629 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
630 ingmar 1.7 mv ${libfile} "${D}"/${QTPCDIR}/ \
631     || die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed."
632     fi
633     done
634    
635     # Don't install an empty directory
636     rmdir "${D}"/${QTLIBDIR}/pkgconfig
637 caleb 1.1 }
638    
639 hwoarang 1.34 # @FUNCTION: qt_use
640     # @USAGE: < flag > [ feature ] [ enableval ]
641 yngwin 1.39 # @DESCRIPTION:
642 hwoarang 1.34 # This will echo "${enableval}-${feature}" if <flag> is enabled, or
643     # "-no-${feature} if the flag is disabled. If [feature] is not specified <flag>
644     # will be used for that. If [enableval] is not specified, it omits the
645     # assignment-part
646 caleb 1.1 qt_use() {
647 abcd 1.55 local flag=$1
648     local feature=$1
649 caleb 1.5 local enableval=
650 caleb 1.1
651 abcd 1.55 [[ -n $2 ]] && feature=$2
652     [[ -n $3 ]] && enableval=-$3
653 ingmar 1.7
654     if use ${flag}; then
655     echo "${enableval}-${feature}"
656     else
657     echo "-no-${feature}"
658     fi
659     }
660    
661 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
662     # @RETURN: the specs-directory w/o path
663 yngwin 1.39 # @DESCRIPTION:
664 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
665 caleb 1.1 qt_mkspecs_dir() {
666 caleb 1.5 # Allows us to define which mkspecs dir we want to use.
667     local spec
668 caleb 1.1
669 caleb 1.5 case ${CHOST} in
670     *-freebsd*|*-dragonfly*)
671 abcd 1.55 spec=freebsd ;;
672 caleb 1.5 *-openbsd*)
673 abcd 1.55 spec=openbsd ;;
674 caleb 1.5 *-netbsd*)
675 abcd 1.55 spec=netbsd ;;
676 ingmar 1.7 *-darwin*)
677 abcd 1.57 if use aqua; then
678     # mac with carbon/cocoa
679     spec=macx
680     else
681     # darwin/mac with x11
682     spec=darwin
683     fi
684     ;;
685     *-solaris*)
686     spec=solaris ;;
687 caleb 1.5 *-linux-*|*-linux)
688 abcd 1.55 spec=linux ;;
689 caleb 1.5 *)
690 ingmar 1.7 die "Unknown CHOST, no platform choosen."
691 caleb 1.5 esac
692    
693     CXX=$(tc-getCXX)
694 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
695     spec+=-g++
696     elif [[ ${CXX} == *icpc* ]]; then
697     spec+=-icc
698 caleb 1.5 else
699     die "Unknown compiler ${CXX}."
700     fi
701 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
702     spec+=-${LIBDIR/lib}
703 hwoarang 1.42 fi
704 caleb 1.1
705 abcd 1.57 # Add -64 for 64bit profiles
706     if use x64-freebsd ||
707     use amd64-linux ||
708     use x64-macos ||
709     use x64-solaris ||
710     use sparc64-solaris
711     then
712     spec+=-64
713     fi
714    
715 caleb 1.5 echo "${spec}"
716 caleb 1.1 }
717    
718 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