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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.141 - (hide annotations) (download)
Mon Dec 31 06:29:42 2012 UTC (18 months, 1 week ago) by pesa
Branch: MAIN
Changes since 1.140: +5 -18 lines
Remove dead code.

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.141 # $Header: $
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.98 if use_if_iuse qpa; then
429 pesa 1.123 echo
430 hwoarang 1.96 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
431     ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
432     ewarn "disable it before reporting any bugs related to this useflag."
433 pesa 1.123 echo
434 pesa 1.121 conf+=" -qpa"
435 hwoarang 1.96 fi
436    
437 pesa 1.120 if use aqua; then
438 abcd 1.57 # On (snow) leopard use the new (frameworked) cocoa code.
439 pesa 1.120 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
440 pesa 1.121 conf+=" -cocoa -framework"
441 pesa 1.120 # We need the source's headers, not the installed ones.
442 pesa 1.121 conf+=" -I${S}/include"
443 pesa 1.120 # Add hint for the framework location.
444 pesa 1.121 conf+=" -F${QTLIBDIR}"
445 abcd 1.57
446     # We are crazy and build cocoa + qt3support :-)
447     if use qt3support; then
448     sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
449 pesa 1.114 -i configure || die
450 abcd 1.57 fi
451 pesa 1.120 else
452 pesa 1.121 conf+=" -no-framework"
453 abcd 1.57 fi
454     else
455 pesa 1.121 # freetype2 include dir is non-standard, thus pass it to configure
456     conf+=" $(pkg-config --cflags-only-I freetype2)"
457 abcd 1.57 fi
458    
459 pesa 1.121 conf+=" ${myconf}"
460     myconf=
461    
462     echo ./configure ${conf}
463     ./configure ${conf} || die "./configure failed"
464 wired 1.90
465     prepare_directories ${QT4_TARGET_DIRECTORIES}
466 yngwin 1.20 }
467 ingmar 1.7
468 hwoarang 1.34 # @FUNCTION: qt4-build_src_compile
469 vapier 1.93 # @DESCRIPTION:
470     # Actual compile phase
471 yngwin 1.20 qt4-build_src_compile() {
472 hwoarang 1.42 setqtenv
473 yngwin 1.20
474 abcd 1.55 build_directories ${QT4_TARGET_DIRECTORIES}
475 caleb 1.1 }
476    
477 ayoy 1.76 # @FUNCTION: qt4-build_src_test
478     # @DESCRIPTION:
479     # Runs tests only in target directories.
480     qt4-build_src_test() {
481 pesa 1.118 # QtMultimedia does not have any test suite (bug #332299)
482 pesa 1.123 [[ ${PN} == qt-multimedia ]] && return
483 pesa 1.118
484 ayoy 1.76 for dir in ${QT4_TARGET_DIRECTORIES}; do
485     emake -j1 check -C ${dir}
486     done
487     }
488    
489 abcd 1.57 # @FUNCTION: fix_includes
490     # @DESCRIPTION:
491 pesa 1.109 # For MacOS X we need to add some symlinks when frameworks are
492 abcd 1.57 # being used, to avoid complications with some more or less stupid packages.
493     fix_includes() {
494 pesa 1.120 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]]; then
495 grobian 1.126 local frw dest f h rdir
496 abcd 1.57 # Some packages tend to include <Qt/...>
497     dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
498    
499 grobian 1.126 # Fake normal headers when frameworks are installed... eases life later
500     # on, make sure we use relative links though, as some ebuilds assume
501     # these dirs exist in src_install to add additional files
502     f=${QTHEADERDIR}
503     h=${QTLIBDIR}
504     while [[ -n ${f} && ${f%%/*} == ${h%%/*} ]] ; do
505     f=${f#*/}
506     h=${h#*/}
507     done
508     rdir=${h}
509     f="../"
510     while [[ ${h} == */* ]] ; do
511     f="${f}../"
512     h=${h#*/}
513     done
514     rdir="${f}${rdir}"
515    
516 abcd 1.57 for frw in "${D}${QTLIBDIR}"/*.framework; do
517     [[ -e "${frw}"/Headers ]] || continue
518     f=$(basename ${frw})
519     dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
520 grobian 1.126 dosym "${rdir}"/${f}/Headers "${dest}"
521 abcd 1.57
522     # Link normal headers as well.
523     for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
524     h=$(basename ${hdr})
525 grobian 1.126 dosym "../${rdir}"/${f}/Headers/${h} \
526     "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
527 abcd 1.57 done
528     done
529     fi
530     }
531    
532 hwoarang 1.34 # @FUNCTION: qt4-build_src_install
533     # @DESCRIPTION:
534     # Perform the actual installation including some library fixes.
535 caleb 1.4 qt4-build_src_install() {
536 hwoarang 1.42 setqtenv
537 pesa 1.98
538 abcd 1.55 install_directories ${QT4_TARGET_DIRECTORIES}
539 ingmar 1.7 install_qconfigs
540 caleb 1.4 fix_library_files
541 abcd 1.57 fix_includes
542 pesa 1.98
543 pesa 1.139 # remove .la files since we are building only shared libraries
544     prune_libtool_files
545 caleb 1.4 }
546    
547 hwoarang 1.42 # @FUNCTION: setqtenv
548 pesa 1.110 # @INTERNAL
549 hwoarang 1.42 setqtenv() {
550     # Set up installation directories
551 abcd 1.57 QTPREFIXDIR=${EPREFIX}/usr
552 pesa 1.139 QTBINDIR=${QTPREFIXDIR}/bin
553     QTLIBDIR=${QTPREFIXDIR}/$(get_libdir)/qt4
554     QTPCDIR=${QTPREFIXDIR}/$(get_libdir)/pkgconfig
555     QTDOCDIR=${QTPREFIXDIR}/share/doc/qt-${PV}
556     QTHEADERDIR=${QTPREFIXDIR}/include/qt4
557 hwoarang 1.42 QTPLUGINDIR=${QTLIBDIR}/plugins
558 abcd 1.104 QTIMPORTDIR=${QTLIBDIR}/imports
559 pesa 1.139 QTDATADIR=${QTPREFIXDIR}/share/qt4
560 pesa 1.109 QTTRANSDIR=${QTDATADIR}/translations
561 abcd 1.57 QTSYSCONFDIR=${EPREFIX}/etc/qt4
562 hwoarang 1.42 QTEXAMPLESDIR=${QTDATADIR}/examples
563     QTDEMOSDIR=${QTDATADIR}/demos
564 pesa 1.109 QMAKE_LIBDIR_QT=${QTLIBDIR}
565    
566 hwoarang 1.42 PLATFORM=$(qt_mkspecs_dir)
567 pesa 1.129 unset QMAKESPEC
568 hwoarang 1.42
569 pesa 1.129 export XDG_CONFIG_HOME="${T}"
570 hwoarang 1.42 }
571    
572 wired 1.90 # @FUNCTION: prepare_directories
573 hwoarang 1.34 # @USAGE: < directories >
574 pesa 1.110 # @INTERNAL
575 hwoarang 1.34 # @DESCRIPTION:
576 pesa 1.109 # Generates Makefiles for the given list of directories.
577 wired 1.90 prepare_directories() {
578 pesa 1.139 # avoid running over the maximum argument number, bug #299810
579     {
580     echo "${S}"/mkspecs/common/*.conf
581     find "${S}" -name '*.pr[io]'
582     } | xargs sed -i \
583     -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
584     -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
585     || die
586    
587 abcd 1.55 for x in "$@"; do
588 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
589 pesa 1.98 einfo "Running qmake in: ${x}"
590 pesa 1.139 "${S}"/bin/qmake \
591     "LIBS+=-L${QTLIBDIR}" \
592     "CONFIG+=nostrip" \
593     || die "qmake failed"
594 pesa 1.109 popd >/dev/null || die
595 wired 1.90 done
596     }
597    
598     # @FUNCTION: build_directories
599     # @USAGE: < directories >
600 pesa 1.110 # @INTERNAL
601 wired 1.90 # @DESCRIPTION:
602 pesa 1.109 # Compiles the code in the given list of directories.
603 wired 1.90 build_directories() {
604     for x in "$@"; do
605 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
606 pesa 1.139 emake \
607     AR="$(tc-getAR) cqs" \
608     CC="$(tc-getCC)" \
609 wired 1.67 CXX="$(tc-getCXX)" \
610 pesa 1.139 LINK="$(tc-getCXX)" \
611     RANLIB=":" \
612     STRIP=":" \
613     || die "emake failed"
614 pesa 1.109 popd >/dev/null || die
615 caleb 1.1 done
616     }
617    
618 hwoarang 1.34 # @FUNCTION: install_directories
619     # @USAGE: < directories >
620 pesa 1.110 # @INTERNAL
621 hwoarang 1.34 # @DESCRIPTION:
622 pesa 1.109 # Runs emake install in the given directories, which are separated by spaces.
623 caleb 1.1 install_directories() {
624 abcd 1.55 for x in "$@"; do
625 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
626 ingmar 1.7 emake INSTALL_ROOT="${D}" install || die "emake install failed"
627 pesa 1.109 popd >/dev/null || die
628 caleb 1.1 done
629     }
630    
631 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
632     # @DESCRIPTION:
633     # List options that need to be added to QT_CONFIG in qconfig.pri
634 abcd 1.55 : ${QCONFIG_ADD:=}
635 ingmar 1.7
636     # @ECLASS-VARIABLE: QCONFIG_REMOVE
637     # @DESCRIPTION:
638     # List options that need to be removed from QT_CONFIG in qconfig.pri
639 abcd 1.55 : ${QCONFIG_REMOVE:=}
640 ingmar 1.7
641     # @ECLASS-VARIABLE: QCONFIG_DEFINE
642     # @DESCRIPTION:
643     # List variables that should be defined at the top of QtCore/qconfig.h
644 abcd 1.55 : ${QCONFIG_DEFINE:=}
645 ingmar 1.7
646 hwoarang 1.34 # @FUNCTION: install_qconfigs
647 pesa 1.110 # @INTERNAL
648 vapier 1.93 # @DESCRIPTION:
649 pesa 1.109 # Install gentoo-specific mkspecs configurations.
650 ingmar 1.7 install_qconfigs() {
651 zlin 1.9 local x
652     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
653 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
654     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
655     done
656 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
657 ingmar 1.7 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed"
658 zlin 1.9 fi
659 ingmar 1.7
660 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
661 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
662     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
663     done
664 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
665 ingmar 1.7 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
666     fi
667     }
668    
669 hwoarang 1.34 # @FUNCTION: generate_qconfigs
670 pesa 1.110 # @INTERNAL
671 vapier 1.93 # @DESCRIPTION:
672 pesa 1.109 # Generates gentoo-specific qconfig.{h,pri}.
673 ingmar 1.7 generate_qconfigs() {
674 pesa 1.123 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${PN} == qt-core ]]; then
675 ingmar 1.7 local x qconfig_add qconfig_remove qconfig_new
676     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
677     [[ -f ${x} ]] || continue
678 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
679     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
680 ingmar 1.7 done
681    
682     # these error checks do not use die because dying in pkg_post{inst,rm}
683     # just makes things worse.
684     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
685     # start with the qconfig.pri that qt-core installed
686     if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
687     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
688     eerror "cp qconfig failed."
689     return 1
690     fi
691    
692     # generate list of QT_CONFIG entries from the existing list
693     # including qconfig_add and excluding qconfig_remove
694     for x in $(sed -n 's/^QT_CONFIG +=//p' \
695     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
696 ssuominen 1.91 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
697 ingmar 1.7 done
698    
699     # replace the existing QT_CONFIG list with qconfig_new
700     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
701     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
702     eerror "Sed for QT_CONFIG failed"
703     return 1
704     fi
705    
706     # create Gentoo/qconfig.h
707     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
708     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
709     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
710     return 1
711     fi
712     fi
713     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
714     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
715     [[ -f ${x} ]] || continue
716     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
717     done
718     else
719     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
720     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
721     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
722     "${ROOT}${QTDATADIR}" \
723     "${ROOT}${QTHEADERDIR}"/Gentoo \
724     "${ROOT}${QTHEADERDIR}" 2>/dev/null
725     fi
726     fi
727     }
728    
729 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
730 vapier 1.93 # @DESCRIPTION:
731 pesa 1.109 # Regenerate configuration when the package is completely removed.
732 ingmar 1.7 qt4-build_pkg_postrm() {
733     generate_qconfigs
734 caleb 1.1 }
735    
736 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
737 vapier 1.93 # @DESCRIPTION:
738 pesa 1.109 # Regenerate configuration, plus throw a message about possible
739 hwoarang 1.34 # breakages and proposed solutions.
740 ingmar 1.7 qt4-build_pkg_postinst() {
741     generate_qconfigs
742 caleb 1.1 }
743    
744 pesa 1.100 # @FUNCTION: skip_qmake_build
745 pesa 1.110 # @INTERNAL
746 hwoarang 1.34 # @DESCRIPTION:
747 pesa 1.109 # Patches configure to skip qmake compilation, as it's already installed by qt-core.
748 pesa 1.100 skip_qmake_build() {
749 pesa 1.109 sed -i -e "s:if true:if false:g" "${S}"/configure || die
750 caleb 1.1 }
751    
752 pesa 1.100 # @FUNCTION: skip_project_generation
753 pesa 1.110 # @INTERNAL
754 hwoarang 1.34 # @DESCRIPTION:
755 pesa 1.109 # Exit the script early by throwing in an exit before all of the .pro files are scanned.
756 pesa 1.100 skip_project_generation() {
757 pesa 1.109 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
758 caleb 1.1 }
759    
760 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
761 pesa 1.110 # @INTERNAL
762 hwoarang 1.34 # @DESCRIPTION:
763 pesa 1.109 # Symlinks generated binaries to buildtree, so they can be used during compilation time.
764 ingmar 1.7 symlink_binaries_to_buildtree() {
765     for bin in qmake moc uic rcc; do
766 pesa 1.100 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
767 ingmar 1.7 done
768 caleb 1.1 }
769    
770 hwoarang 1.34 # @FUNCTION: fix_library_files
771 pesa 1.110 # @INTERNAL
772 hwoarang 1.34 # @DESCRIPTION:
773 pesa 1.109 # Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
774     # moves the *.pc files into the pkgconfig directory.
775 caleb 1.1 fix_library_files() {
776 pesa 1.109 local libfile
777 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
778     if [[ -e ${libfile} ]]; then
779 pesa 1.98 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
780 ingmar 1.7 fi
781     done
782 caleb 1.1
783 pesa 1.109 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
784 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
785     if [[ -e ${libfile} ]]; then
786 pesa 1.109 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
787 caleb 1.1
788 abcd 1.55 # Move .pc files into the pkgconfig directory
789 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
790 pesa 1.109 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
791 ingmar 1.7 fi
792     done
793    
794     # Don't install an empty directory
795     rmdir "${D}"/${QTLIBDIR}/pkgconfig
796 caleb 1.1 }
797    
798 hwoarang 1.34 # @FUNCTION: qt_use
799     # @USAGE: < flag > [ feature ] [ enableval ]
800 yngwin 1.39 # @DESCRIPTION:
801 pesa 1.111 # This will echo "-${enableval}-${feature}" if <flag> is enabled, or
802     # "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
803 hwoarang 1.34 # will be used for that. If [enableval] is not specified, it omits the
804 pesa 1.111 # "-${enableval}" part.
805 caleb 1.1 qt_use() {
806 pesa 1.111 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
807 ingmar 1.7 }
808    
809 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
810     # @RETURN: the specs-directory w/o path
811 yngwin 1.39 # @DESCRIPTION:
812 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
813 caleb 1.1 qt_mkspecs_dir() {
814 pesa 1.109 local spec=
815 pesa 1.122
816     case "${CHOST}" in
817 caleb 1.5 *-freebsd*|*-dragonfly*)
818 abcd 1.55 spec=freebsd ;;
819 caleb 1.5 *-openbsd*)
820 abcd 1.55 spec=openbsd ;;
821 caleb 1.5 *-netbsd*)
822 abcd 1.55 spec=netbsd ;;
823 ingmar 1.7 *-darwin*)
824 abcd 1.57 if use aqua; then
825     # mac with carbon/cocoa
826     spec=macx
827     else
828     # darwin/mac with x11
829     spec=darwin
830     fi
831     ;;
832     *-solaris*)
833     spec=solaris ;;
834 caleb 1.5 *-linux-*|*-linux)
835 abcd 1.55 spec=linux ;;
836 caleb 1.5 *)
837 pesa 1.122 die "${FUNCNAME}(): Unknown CHOST '${CHOST}'" ;;
838 caleb 1.5 esac
839    
840 pesa 1.122 case "$(tc-getCXX)" in
841     *g++*)
842     spec+=-g++ ;;
843     *icpc*)
844     spec+=-icc ;;
845     *)
846     die "${FUNCNAME}(): Unknown compiler '$(tc-getCXX)'" ;;
847     esac
848 caleb 1.1
849 abcd 1.57 # Add -64 for 64bit profiles
850     if use x64-freebsd ||
851     use amd64-linux ||
852     use x64-macos ||
853     use x64-solaris ||
854     use sparc64-solaris
855     then
856     spec+=-64
857     fi
858    
859 caleb 1.5 echo "${spec}"
860 caleb 1.1 }
861    
862 hwoarang 1.77 # @FUNCTION: qt_nolibx11
863 pesa 1.110 # @INTERNAL
864 hwoarang 1.77 # @DESCRIPTION:
865 pesa 1.109 # Ignore X11 tests for packages that don't need X libraries installed.
866 hwoarang 1.77 qt_nolibx11() {
867     sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
868     die "x11 check sed failed"
869     }
870    
871 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