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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


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