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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.136 - (hide annotations) (download)
Thu Sep 27 16:35:41 2012 UTC (23 months, 3 weeks ago) by axs
Branch: MAIN
Changes since 1.135: +2 -2 lines
naive bump of all EAPI-specific checks in eclasses to permit EAPI=5 where EAPI=4 was previously allowed

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