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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.122 - (hide annotations) (download)
Thu Mar 1 15:19:14 2012 UTC (2 years, 9 months ago) by pesa
Branch: MAIN
Changes since 1.121: +12 -11 lines
Cleanup qt_mkspecs_dir().

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