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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.151 - (hide annotations) (download)
Mon Oct 14 17:24:36 2013 UTC (9 months, 2 weeks ago) by pesa
Branch: MAIN
Changes since 1.150: +7 -5 lines
Switch to git-r3.eclass

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