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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.133 - (hide annotations) (download)
Mon Jun 18 21:33:50 2012 UTC (2 years, 4 months ago) by pesa
Branch: MAIN
Changes since 1.132: +35 -75 lines
Update from qt overlay.
Drop USE=c++0x from qt-webkit, stop adding USE=qpa to 4.8.3 and later, dead code removal and other minor cleanups.

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