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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.112 - (hide annotations) (download)
Fri Dec 30 14:39:26 2011 UTC (2 years, 3 months ago) by pesa
Branch: MAIN
Changes since 1.111: +10 -7 lines
Make the output of qt4-build_src_unpack() more readable.

1 vapier 1.93 # Copyright 1999-2011 Gentoo Foundation
2 caleb 1.1 # Distributed under the terms of the GNU General Public License v2
3 pesa 1.112 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.111 2011/12/27 16:04:27 pesa Exp $
4 caleb 1.1
5     # @ECLASS: qt4-build.eclass
6     # @MAINTAINER:
7 pesa 1.98 # Qt herd <qt@gentoo.org>
8 ingmar 1.8 # @BLURB: Eclass for Qt4 split ebuilds.
9 caleb 1.1 # @DESCRIPTION:
10 pesa 1.98 # This eclass contains various functions that are used when building Qt4.
11 caleb 1.1
12 hwoarang 1.37 inherit base eutils multilib toolchain-funcs flag-o-matic versionator
13 caleb 1.1
14 abcd 1.59 MY_PV=${PV/_/-}
15 pesa 1.100 MY_P=qt-everywhere-opensource-src-${MY_PV}
16    
17 pesa 1.102 HOMEPAGE="http://qt.nokia.com/ http://qt-project.org/"
18 pesa 1.100 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
19     LICENSE="|| ( LGPL-2.1 GPL-3 )"
20    
21     IUSE="aqua debug pch"
22    
23     [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] &&
24     [[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] &&
25     IUSE+=" +exceptions"
26 abcd 1.59
27 hwoarang 1.96 if version_is_at_least 4.7.99999999; then
28     IUSE+=" c++0x qpa"
29     fi
30    
31 pesa 1.101 DEPEND="dev-util/pkgconfig"
32 hwoarang 1.36 RDEPEND="
33     !<x11-libs/qt-assistant-${PV}
34     !>x11-libs/qt-assistant-${PV}-r9999
35     !<x11-libs/qt-core-${PV}
36     !>x11-libs/qt-core-${PV}-r9999
37     !<x11-libs/qt-dbus-${PV}
38     !>x11-libs/qt-dbus-${PV}-r9999
39 pesa 1.100 !<x11-libs/qt-declarative-${PV}
40     !>x11-libs/qt-declarative-${PV}-r9999
41 hwoarang 1.36 !<x11-libs/qt-demo-${PV}
42     !>x11-libs/qt-demo-${PV}-r9999
43     !<x11-libs/qt-gui-${PV}
44     !>x11-libs/qt-gui-${PV}-r9999
45 wired 1.65 !<x11-libs/qt-multimedia-${PV}
46     !>x11-libs/qt-multimedia-${PV}-r9999
47 hwoarang 1.36 !<x11-libs/qt-opengl-${PV}
48     !>x11-libs/qt-opengl-${PV}-r9999
49     !<x11-libs/qt-phonon-${PV}
50     !>x11-libs/qt-phonon-${PV}-r9999
51     !<x11-libs/qt-qt3support-${PV}
52     !>x11-libs/qt-qt3support-${PV}-r9999
53     !<x11-libs/qt-script-${PV}
54     !>x11-libs/qt-script-${PV}-r9999
55     !<x11-libs/qt-sql-${PV}
56     !>x11-libs/qt-sql-${PV}-r9999
57     !<x11-libs/qt-svg-${PV}
58     !>x11-libs/qt-svg-${PV}-r9999
59     !<x11-libs/qt-test-${PV}
60     !>x11-libs/qt-test-${PV}-r9999
61     !<x11-libs/qt-webkit-${PV}
62     !>x11-libs/qt-webkit-${PV}-r9999
63     !<x11-libs/qt-xmlpatterns-${PV}
64     !>x11-libs/qt-xmlpatterns-${PV}-r9999
65     "
66 abcd 1.55
67 abcd 1.59 S=${WORKDIR}/${MY_P}
68 yngwin 1.25
69 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
70     # @DESCRIPTION:
71 pesa 1.109 # Sets up PATH and LD_LIBRARY_PATH.
72 caleb 1.1 qt4-build_pkg_setup() {
73 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
74    
75 yngwin 1.66 # Protect users by not allowing downgrades between releases
76     # Downgrading revisions within the same release should be allowed
77 pesa 1.100 if has_version '>'${CATEGORY}/${P}-r9999; then
78     if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
79 yngwin 1.66 eerror "Sanity check to keep you from breaking your system:"
80     eerror " Downgrading Qt is completely unsupported and will break your system!"
81     die "aborting to save your system"
82     else
83     ewarn "Downgrading Qt is completely unsupported and will break your system!"
84     fi
85     fi
86 abcd 1.57
87 pesa 1.98 if [[ ${PN} == "qt-webkit" ]]; then
88 spatz 1.71 eshopts_push -s extglob
89 hwoarang 1.80 if is-flagq '-g?(gdb)?([1-9])'; then
90 spatz 1.71 echo
91     ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
92     ewarn "You may experience really long compilation times and/or increased memory usage."
93     ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
94     ewarn "For more info check out bug #307861"
95     echo
96     fi
97     eshopts_pop
98     fi
99    
100 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
101 abcd 1.57 if [[ ${CHOST} != *-darwin* ]]; then
102     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
103     else
104     DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
105 yngwin 1.63 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
106     # platform detection. Note: needs to come before any directories to
107     # avoid extract failure.
108     [[ ${CHOST} == *-apple-darwin* ]] && \
109 yngwin 1.66 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
110     ${QT4_EXTRACT_DIRECTORIES}"
111 abcd 1.57 fi
112 yngwin 1.20
113 abcd 1.55 # Make sure ebuilds use the required EAPI
114 abcd 1.57 if [[ ${EAPI} != [23] ]]; then
115     eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
116     eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
117     eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
118     die "qt4-build eclass requires EAPI=2 or EAPI=3"
119 yngwin 1.20 fi
120 caleb 1.1
121 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
122 yngwin 1.20 ewarn "Using a GCC version lower than 4.1 is not supported!"
123     fi
124 caleb 1.1 }
125    
126 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
127     # @DESCRIPTION:
128 pesa 1.109 # Arguments for build_target_directories. Takes the directories in which the
129     # code should be compiled. This is a space-separated list.
130 hwoarang 1.34
131     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
132     # @DESCRIPTION:
133 pesa 1.109 # Space-separated list including the directories that will be extracted from
134     # Qt tarball.
135 hwoarang 1.34
136     # @FUNCTION: qt4-build_src_unpack
137     # @DESCRIPTION:
138 pesa 1.109 # Unpacks the sources.
139 yngwin 1.20 qt4-build_src_unpack() {
140 hwoarang 1.42 setqtenv
141 pesa 1.112
142     local tarball="${MY_P}.tar.gz" target= targets=
143 abcd 1.55 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
144 pesa 1.112 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
145     mkspecs qmake ${QT4_EXTRACT_DIRECTORIES}
146     do
147     targets+="${MY_P}/${target} "
148 ingmar 1.11 done
149    
150 pesa 1.112 ebegin "Unpacking parts of ${tarball}:" ${targets//${MY_P}\/}
151     tar -xzf "${DISTDIR}/${tarball}" ${targets}
152     eend $? || die "failed to unpack"
153 ingmar 1.11 }
154    
155 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
156 pesa 1.110 # @DEFAULT_UNSET
157 hwoarang 1.37 # @DESCRIPTION:
158 pesa 1.110 # PATCHES array variable containing all various patches to be applied.
159     # This variable is expected to be defined in global scope of ebuild.
160     # Make sure to specify the full path. This variable is utilised in
161     # src_unpack/src_prepare phase, based on EAPI.
162 hwoarang 1.37 #
163 pesa 1.110 # @CODE
164     # PATCHES=( "${FILESDIR}/mypatch.patch"
165     # "${FILESDIR}/patches_folder/" )
166     # @CODE
167 hwoarang 1.34
168     # @FUNCTION: qt4-build_src_prepare
169     # @DESCRIPTION:
170     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
171 pesa 1.109 # the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
172 yngwin 1.20 qt4-build_src_prepare() {
173 hwoarang 1.42 setqtenv
174 yngwin 1.20 cd "${S}"
175 vapier 1.94
176 pesa 1.99 if version_is_at_least "4.7"; then
177     # fix libX11 dependency on non X packages
178 pesa 1.98 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
179     has ${PN} ${nolibx11_pkgs} && qt_nolibx11
180 pesa 1.99
181     qt_assistant_cleanup
182 hwoarang 1.77 fi
183 wired 1.69
184 abcd 1.57 if use aqua; then
185     # provide a proper macx-g++-64
186     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
187    
188     sed -e '/^CONFIG/s:app_bundle::' \
189     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
190 pesa 1.109 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
191 abcd 1.57 fi
192    
193 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
194 pesa 1.100 skip_qmake_build
195     skip_project_generation
196 ingmar 1.7 symlink_binaries_to_buildtree
197     fi
198 hwoarang 1.24
199 abcd 1.57 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then
200     # qmake bus errors with -O2 but -O3 works
201     replace-flags -O2 -O3
202     fi
203 jer 1.97
204 hwoarang 1.21 # Bug 178652
205 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
206 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
207     append-flags -fno-gcse
208 gengor 1.18 fi
209    
210 pesa 1.100 if use_if_iuse c++0x; then
211 hwoarang 1.96 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
212     ewarn "this is an official standard, some of the reverse dependencies"
213     ewarn "may fail to compile or link againt the Qt4 libraries. Before"
214     ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
215     ewarn "disabled."
216     append-flags -std=c++0x
217     fi
218 pesa 1.98
219 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
220 abcd 1.55 if [[ $(gcc-major-version) -lt 4 ]] ; then
221 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
222     append-cxxflags -fno-stack-protector
223     # Bug 253127
224 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
225 pesa 1.109 -i mkspecs/common/g++.conf || die
226 gengor 1.29 fi
227    
228 ayoy 1.49 # Bug 261632
229     if use ppc64; then
230     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
231     append-flags -mminimal-toc
232     fi
233    
234 pesa 1.109 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
235     sed -e "/^SYSTEM_VARIABLES=/i \
236     CC='$(tc-getCC)'\n\
237     CXX='$(tc-getCXX)'\n\
238     CFLAGS='${CFLAGS}'\n\
239     CXXFLAGS='${CXXFLAGS}'\n\
240     LDFLAGS='${LDFLAGS}'\n" \
241     -i configure || die "sed SYSTEM_VARIABLES failed"
242 pesa 1.98
243     # Bug 321335
244 pesa 1.109 find config.tests/unix -name '*.test' -type f -exec grep -lZ \$MAKE '{}' \; | xargs -0 \
245     sed -e "s:\(\$MAKE\):\1 CC='$(tc-getCC)' CXX='$(tc-getCXX)' LINK='$(tc-getCXX)':g" \
246     -i || die "sed test compilers failed"
247 wired 1.67
248 hwoarang 1.24 # Bug 172219
249 pesa 1.109 sed -e "s:X11R6/::" -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
250 ingmar 1.7
251 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
252 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
253     # crippled (by design) :/
254     sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
255     -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
256     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
257     -e "s:-arch\s\w*::g" \
258     -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed"
259    
260     # Fix configure's -arch settings that appear in qmake/Makefile and also
261     # fix arch handling (automagically duplicates our -arch arg and breaks
262     # pch). Additionally disable Xarch support.
263     sed \
264     -e "s:-arch i386::" \
265     -e "s:-arch ppc::" \
266     -e "s:-arch x86_64::" \
267     -e "s:-arch ppc64::" \
268     -e "s:-arch \$i::" \
269     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
270     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
271     -e "s:-Xarch_x86_64::g" \
272     -e "s:-Xarch_ppc64::g" \
273 pesa 1.109 -i configure mkspecs/common/mac-g++.conf || die "sed -arch/-Xarch failed"
274 abcd 1.57
275     # On Snow Leopard don't fall back to 10.5 deployment target.
276     if [[ ${CHOST} == *-apple-darwin10 ]] ; then
277     sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
278     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
279 pesa 1.109 -i configure mkspecs/common/mac-g++.conf || die "sed deployment target failed"
280 abcd 1.57 fi
281     fi
282    
283     # this one is needed for all systems with a separate -liconv, apart from
284     # Darwin, for which the sources already cater for -liconv
285     if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then
286     sed \
287     -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
288     -i config.tests/unix/iconv/iconv.pro \
289     || die "sed on iconv.pro failed"
290     fi
291    
292     # we need some patches for Solaris
293     sed -i \
294     -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
295     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
296     # use GCC over SunStudio
297     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
298     # don't flirt with non-Prefix stuff, we're quite possessive
299     sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
300     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
301 hwoarang 1.75 # strip predefined CFLAGS from qmake ( bug #312689 )
302 hwoarang 1.83 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
303 yngwin 1.39
304 hwoarang 1.37 base_src_prepare
305 ingmar 1.7 }
306    
307 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
308     # @DESCRIPTION:
309     # Default configure phase
310 yngwin 1.20 qt4-build_src_configure() {
311 hwoarang 1.42 setqtenv
312 ingmar 1.7 myconf="$(standard_configure_options) ${myconf}"
313    
314 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
315     # Darwin, for which the sources already cater for -liconv
316     use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \
317     myconf+=" -liconv"
318    
319 pesa 1.98 if use_if_iuse glib; then
320 abcd 1.57 # use -I, -L and -l from configure
321     local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
322     # avoid the -pthread argument
323     myconf+=" ${glibflags//-pthread}"
324     unset glibflags
325     fi
326    
327 pesa 1.98 if use_if_iuse qpa; then
328 hwoarang 1.96 ewarn
329     ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
330     ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
331     ewarn "disable it before reporting any bugs related to this useflag."
332     ewarn
333     myconf+=" -qpa"
334     fi
335    
336 abcd 1.57 if use aqua ; then
337     # On (snow) leopard use the new (frameworked) cocoa code.
338 abcd 1.61 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
339 abcd 1.57 myconf+=" -cocoa -framework"
340    
341     # We are crazy and build cocoa + qt3support :-)
342     if use qt3support; then
343     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
344     -i configure
345     fi
346    
347     # We need the source's headers, not the installed ones.
348     myconf+=" -I${S}/include"
349    
350     # Add hint for the framework location.
351     myconf+=" -F${QTLIBDIR}"
352     fi
353     else
354     # freetype2 include dir is non-standard, thus include it on configure
355     # use -I from configure
356     myconf+=" $(pkg-config --cflags freetype2)"
357     fi
358    
359 ingmar 1.7 echo ./configure ${myconf}
360     ./configure ${myconf} || die "./configure failed"
361 tommy 1.43 myconf=""
362 wired 1.90
363     prepare_directories ${QT4_TARGET_DIRECTORIES}
364 yngwin 1.20 }
365 ingmar 1.7
366 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
367 vapier 1.93 # @DESCRIPTION:
368     # Actual compile phase
369 yngwin 1.20 qt4-build_src_compile() {
370 hwoarang 1.42 setqtenv
371 yngwin 1.20
372 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
373 caleb 1.1 }
374    
375 ayoy 1.76 # @FUNCTION: qt4-build_src_test
376     # @DESCRIPTION:
377     # Runs tests only in target directories.
378     qt4-build_src_test() {
379     for dir in ${QT4_TARGET_DIRECTORIES}; do
380     emake -j1 check -C ${dir}
381     done
382     }
383    
384 abcd 1.57 # @FUNCTION: fix_includes
385     # @DESCRIPTION:
386 pesa 1.109 # For MacOS X we need to add some symlinks when frameworks are
387 abcd 1.57 # being used, to avoid complications with some more or less stupid packages.
388     fix_includes() {
389 abcd 1.60 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
390 abcd 1.57 # Some packages tend to include <Qt/...>
391     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
392    
393     # Fake normal headers when frameworks are installed... eases life later on
394     local dest f
395     for frw in "${D}${QTLIBDIR}"/*.framework; do
396     [[ -e "${frw}"/Headers ]] || continue
397     f=$(basename ${frw})
398     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
399     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
400    
401     # Link normal headers as well.
402     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
403     h=$(basename ${hdr})
404     dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
405     done
406     done
407     fi
408     }
409    
410 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
411     # @DESCRIPTION:
412     # Perform the actual installation including some library fixes.
413 caleb 1.4 qt4-build_src_install() {
414 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
415 hwoarang 1.42 setqtenv
416 pesa 1.98
417 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
418 ingmar 1.7 install_qconfigs
419 caleb 1.4 fix_library_files
420 abcd 1.57 fix_includes
421 pesa 1.98
422 hwoarang 1.78 # remove .la files since we are building only shared Qt libraries
423 vapier 1.93 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
424 caleb 1.4 }
425    
426 hwoarang 1.42 # @FUNCTION: setqtenv
427 pesa 1.110 # @INTERNAL
428 hwoarang 1.42 setqtenv() {
429     # Set up installation directories
430 abcd 1.57 QTPREFIXDIR=${EPREFIX}/usr
431     QTBINDIR=${EPREFIX}/usr/bin
432     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
433     QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
434     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
435     QTHEADERDIR=${EPREFIX}/usr/include/qt4
436 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
437 abcd 1.104 QTIMPORTDIR=${QTLIBDIR}/imports
438 pesa 1.109 QTDATADIR=${EPREFIX}/usr/share/qt4
439     QTTRANSDIR=${QTDATADIR}/translations
440 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
441 hwoarang 1.42 QTEXAMPLESDIR=${QTDATADIR}/examples
442     QTDEMOSDIR=${QTDATADIR}/demos
443 pesa 1.109 QMAKE_LIBDIR_QT=${QTLIBDIR}
444 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
445 pesa 1.109
446 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
447    
448     unset QMAKESPEC
449     }
450    
451 hwoarang 1.34 # @FUNCTION: standard_configure_options
452 pesa 1.110 # @INTERNAL
453 hwoarang 1.34 # @DESCRIPTION:
454     # Sets up some standard configure options, like libdir (if necessary), whether
455     # debug info is wanted or not.
456 caleb 1.1 standard_configure_options() {
457 pesa 1.107 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
458     -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
459     -importdir ${QTIMPORTDIR} -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR}
460     -sysconfdir ${QTSYSCONFDIR} -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
461     -opensource -confirm-license -shared -fast -largefile -stl -verbose
462     -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
463 caleb 1.1
464 grobian 1.58 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)"
465 caleb 1.1
466 pesa 1.107 # debug/release
467 ingmar 1.7 if use debug; then
468 abcd 1.55 myconf+=" -debug"
469 ingmar 1.7 else
470 abcd 1.55 myconf+=" -release"
471 ingmar 1.7 fi
472 abcd 1.55 myconf+=" -no-separate-debug-info"
473 caleb 1.1
474 pesa 1.107 # exceptions USE flag
475     local exceptions="-exceptions"
476     in_iuse exceptions && exceptions="$(qt_use exceptions)"
477     myconf+=" ${exceptions}"
478    
479     # disable RPATH on Qt >= 4.8 (bug 380415)
480     version_is_at_least 4.8 && myconf+=" -no-rpath"
481    
482     # precompiled headers don't work on hardened, where the flag is masked
483     myconf+=" $(qt_use pch)"
484    
485     # -reduce-relocations
486     # This flag seems to introduce major breakage to applications,
487     # mostly to be seen as a core dump with the message "QPixmap: Must
488     # construct a QApplication before a QPaintDevice" on Solaris.
489     # -- Daniel Vergien
490     [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations"
491    
492 abcd 1.57 use aqua && myconf+=" -no-framework"
493    
494 yngwin 1.20 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
495 flameeyes 1.27 # $(tc-arch). Therefore we convert it to supported values.
496     case "$(tc-arch)" in
497 pesa 1.103 amd64|x64-*) myconf+=" -arch x86_64" ;;
498     ppc-macos) myconf+=" -arch ppc" ;;
499     ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;;
500     sparc|sparc-*|sparc64-*) myconf+=" -arch sparc" ;;
501     x86-macos) myconf+=" -arch x86" ;;
502     x86|x86-*) myconf+=" -arch i386" ;;
503     alpha|arm|ia64|mips|s390) myconf+=" -arch $(tc-arch)" ;;
504     hppa|sh) myconf+=" -arch generic" ;;
505 flameeyes 1.27 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
506 ingmar 1.11 esac
507    
508 caleb 1.1 echo "${myconf}"
509     }
510    
511 wired 1.90 # @FUNCTION: prepare_directories
512 hwoarang 1.34 # @USAGE: < directories >
513 pesa 1.110 # @INTERNAL
514 hwoarang 1.34 # @DESCRIPTION:
515 pesa 1.109 # Generates Makefiles for the given list of directories.
516 wired 1.90 prepare_directories() {
517 abcd 1.55 for x in "$@"; do
518 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
519 pesa 1.98 einfo "Running qmake in: ${x}"
520 abcd 1.60 # avoid running over the maximum argument number, bug #299810
521     {
522     echo "${S}"/mkspecs/common/*.conf
523     find "${S}" -name '*.pr[io]'
524 abcd 1.104 } | xargs sed -i \
525     -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
526     -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
527     || die
528 ingmar 1.7 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
529 pesa 1.109 popd >/dev/null || die
530 wired 1.90 done
531     }
532    
533    
534     # @FUNCTION: build_directories
535     # @USAGE: < directories >
536 pesa 1.110 # @INTERNAL
537 wired 1.90 # @DESCRIPTION:
538 pesa 1.109 # Compiles the code in the given list of directories.
539 wired 1.90 build_directories() {
540     for x in "$@"; do
541 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
542 wired 1.67 emake CC="$(tc-getCC)" \
543     CXX="$(tc-getCXX)" \
544     LINK="$(tc-getCXX)" || die "emake failed"
545 pesa 1.109 popd >/dev/null || die
546 caleb 1.1 done
547     }
548    
549 hwoarang 1.34 # @FUNCTION: install_directories
550     # @USAGE: < directories >
551 pesa 1.110 # @INTERNAL
552 hwoarang 1.34 # @DESCRIPTION:
553 pesa 1.109 # Runs emake install in the given directories, which are separated by spaces.
554 caleb 1.1 install_directories() {
555 abcd 1.55 for x in "$@"; do
556 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
557 ingmar 1.7 emake INSTALL_ROOT="${D}" install || die "emake install failed"
558 pesa 1.109 popd >/dev/null || die
559 caleb 1.1 done
560     }
561    
562 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
563     # @DESCRIPTION:
564     # List options that need to be added to QT_CONFIG in qconfig.pri
565 abcd 1.55 : ${QCONFIG_ADD:=}
566 ingmar 1.7
567     # @ECLASS-VARIABLE: QCONFIG_REMOVE
568     # @DESCRIPTION:
569     # List options that need to be removed from QT_CONFIG in qconfig.pri
570 abcd 1.55 : ${QCONFIG_REMOVE:=}
571 ingmar 1.7
572     # @ECLASS-VARIABLE: QCONFIG_DEFINE
573     # @DESCRIPTION:
574     # List variables that should be defined at the top of QtCore/qconfig.h
575 abcd 1.55 : ${QCONFIG_DEFINE:=}
576 ingmar 1.7
577 hwoarang 1.34 # @FUNCTION: install_qconfigs
578 pesa 1.110 # @INTERNAL
579 vapier 1.93 # @DESCRIPTION:
580 pesa 1.109 # Install gentoo-specific mkspecs configurations.
581 ingmar 1.7 install_qconfigs() {
582 zlin 1.9 local x
583     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
584 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
585     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
586     done
587 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
588 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
589 zlin 1.9 fi
590 ingmar 1.7
591 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
592 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
593     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
594     done
595 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
596 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
597     fi
598     }
599    
600 hwoarang 1.34 # @FUNCTION: generate_qconfigs
601 pesa 1.110 # @INTERNAL
602 vapier 1.93 # @DESCRIPTION:
603 pesa 1.109 # Generates gentoo-specific qconfig.{h,pri}.
604 ingmar 1.7 generate_qconfigs() {
605     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then
606     local x qconfig_add qconfig_remove qconfig_new
607     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
608     [[ -f ${x} ]] || continue
609 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
610     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
611 ingmar 1.7 done
612    
613     # these error checks do not use die because dying in pkg_post{inst,rm}
614     # just makes things worse.
615     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
616     # start with the qconfig.pri that qt-core installed
617     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
618     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
619     eerror "cp qconfig failed."
620     return 1
621     fi
622    
623     # generate list of QT_CONFIG entries from the existing list
624     # including qconfig_add and excluding qconfig_remove
625     for x in $(sed -n 's/^QT_CONFIG +=//p' \
626     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
627 ssuominen 1.91 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
628 ingmar 1.7 done
629    
630     # replace the existing QT_CONFIG list with qconfig_new
631     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
632     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
633     eerror "Sed for QT_CONFIG failed"
634     return 1
635     fi
636    
637     # create Gentoo/qconfig.h
638     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
639     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
640     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
641     return 1
642     fi
643     fi
644     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
645     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
646     [[ -f ${x} ]] || continue
647     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
648     done
649     else
650     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
651     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
652     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
653     "${ROOT}${QTDATADIR}" \
654     "${ROOT}${QTHEADERDIR}"/Gentoo \
655     "${ROOT}${QTHEADERDIR}" 2>/dev/null
656     fi
657     fi
658     }
659    
660 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
661 vapier 1.93 # @DESCRIPTION:
662 pesa 1.109 # Regenerate configuration when the package is completely removed.
663 ingmar 1.7 qt4-build_pkg_postrm() {
664     generate_qconfigs
665 caleb 1.1 }
666    
667 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
668 vapier 1.93 # @DESCRIPTION:
669 pesa 1.109 # Regenerate configuration, plus throw a message about possible
670 hwoarang 1.34 # breakages and proposed solutions.
671 ingmar 1.7 qt4-build_pkg_postinst() {
672     generate_qconfigs
673 caleb 1.1 }
674    
675 pesa 1.100 # @FUNCTION: skip_qmake_build
676 pesa 1.110 # @INTERNAL
677 hwoarang 1.34 # @DESCRIPTION:
678 pesa 1.109 # Patches configure to skip qmake compilation, as it's already installed by qt-core.
679 pesa 1.100 skip_qmake_build() {
680 pesa 1.109 sed -i -e "s:if true:if false:g" "${S}"/configure || die
681 caleb 1.1 }
682    
683 pesa 1.100 # @FUNCTION: skip_project_generation
684 pesa 1.110 # @INTERNAL
685 hwoarang 1.34 # @DESCRIPTION:
686 pesa 1.109 # Exit the script early by throwing in an exit before all of the .pro files are scanned.
687 pesa 1.100 skip_project_generation() {
688 pesa 1.109 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
689 caleb 1.1 }
690    
691 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
692 pesa 1.110 # @INTERNAL
693 hwoarang 1.34 # @DESCRIPTION:
694 pesa 1.109 # Symlinks generated binaries to buildtree, so they can be used during compilation time.
695 ingmar 1.7 symlink_binaries_to_buildtree() {
696     for bin in qmake moc uic rcc; do
697 pesa 1.100 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
698 ingmar 1.7 done
699 caleb 1.1 }
700    
701 hwoarang 1.34 # @FUNCTION: fix_library_files
702 pesa 1.110 # @INTERNAL
703 hwoarang 1.34 # @DESCRIPTION:
704 pesa 1.109 # Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
705     # moves the *.pc files into the pkgconfig directory.
706 caleb 1.1 fix_library_files() {
707 pesa 1.109 local libfile
708 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
709     if [[ -e ${libfile} ]]; then
710 pesa 1.98 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
711 ingmar 1.7 fi
712     done
713 caleb 1.1
714 pesa 1.109 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
715 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
716     if [[ -e ${libfile} ]]; then
717 pesa 1.109 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
718 caleb 1.1
719 abcd 1.55 # Move .pc files into the pkgconfig directory
720 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
721 pesa 1.109 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
722 ingmar 1.7 fi
723     done
724    
725     # Don't install an empty directory
726     rmdir "${D}"/${QTLIBDIR}/pkgconfig
727 caleb 1.1 }
728    
729 hwoarang 1.34 # @FUNCTION: qt_use
730     # @USAGE: < flag > [ feature ] [ enableval ]
731 yngwin 1.39 # @DESCRIPTION:
732 pesa 1.111 # This will echo "-${enableval}-${feature}" if <flag> is enabled, or
733     # "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
734 hwoarang 1.34 # will be used for that. If [enableval] is not specified, it omits the
735 pesa 1.111 # "-${enableval}" part.
736 caleb 1.1 qt_use() {
737 pesa 1.111 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
738 ingmar 1.7 }
739    
740 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
741     # @RETURN: the specs-directory w/o path
742 yngwin 1.39 # @DESCRIPTION:
743 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
744 caleb 1.1 qt_mkspecs_dir() {
745 pesa 1.109 local spec=
746 caleb 1.5 case ${CHOST} in
747     *-freebsd*|*-dragonfly*)
748 abcd 1.55 spec=freebsd ;;
749 caleb 1.5 *-openbsd*)
750 abcd 1.55 spec=openbsd ;;
751 caleb 1.5 *-netbsd*)
752 abcd 1.55 spec=netbsd ;;
753 ingmar 1.7 *-darwin*)
754 abcd 1.57 if use aqua; then
755     # mac with carbon/cocoa
756     spec=macx
757     else
758     # darwin/mac with x11
759     spec=darwin
760     fi
761     ;;
762     *-solaris*)
763     spec=solaris ;;
764 caleb 1.5 *-linux-*|*-linux)
765 abcd 1.55 spec=linux ;;
766 caleb 1.5 *)
767 pesa 1.100 die "Unknown CHOST, no platform chosen"
768 caleb 1.5 esac
769    
770     CXX=$(tc-getCXX)
771 abcd 1.55 if [[ ${CXX} == *g++* ]]; then
772     spec+=-g++
773     elif [[ ${CXX} == *icpc* ]]; then
774     spec+=-icc
775 caleb 1.5 else
776 pesa 1.100 die "Unknown compiler '${CXX}'"
777 caleb 1.5 fi
778 abcd 1.55 if [[ -n ${LIBDIR/lib} ]]; then
779     spec+=-${LIBDIR/lib}
780 hwoarang 1.42 fi
781 caleb 1.1
782 abcd 1.57 # Add -64 for 64bit profiles
783     if use x64-freebsd ||
784     use amd64-linux ||
785     use x64-macos ||
786     use x64-solaris ||
787     use sparc64-solaris
788     then
789     spec+=-64
790     fi
791    
792 caleb 1.5 echo "${spec}"
793 caleb 1.1 }
794    
795 hwoarang 1.77 # @FUNCTION: qt_assistant_cleanup
796 pesa 1.110 # @INTERNAL
797 hwoarang 1.77 # @DESCRIPTION:
798 pesa 1.99 # Tries to clean up tools.pro for qt-assistant ebuilds.
799     # Meant to be called in src_prepare().
800     # Since Qt 4.7.4 this function is a no-op.
801 hwoarang 1.77 qt_assistant_cleanup() {
802 pesa 1.99 # apply patching to qt-assistant ebuilds only
803     [[ ${PN} != "qt-assistant" ]] && return
804    
805     # no longer needed for 4.7.4 and later
806     version_is_at_least "4.7.4" && return
807    
808 hwoarang 1.77 # different versions (and branches...) may need different handling,
809     # add a case if you need special handling
810     case "${MY_PV_EXTRA}" in
811     *kde-qt*)
812     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
813     -e "/mac/,/^embedded.*makeqpf$/d" \
814     -i tools/tools.pro || die "patching tools.pro failed"
815     ;;
816     *)
817     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
818     -e "/mac/,/^embedded.*makeqpf$/d" \
819     -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
820     -i tools/tools.pro || die "patching tools.pro failed"
821     ;;
822     esac
823     }
824    
825     # @FUNCTION: qt_nolibx11
826 pesa 1.110 # @INTERNAL
827 hwoarang 1.77 # @DESCRIPTION:
828 pesa 1.109 # Ignore X11 tests for packages that don't need X libraries installed.
829 hwoarang 1.77 qt_nolibx11() {
830     sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
831     die "x11 check sed failed"
832     }
833    
834 ayoy 1.76 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

  ViewVC Help
Powered by ViewVC 1.1.20