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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.123 - (hide annotations) (download)
Thu Mar 8 14:24:40 2012 UTC (2 years, 1 month ago) by pesa
Branch: MAIN
Changes since 1.122: +19 -20 lines
Die earlier on unsupported EAPI.

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