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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.118 - (hide annotations) (download)
Thu Feb 9 22:58:36 2012 UTC (2 years, 10 months ago) by pesa
Branch: MAIN
Changes since 1.117: +4 -1 lines
Make src_test() a noop for qt-multimedia (bug #332299).

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