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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.126 - (hide annotations) (download)
Wed Apr 25 17:43:50 2012 UTC (2 years, 3 months ago) by grobian
Branch: MAIN
Changes since 1.125: +22 -5 lines
fix_includes: create relative symlinks for header directories, such that further additions by ebuilds in src_install don't fail, such as in qt-script

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 grobian 1.126 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.125 2012/04/19 14:52:12 pesa Exp $
4 caleb 1.1
5     # @ECLASS: qt4-build.eclass
6     # @MAINTAINER:
7 pesa 1.98 # Qt herd <qt@gentoo.org>
8 ingmar 1.8 # @BLURB: Eclass for Qt4 split ebuilds.
9 caleb 1.1 # @DESCRIPTION:
10 pesa 1.98 # This eclass contains various functions that are used when building Qt4.
11 caleb 1.1
12 pesa 1.123 case ${EAPI} in
13     2|3|4) : ;;
14     *) die "qt4-build.eclass requires EAPI 2, 3 or 4." ;;
15     esac
16    
17 pesa 1.124 inherit base eutils flag-o-matic multilib toolchain-funcs versionator
18    
19     if [[ ${PV} == *9999* ]]; then
20     QT4_BUILD_TYPE="live"
21     inherit git-2
22     else
23     QT4_BUILD_TYPE="release"
24     fi
25    
26     HOMEPAGE="http://qt-project.org/ http://qt.nokia.com/"
27     LICENSE="|| ( LGPL-2.1 GPL-3 )"
28 caleb 1.1
29 abcd 1.59 MY_PV=${PV/_/-}
30 pesa 1.100 MY_P=qt-everywhere-opensource-src-${MY_PV}
31    
32 pesa 1.124 case ${QT4_BUILD_TYPE} in
33     live)
34     EGIT_REPO_URI="git://gitorious.org/qt/qt.git
35     https://git.gitorious.org/qt/qt.git"
36     EGIT_BRANCH="${PV%.9999}"
37     ;;
38     release)
39     SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz"
40     ;;
41     esac
42 pesa 1.100
43     IUSE="aqua debug pch"
44 pesa 1.124 if [[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]]; then
45 pesa 1.100 IUSE+=" +exceptions"
46 pesa 1.124 fi
47     if version_is_at_least 4.8; then
48 hwoarang 1.96 IUSE+=" c++0x qpa"
49     fi
50    
51 pesa 1.101 DEPEND="dev-util/pkgconfig"
52 pesa 1.124 if [[ ${QT4_BUILD_TYPE} == live ]]; then
53     DEPEND+=" dev-lang/perl"
54     fi
55    
56 hwoarang 1.36 RDEPEND="
57     !<x11-libs/qt-assistant-${PV}
58     !>x11-libs/qt-assistant-${PV}-r9999
59 pesa 1.125 !<x11-libs/qt-bearer-${PV}
60     !>x11-libs/qt-bearer-${PV}-r9999
61 hwoarang 1.36 !<x11-libs/qt-core-${PV}
62     !>x11-libs/qt-core-${PV}-r9999
63     !<x11-libs/qt-dbus-${PV}
64     !>x11-libs/qt-dbus-${PV}-r9999
65 pesa 1.100 !<x11-libs/qt-declarative-${PV}
66     !>x11-libs/qt-declarative-${PV}-r9999
67 hwoarang 1.36 !<x11-libs/qt-demo-${PV}
68     !>x11-libs/qt-demo-${PV}-r9999
69     !<x11-libs/qt-gui-${PV}
70     !>x11-libs/qt-gui-${PV}-r9999
71 wired 1.65 !<x11-libs/qt-multimedia-${PV}
72     !>x11-libs/qt-multimedia-${PV}-r9999
73 hwoarang 1.36 !<x11-libs/qt-opengl-${PV}
74     !>x11-libs/qt-opengl-${PV}-r9999
75 pesa 1.119 !<x11-libs/qt-openvg-${PV}
76     !>x11-libs/qt-openvg-${PV}-r9999
77 hwoarang 1.36 !<x11-libs/qt-phonon-${PV}
78     !>x11-libs/qt-phonon-${PV}-r9999
79     !<x11-libs/qt-qt3support-${PV}
80     !>x11-libs/qt-qt3support-${PV}-r9999
81     !<x11-libs/qt-script-${PV}
82     !>x11-libs/qt-script-${PV}-r9999
83     !<x11-libs/qt-sql-${PV}
84     !>x11-libs/qt-sql-${PV}-r9999
85     !<x11-libs/qt-svg-${PV}
86     !>x11-libs/qt-svg-${PV}-r9999
87     !<x11-libs/qt-test-${PV}
88     !>x11-libs/qt-test-${PV}-r9999
89     !<x11-libs/qt-webkit-${PV}
90     !>x11-libs/qt-webkit-${PV}-r9999
91     !<x11-libs/qt-xmlpatterns-${PV}
92     !>x11-libs/qt-xmlpatterns-${PV}-r9999
93     "
94 abcd 1.55
95 abcd 1.59 S=${WORKDIR}/${MY_P}
96 yngwin 1.25
97 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_setup
98     # @DESCRIPTION:
99 pesa 1.109 # Sets up PATH and LD_LIBRARY_PATH.
100 caleb 1.1 qt4-build_pkg_setup() {
101 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
102    
103 yngwin 1.66 # Protect users by not allowing downgrades between releases
104     # Downgrading revisions within the same release should be allowed
105 pesa 1.100 if has_version '>'${CATEGORY}/${P}-r9999; then
106     if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
107 pesa 1.124 eerror
108 yngwin 1.66 eerror "Sanity check to keep you from breaking your system:"
109     eerror " Downgrading Qt is completely unsupported and will break your system!"
110 pesa 1.124 eerror
111 yngwin 1.66 die "aborting to save your system"
112     else
113     ewarn "Downgrading Qt is completely unsupported and will break your system!"
114     fi
115     fi
116 abcd 1.57
117 pesa 1.123 if [[ ${PN} == qt-webkit ]]; then
118 spatz 1.71 eshopts_push -s extglob
119 hwoarang 1.80 if is-flagq '-g?(gdb)?([1-9])'; then
120 spatz 1.71 echo
121 pesa 1.123 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
122 spatz 1.71 ewarn "You may experience really long compilation times and/or increased memory usage."
123 pesa 1.123 ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug."
124 spatz 1.71 ewarn "For more info check out bug #307861"
125     echo
126     fi
127     eshopts_pop
128     fi
129    
130 abcd 1.55 PATH="${S}/bin${PATH:+:}${PATH}"
131 abcd 1.57 if [[ ${CHOST} != *-darwin* ]]; then
132     LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
133     else
134     DYLD_LIBRARY_PATH="${S}/lib${DYLD_LIBRARY_PATH:+:}${DYLD_LIBRARY_PATH}"
135 yngwin 1.63 # On MacOS we *need* at least src/gui/kernel/qapplication_mac.mm for
136     # platform detection. Note: needs to come before any directories to
137     # avoid extract failure.
138     [[ ${CHOST} == *-apple-darwin* ]] && \
139 yngwin 1.66 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
140     ${QT4_EXTRACT_DIRECTORIES}"
141 abcd 1.57 fi
142 yngwin 1.20
143 abcd 1.55 if ! version_is_at_least 4.1 $(gcc-version); then
144 pesa 1.123 ewarn "Using a GCC version lower than 4.1 is not supported."
145 yngwin 1.20 fi
146 caleb 1.1 }
147    
148 hwoarang 1.34 # @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
149     # @DESCRIPTION:
150 pesa 1.109 # Arguments for build_target_directories. Takes the directories in which the
151     # code should be compiled. This is a space-separated list.
152 hwoarang 1.34
153     # @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
154     # @DESCRIPTION:
155 pesa 1.109 # Space-separated list including the directories that will be extracted from
156     # Qt tarball.
157 hwoarang 1.34
158     # @FUNCTION: qt4-build_src_unpack
159     # @DESCRIPTION:
160 pesa 1.109 # Unpacks the sources.
161 yngwin 1.20 qt4-build_src_unpack() {
162 hwoarang 1.42 setqtenv
163 pesa 1.112
164 pesa 1.124 case ${QT4_BUILD_TYPE} in
165     live)
166     git-2_src_unpack
167     ;;
168     release)
169     local tarball="${MY_P}.tar.gz" target= targets=
170     for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
171     src/{qbase,qt_targets,qt_install}.pri bin config.tests \
172     mkspecs qmake ${QT4_EXTRACT_DIRECTORIES}
173     do
174     targets+="${MY_P}/${target} "
175     done
176 ingmar 1.11
177 pesa 1.124 ebegin "Unpacking parts of ${tarball}:" ${targets//${MY_P}\/}
178     tar -xzf "${DISTDIR}/${tarball}" ${targets}
179     eend $? || die "failed to unpack"
180     ;;
181     esac
182 ingmar 1.11 }
183    
184 hwoarang 1.37 # @ECLASS-VARIABLE: PATCHES
185 pesa 1.110 # @DEFAULT_UNSET
186 hwoarang 1.37 # @DESCRIPTION:
187 pesa 1.110 # PATCHES array variable containing all various patches to be applied.
188     # This variable is expected to be defined in global scope of ebuild.
189     # Make sure to specify the full path. This variable is utilised in
190     # src_unpack/src_prepare phase, based on EAPI.
191 hwoarang 1.37 #
192 pesa 1.110 # @CODE
193     # PATCHES=( "${FILESDIR}/mypatch.patch"
194     # "${FILESDIR}/patches_folder/" )
195     # @CODE
196 hwoarang 1.34
197     # @FUNCTION: qt4-build_src_prepare
198     # @DESCRIPTION:
199     # Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
200 pesa 1.109 # the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
201 yngwin 1.20 qt4-build_src_prepare() {
202 hwoarang 1.42 setqtenv
203 pesa 1.124
204     if [[ ${QT4_BUILD_TYPE} == live ]]; then
205     QTDIR="." ./bin/syncqt || die "syncqt failed"
206     fi
207 vapier 1.94
208 pesa 1.123 if version_is_at_least 4.7; then
209 pesa 1.99 # fix libX11 dependency on non X packages
210 pesa 1.98 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
211     has ${PN} ${nolibx11_pkgs} && qt_nolibx11
212 pesa 1.99
213     qt_assistant_cleanup
214 hwoarang 1.77 fi
215 wired 1.69
216 abcd 1.57 if use aqua; then
217     # provide a proper macx-g++-64
218     use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
219    
220     sed -e '/^CONFIG/s:app_bundle::' \
221     -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
222 pesa 1.109 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
223 abcd 1.57 fi
224    
225 ingmar 1.7 if [[ ${PN} != qt-core ]]; then
226 pesa 1.100 skip_qmake_build
227     skip_project_generation
228 ingmar 1.7 symlink_binaries_to_buildtree
229     fi
230 hwoarang 1.24
231 pesa 1.120 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
232 pesa 1.124 # qmake bus errors with -O2 or -O3 but -O1 works
233     # Bug 373061
234     replace-flags -O[23] -O1
235 abcd 1.57 fi
236 jer 1.97
237 hwoarang 1.21 # Bug 178652
238 abcd 1.55 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
239 hwoarang 1.21 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
240     append-flags -fno-gcse
241 gengor 1.18 fi
242    
243 pesa 1.100 if use_if_iuse c++0x; then
244 pesa 1.123 echo
245 hwoarang 1.96 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
246     ewarn "this is an official standard, some of the reverse dependencies"
247     ewarn "may fail to compile or link againt the Qt4 libraries. Before"
248     ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
249     ewarn "disabled."
250 pesa 1.123 echo
251 hwoarang 1.96 append-flags -std=c++0x
252     fi
253 pesa 1.98
254 gengor 1.30 # Unsupported old gcc versions - hardened needs this :(
255 pesa 1.120 if [[ $(gcc-major-version) -lt 4 ]]; then
256 gengor 1.30 ewarn "Appending -fno-stack-protector to CXXFLAGS"
257     append-cxxflags -fno-stack-protector
258     # Bug 253127
259 gengor 1.29 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
260 pesa 1.109 -i mkspecs/common/g++.conf || die
261 gengor 1.29 fi
262    
263 ayoy 1.49 # Bug 261632
264     if use ppc64; then
265     ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
266     append-flags -mminimal-toc
267     fi
268    
269 pesa 1.109 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
270     sed -e "/^SYSTEM_VARIABLES=/i \
271     CC='$(tc-getCC)'\n\
272     CXX='$(tc-getCXX)'\n\
273     CFLAGS='${CFLAGS}'\n\
274     CXXFLAGS='${CXXFLAGS}'\n\
275     LDFLAGS='${LDFLAGS}'\n" \
276 pesa 1.114 -i configure \
277     || die "sed SYSTEM_VARIABLES failed"
278 pesa 1.98
279 pesa 1.113 # Respect CC, CXX, LINK and *FLAGS in config.tests
280     find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
281     sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \
282     'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
283     'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
284     || die "sed config.tests failed"
285 wired 1.67
286 pesa 1.114 # Strip predefined CFLAGS from mkspecs (bug 312689)
287     sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf || die
288    
289 hwoarang 1.24 # Bug 172219
290 pesa 1.113 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
291 ingmar 1.7
292 wired 1.67 if [[ ${CHOST} == *-darwin* ]]; then
293 abcd 1.57 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
294     # crippled (by design) :/
295 pesa 1.124 local mac_gpp_conf=
296     if [[ -f mkspecs/common/mac-g++.conf ]]; then
297     # qt < 4.8 has mac-g++.conf
298     mac_gpp_conf="mkspecs/common/mac-g++.conf"
299     elif [[ -f mkspecs/common/g++-macx.conf ]]; then
300     # qt >= 4.8 has g++-macx.conf
301     mac_gpp_conf="mkspecs/common/g++-macx.conf"
302     else
303     die "no known conf file for mac found"
304     fi
305 pesa 1.114 sed \
306     -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
307 abcd 1.57 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
308     -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
309     -e "s:-arch\s\w*::g" \
310 pesa 1.124 -i ${mac_gpp_conf} \
311     || die "sed ${mac_gpp_conf} failed"
312 abcd 1.57
313     # Fix configure's -arch settings that appear in qmake/Makefile and also
314     # fix arch handling (automagically duplicates our -arch arg and breaks
315     # pch). Additionally disable Xarch support.
316 pesa 1.124 local mac_gcc_confs="${mac_gpp_conf}"
317     if [[ -f mkspecs/common/gcc-base-macx.conf ]]; then
318     mac_gcc_confs+=" mkspecs/common/gcc-base-macx.conf"
319     fi
320 abcd 1.57 sed \
321     -e "s:-arch i386::" \
322     -e "s:-arch ppc::" \
323     -e "s:-arch x86_64::" \
324     -e "s:-arch ppc64::" \
325     -e "s:-arch \$i::" \
326     -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
327     -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
328     -e "s:-Xarch_x86_64::g" \
329     -e "s:-Xarch_ppc64::g" \
330 pesa 1.124 -i configure ${mac_gcc_confs} \
331 pesa 1.114 || die "sed -arch/-Xarch failed"
332 abcd 1.57
333     # On Snow Leopard don't fall back to 10.5 deployment target.
334 pesa 1.120 if [[ ${CHOST} == *-apple-darwin10 ]]; then
335 abcd 1.57 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
336     -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
337 pesa 1.124 -i configure ${mac_gpp_conf} \
338 pesa 1.114 || die "sed deployment target failed"
339 abcd 1.57 fi
340     fi
341    
342     # this one is needed for all systems with a separate -liconv, apart from
343     # Darwin, for which the sources already cater for -liconv
344 pesa 1.120 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
345 pesa 1.114 sed -e 's|mac:\(LIBS += -liconv\)|\1|g' \
346 abcd 1.57 -i config.tests/unix/iconv/iconv.pro \
347 pesa 1.114 || die "sed iconv.pro failed"
348 abcd 1.57 fi
349    
350     # we need some patches for Solaris
351 pesa 1.114 sed -i -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
352 abcd 1.57 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
353     # use GCC over SunStudio
354     sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
355 pesa 1.114 # do not flirt with non-Prefix stuff, we're quite possessive
356 abcd 1.57 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
357     mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
358 pesa 1.113
359 hwoarang 1.37 base_src_prepare
360 ingmar 1.7 }
361    
362 hwoarang 1.34 # @FUNCTION: qt4-build_src_configure
363     # @DESCRIPTION:
364     # Default configure phase
365 yngwin 1.20 qt4-build_src_configure() {
366 hwoarang 1.42 setqtenv
367 pesa 1.121
368     local conf="
369     -prefix ${QTPREFIXDIR}
370     -bindir ${QTBINDIR}
371     -libdir ${QTLIBDIR}
372     -docdir ${QTDOCDIR}
373     -headerdir ${QTHEADERDIR}
374     -plugindir ${QTPLUGINDIR}
375     $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR})
376     -datadir ${QTDATADIR}
377     -translationdir ${QTTRANSDIR}
378     -sysconfdir ${QTSYSCONFDIR}
379     -examplesdir ${QTEXAMPLESDIR}
380     -demosdir ${QTDEMOSDIR}
381     -opensource -confirm-license
382     -shared -fast -largefile -stl -verbose
383     -nomake examples -nomake demos"
384    
385     # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
386     # $(tc-arch). Therefore we convert it to supported values.
387     case "$(tc-arch)" in
388     amd64|x64-*) conf+=" -arch x86_64" ;;
389     ppc-macos) conf+=" -arch ppc" ;;
390     ppc|ppc64|ppc-*) conf+=" -arch powerpc" ;;
391     sparc|sparc-*|sparc64-*) conf+=" -arch sparc" ;;
392     x86-macos) conf+=" -arch x86" ;;
393     x86|x86-*) conf+=" -arch i386" ;;
394     alpha|arm|ia64|mips|s390) conf+=" -arch $(tc-arch)" ;;
395     hppa|sh) conf+=" -arch generic" ;;
396     *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
397     esac
398    
399     conf+=" -platform $(qt_mkspecs_dir)"
400    
401     [[ $(get_libdir) != lib ]] && conf+=" -L${EPREFIX}/usr/$(get_libdir)"
402    
403     # debug/release
404     if use debug; then
405     conf+=" -debug"
406     else
407     conf+=" -release"
408     fi
409     conf+=" -no-separate-debug-info"
410    
411     # exceptions USE flag
412     conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
413    
414     # disable RPATH on Qt >= 4.8 (bug 380415)
415     version_is_at_least 4.8 && conf+=" -no-rpath"
416    
417     # precompiled headers don't work on hardened, where the flag is masked
418     conf+=" $(qt_use pch)"
419    
420     # -reduce-relocations
421     # This flag seems to introduce major breakage to applications,
422     # mostly to be seen as a core dump with the message "QPixmap: Must
423     # construct a QApplication before a QPaintDevice" on Solaris.
424     # -- Daniel Vergien
425     [[ ${CHOST} != *-solaris* ]] && conf+=" -reduce-relocations"
426 ingmar 1.7
427 abcd 1.57 # this one is needed for all systems with a separate -liconv, apart from
428     # Darwin, for which the sources already cater for -liconv
429 pesa 1.120 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
430 pesa 1.121 conf+=" -liconv"
431 pesa 1.120 fi
432 abcd 1.57
433 pesa 1.98 if use_if_iuse glib; then
434 abcd 1.57 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
435     # avoid the -pthread argument
436 pesa 1.121 conf+=" ${glibflags//-pthread}"
437 abcd 1.57 unset glibflags
438     fi
439    
440 pesa 1.98 if use_if_iuse qpa; then
441 pesa 1.123 echo
442 hwoarang 1.96 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
443     ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
444     ewarn "disable it before reporting any bugs related to this useflag."
445 pesa 1.123 echo
446 pesa 1.121 conf+=" -qpa"
447 hwoarang 1.96 fi
448    
449 pesa 1.120 if use aqua; then
450 abcd 1.57 # On (snow) leopard use the new (frameworked) cocoa code.
451 pesa 1.120 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
452 pesa 1.121 conf+=" -cocoa -framework"
453 pesa 1.120 # We need the source's headers, not the installed ones.
454 pesa 1.121 conf+=" -I${S}/include"
455 pesa 1.120 # Add hint for the framework location.
456 pesa 1.121 conf+=" -F${QTLIBDIR}"
457 abcd 1.57
458     # We are crazy and build cocoa + qt3support :-)
459     if use qt3support; then
460     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
461 pesa 1.114 -i configure || die
462 abcd 1.57 fi
463 pesa 1.120 else
464 pesa 1.121 conf+=" -no-framework"
465 abcd 1.57 fi
466     else
467 pesa 1.121 # freetype2 include dir is non-standard, thus pass it to configure
468     conf+=" $(pkg-config --cflags-only-I freetype2)"
469 abcd 1.57 fi
470    
471 pesa 1.121 conf+=" ${myconf}"
472     myconf=
473    
474     echo ./configure ${conf}
475     ./configure ${conf} || die "./configure failed"
476 wired 1.90
477     prepare_directories ${QT4_TARGET_DIRECTORIES}
478 yngwin 1.20 }
479 ingmar 1.7
480 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
481 vapier 1.93 # @DESCRIPTION:
482     # Actual compile phase
483 yngwin 1.20 qt4-build_src_compile() {
484 hwoarang 1.42 setqtenv
485 yngwin 1.20
486 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
487 caleb 1.1 }
488    
489 ayoy 1.76 # @FUNCTION: qt4-build_src_test
490     # @DESCRIPTION:
491     # Runs tests only in target directories.
492     qt4-build_src_test() {
493 pesa 1.118 # QtMultimedia does not have any test suite (bug #332299)
494 pesa 1.123 [[ ${PN} == qt-multimedia ]] && return
495 pesa 1.118
496 ayoy 1.76 for dir in ${QT4_TARGET_DIRECTORIES}; do
497     emake -j1 check -C ${dir}
498     done
499     }
500    
501 abcd 1.57 # @FUNCTION: fix_includes
502     # @DESCRIPTION:
503 pesa 1.109 # For MacOS X we need to add some symlinks when frameworks are
504 abcd 1.57 # being used, to avoid complications with some more or less stupid packages.
505     fix_includes() {
506 pesa 1.120 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]]; then
507 grobian 1.126 local frw dest f h rdir
508 abcd 1.57 # Some packages tend to include <Qt/...>
509     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
510    
511 grobian 1.126 # Fake normal headers when frameworks are installed... eases life later
512     # on, make sure we use relative links though, as some ebuilds assume
513     # these dirs exist in src_install to add additional files
514     f=${QTHEADERDIR}
515     h=${QTLIBDIR}
516     while [[ -n ${f} && ${f%%/*} == ${h%%/*} ]] ; do
517     f=${f#*/}
518     h=${h#*/}
519     done
520     rdir=${h}
521     f="../"
522     while [[ ${h} == */* ]] ; do
523     f="${f}../"
524     h=${h#*/}
525     done
526     rdir="${f}${rdir}"
527    
528 abcd 1.57 for frw in "${D}${QTLIBDIR}"/*.framework; do
529     [[ -e "${frw}"/Headers ]] || continue
530     f=$(basename ${frw})
531     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
532 grobian 1.126 dosym "${rdir}"/${f}/Headers "${dest}"
533 abcd 1.57
534     # Link normal headers as well.
535     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
536     h=$(basename ${hdr})
537 grobian 1.126 dosym "../${rdir}"/${f}/Headers/${h} \
538     "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
539 abcd 1.57 done
540     done
541     fi
542     }
543    
544 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
545     # @DESCRIPTION:
546     # Perform the actual installation including some library fixes.
547 caleb 1.4 qt4-build_src_install() {
548 abcd 1.57 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
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 hwoarang 1.78 # remove .la files since we are building only shared Qt libraries
557 pesa 1.114 find "${D}"${QTLIBDIR} -type f -name '*.la' -print0 | xargs -0 rm -f
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     QTBINDIR=${EPREFIX}/usr/bin
566     QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
567     QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
568     QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
569     QTHEADERDIR=${EPREFIX}/usr/include/qt4
570 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
571 abcd 1.104 QTIMPORTDIR=${QTLIBDIR}/imports
572 pesa 1.109 QTDATADIR=${EPREFIX}/usr/share/qt4
573     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 abcd 1.57 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
579 pesa 1.109
580 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
581    
582     unset QMAKESPEC
583     }
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_assistant_cleanup
868 pesa 1.110 # @INTERNAL
869 hwoarang 1.77 # @DESCRIPTION:
870 pesa 1.99 # Tries to clean up tools.pro for qt-assistant ebuilds.
871     # Meant to be called in src_prepare().
872     # Since Qt 4.7.4 this function is a no-op.
873 hwoarang 1.77 qt_assistant_cleanup() {
874 pesa 1.99 # apply patching to qt-assistant ebuilds only
875 pesa 1.123 [[ ${PN} != qt-assistant ]] && return
876 pesa 1.99
877     # no longer needed for 4.7.4 and later
878 pesa 1.123 version_is_at_least 4.7.4 && return
879 pesa 1.99
880 hwoarang 1.77 # different versions (and branches...) may need different handling,
881     # add a case if you need special handling
882     case "${MY_PV_EXTRA}" in
883     *kde-qt*)
884     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
885     -e "/mac/,/^embedded.*makeqpf$/d" \
886     -i tools/tools.pro || die "patching tools.pro failed"
887     ;;
888     *)
889     sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
890     -e "/mac/,/^embedded.*makeqpf$/d" \
891     -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
892     -i tools/tools.pro || die "patching tools.pro failed"
893     ;;
894     esac
895     }
896    
897     # @FUNCTION: qt_nolibx11
898 pesa 1.110 # @INTERNAL
899 hwoarang 1.77 # @DESCRIPTION:
900 pesa 1.109 # Ignore X11 tests for packages that don't need X libraries installed.
901 hwoarang 1.77 qt_nolibx11() {
902     sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
903     die "x11 check sed failed"
904     }
905    
906 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