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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.125 - (hide annotations) (download)
Thu Apr 19 14:52:12 2012 UTC (2 years, 3 months ago) by pesa
Branch: MAIN
Changes since 1.124: +3 -1 lines
Add appropriate blockers for qt-bearer.

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