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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.110 - (hide annotations) (download)
Mon Dec 26 11:59:19 2011 UTC (2 years, 11 months ago) by pesa
Branch: MAIN
Changes since 1.109: +23 -6 lines
Improve eclass doc.

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