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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.144 - (hide annotations) (download)
Sun Mar 3 00:22:56 2013 UTC (18 months, 2 weeks ago) by pesa
Branch: MAIN
Changes since 1.143: +10 -10 lines
Qt category move.

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