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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.128 - (hide annotations) (download)
Mon May 7 21:28:01 2012 UTC (2 years, 2 months ago) by pesa
Branch: MAIN
Changes since 1.127: +5 -3 lines
Stop stripping upstream CFLAGS from g++.conf for Qt 4.8 and later (see bug 352778 comment #6).

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