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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.142 - (hide annotations) (download)
Thu Jan 3 08:39:49 2013 UTC (23 months, 2 weeks ago) by pesa
Branch: MAIN
Changes since 1.141: +2 -11 lines
Remove more dead code, spotted by Arfrever.

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