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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.134 - (hide annotations) (download)
Tue Jul 10 21:43:19 2012 UTC (2 years, 2 months ago) by pesa
Branch: MAIN
Changes since 1.133: +5 -3 lines
Stop inheriting base.eclass

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