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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.154 - (hide annotations) (download)
Mon Nov 11 19:47:39 2013 UTC (13 months, 1 week ago) by pesa
Branch: MAIN
Changes since 1.153: +3 -6 lines
Sync with qt overlay. Changes should affect only live ebuilds.

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