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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.150 - (hide annotations) (download)
Tue Aug 13 10:17:54 2013 UTC (14 months, 1 week ago) by pesa
Branch: MAIN
Changes since 1.149: +13 -8 lines
Filter -fgraphite-identity on gcc 4.7 (bug 417105).

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